Etter ett år med utvikling og 30 eksperimentelle versjoner er den stabile utgivelsen av den åpne implementeringen av Win32 API - Wine 7.0, som inkluderer mer enn 9100 endringer, presentert. Blant de viktigste prestasjonene i den nye versjonen er oversettelsen av de fleste Wine-modulene til PE-format, støtte for temaer, utvidelse av stakken for spillkontroller og inndatabehandlere med HID-grensesnitt, samt implementering av WoW64-arkitekturen for å kjøre 32-bits programmer i et 64-bits miljø.
I Wine er det bekreftet at 5156 (5049 for ett år siden) Windows-programmer fungerer fullt ut, og ytterligere 4312 (4227 for ett år siden) programmer fungerer utmerket med ekstra innstillinger og eksterne DLL-filer. 3813 programmer (3703 for ett år siden) opplever små problemer i ytelsen, som ikke hindrer bruken av hovedfunksjonene.
Nøkkelnyhetene i Wine 7.0:
- Moduler i PE-format
- Nesten alle DLL-biblioteker er oversatt til bruk av PE (Portable Executable) formatet, som benyttes i Windows, i stedet for ELF. Bruken av PE løser problemer med støtte for ulike kopibeskyttelsessystemer som verifiserer identiteten til systemmoduler både på disk og i minnet.
- Muligheten for interaksjon mellom PE-moduler og Unix-biblioteker er implementert ved hjelp av det innebygde systemkallet i NT-kjernen, som skjuler anropet til Unix-kode fra Windows-debuggere og oppdager registrering av tråder.
- Innbygde DLL-er lastes nå inn kun når den tilsvarende filen i PE-format finnes på disken, uavhengig av om det er et ekte bibliotek eller en stub. Denne endringen gjør at applikasjonen alltid kan se korrekt binding til PE-filer. For å deaktivere denne oppførselen kan miljøvariabelen WINEBOOTSTRAPMODE brukes.
- WoW64
- WoW64-arkitekturen (64-bit Windows-on-Windows) er implementert, og den gjør det mulig å kjøre 32-bits Windows-applikasjoner i 64-bits Unix-prosesser. Støtten er implementert gjennom tilkobling av et lag som oversetter 32-bits NT-systemanrop til 64-bits kall til NTDLL.
- WoW64-lagene er forberedt for flesteparten av Unix-bibliotekene og lar 32-bits PE-moduler få tilgang til 64-bits Unix-biblioteker. Når alle moduler er konvertert til PE-format, vil det bli mulig å kjøre 32-bits Windows-programmer uten å installere 32-bits Unix-biblioteker.
- Temaer
- Temaer for utseende er nå støttet. Inkludert er temaene «Lys», «Blå» og «Klassisk Blå», som kan velges via konfigurasjonsverktøyet WineCfg.
- Muligheten for å tilpasse utseendet til alle grensesnittelementer gjennom temaer er lagt til. Automatisk oppdatering av utseendet til elementene etter bytte av tema er sikret.
- Alle innebygde applikasjoner i Wine har fått støtte for temaer. Applikasjonene er tilpasset skjermer med høy pikseltetthet (High DPI).
- Grafikkundersystem
- Et nytt Win32u-bibliotek er lagt til, som inneholder deler av bibliotekene GDI32 og USER32, relatert til grafikk behandling og vindusadministrasjon på kjernenivå. Det vil bli arbeidet videre med å overføre komponenter fra drivere som winex11.drv og winemac.drv til Win32u.
- Vulkan-driveren har implementert støtte for spesifikasjonen til grafikk-API Vulkan 1.2.201.
- Støtte for å tegne striper geometriske objekter via Direct2D API er nå tilgjengelig, med mulighet for å sjekke klikk (hit-test).
- Innledende støtte for visuelle effekter brukt med grensesnittet ID2D1Effect er implementert i Direct2D API.
- ID2D1MultiThread-grensesnittet, brukt for å organisere eksklusiv tilgang til ressurser i flertrådede applikasjoner, er lagt til i Direct2D API.
- WindowsCodecs-biblioteket har fått støtte for dekodering av bilder i WMP-format (Windows Media Photo) og koding av bilder i DDS-format (DirectDraw Surface). Støtte for koding av bilder i ICNS-format (for macOS), som ikke støttes i Windows, er opphevet.
- Direct3D
- Den nye rendering-motoren, som oversetter Direct3D-funksjonskall til Vulkan-grafikk-API, har blitt betydelig forbedret. I de fleste tilfeller er nivået av støtte for Direct3D 10 og 11 i motoren basert på Vulkan nå likt det gamle OpenGL-baserte motoren. For å aktivere rendering-motoren via Vulkan, må registerverdien for Direct3D «renderer» settes til «vulkan».
- Mange funksjoner fra Direct3D 10 og 11 er implementert, inkludert utsettelse av kontekster (Deferred Contexts) som fungerer i konteksten av enhetens tilstandsobjekter, faste forskyvninger i buffere, rensing av uordnede teksturvisninger, kopiering av data mellom ressurser i typeløse formater (DXGI_FORMAT_BC3_TYPELESS, DXGI_FORMAT_R32G32B32A32_TYPELESS) osv.
- Støtte for flermonitoroppsett er lagt til, slik at man kan velge skjerm for å vise Direct3D-applikasjonen i fullskjermmodus.
- DXGI-APIet har fått mulighet for gamma-korrigering av skjermen, som kan brukes av applikasjoner basert på Direct3D 10 og 11 for å endre skjermens lysstyrke. Støtte for uthenting av tellere for virtuelle rammebuffere (SwapChain) er gitt.
- Direct3D 12 har fått støtte for rotorspråksignaturer versjon 1.1.
- I rendering-koden via Vulkan-APIet er effektiviteten i behandlingen av forespørselene forbedret når systemet støtter utvidelsen VK_EXT_host_query_reset.
- Mulighet for å vise virtuelle rammebuffere (SwapChain) via GDI er lagt til, når OpenGL eller Vulkan ikke kan brukes til visning, for eksempel ved visning i vinduer fra forskjellige prosesser, slik som programmer basert på CEF-rammeverket (Chromium Embedded Framework).
- Ved bruk av en backend for GLSL-shadere er det sikret anvendelse av modifikatoren «precise» for shaderinstruksjoner.
- DirectDraw-APIet har fått støtte for 3D-rendering i systemminnet ved bruk av programvareenheter som «RGB», «MMX» og «Ramp».
- Direkte3D-grafikkortdatabasen har fått tilføyd AMD Radeon RX 5500M, AMD Radeon RX 6800/6800 XT/6900 XT, AMD Van Gogh, Intel UHD Graphics 630 og NVIDIA GT 1030.
- Nøkkelen «UseGLSL» er fjernet fra registeret HKEY_CURRENT_USER\Software\Wine\Direct3D, og fra og med Wine 5.0 bør man bruke «shader_backend» i stedet.
- For å støtte Direct3D 12 er det nå nødvendig å ha vkd3d-biblioteket i det minste versjon 1.2.
- D3DX
- I implementeringen av D3DX 10 er støtten for rammeverket for visuelle effekter forbedret, og støtte for bildeforbildeformatet Windows Media Photo (JPEG XR) er lagt til.
- Funksjoner for teksturoppretting gitt i D3DX10, som D3DX10CreateTextureFromMemory(), er lagt til.
- Programmeringsgrensesnittene ID3DX10Sprite og ID3DX10Font er delvis implementert.
- Sound and Video
- GStreamer-overbygningene for DirectShow og Media Foundation-rammeverket er samlet i én felles backend WineGStreamer, noe som skal forenkle utviklingen av nye API-er for dekoding av innhold.
- Windows Media-objekter for synkron og asynkron lesing er implementert basert på backend WineGStreamer.
- Videreutviklingen av implementeringen av Media Foundation-rammeverket har blitt fullført, med støtte for funksjonaliteten IMFPMediaPlayer, sample allocator, forbedret støtte for EVR og renderingsbufferne SAR.
- Biblioteket wineqtdecoder, som ga en dekoder for QuickTime-formatet (nå brukes GStreamer for alle kodeker), er fjernet.
- Inndataenheter
- Betydelig forbedret stakk for inndat enheter som støtter HID-protokollen (Human Interface Devices), som nå inkluderer funksjoner som parsing av HID-deskripsjoner, behandling av HID-meldinger og tilgjengelighet av mini-drivere for HID.
- I backendene til driveren winebus.sys er oversettelsen av enhetsbeskrivelser til HID-meldinger forbedret.
- En ny DirectInput backend for joystick som støtter HID-protokollen er lagt til. Det er implementert mulighet for å bruke tilbakemeldings-effekter i joysticks. kontrollpanel Joysticks. Interaksjonen med enheter som er kompatible med XInput er optimalisert. I WinMM er støtten for joysticks nå flyttet til DInput, i stedet for å bruke evdev backend i Linux og IOHID i macOS. Den gamle joystickdriveren winejoystick.drv er fjernet.
- Det er lagt til nye tester i DInput-modulen, basert på bruk av virtuelle HID-enheter som ikke krever fysiske enheter.
- Tekst og skrifttyper
- I DirectWrite er det lagt til et Font Set-objekt.
- I RichEdit er grensesnittet TextHost implementert korrekt.
- Kjerne (Windows-kjernegrensesnitt)
- Når Wine starter en ukjent kjørbar fil (f.eks. ‘wine foo.msi’), kalles nå start.exe, som aktiverer håndterere knyttet til filtypen.
- Støtte for synkroniseringsmekanismer som NtAlertThreadByThreadId og NtWaitForAlertByThreadId, som ligner på futexer i Linux, er lagt til.
- Støtte for NT-debugge objekter som brukes til å debugge kjernefunksjoner er lagt til.
- Støtte for dynamiske registernøkler for lagring av ytelsesdata er lagt til.
- C Runtime
- I C runtime er et komplett sett med matematiske funksjoner implementert, hovedsakelig overført fra Musl-biblioteket.
- For alle CPU-plattformer er riktig støtte for funksjoner for flyttall-beregning sikret.
- Nettverksmuligheter
- Kompatibilitetsmodus for Internet Explorer 11 (IE11) er forbedret, og brukes nå som standard for behandling av HTML-dokumenter.
- I mshtml-biblioteket er JavaScript-modusen ES6 (ECMAScript 2015) implementert, som inkluderer støtte for funksjoner som let-uttrykk og Map-objekt.
- Installasjon av Wine MSI-pakker med tillegg til Gecko-motoren i arbeidskatalogen skjer nå ved behov, ikke under oppdatering av Wine.
- Støtte for DTLS-protokollen er lagt til.
- En NSI (Network Store Interface) tjeneste er implementert, som lagrer og overfører informasjon om ruting og nettverksgrensesnitt på datamaskinen til andre tjenester.
- API-handlere for WinSock, som setsockopt og getsockopt, er flyttet til NTDLL-biblioteket og afd.sys-driveren for å samsvare med Windows-arkitekturen.
- Egne filer med nettverksdatabaser som /etc/protocols og /etc/networks blir nå installert i arbeidskatalogen til Wine, i stedet for å referere til tilsvarende Unix-databaser.
- Alternative plattformer
- Støtte for Apple-maskinvare som er bygget på ARM-brikker M1 (Apple Silicon) er lagt til.
- For å støtte funksjoner fra BCrypt og Secur32 på macOS, kreves nå installasjon av GnuTLS-biblioteket.
- 32-bits kjørbare filer for ARM-plattformer blir nå bygget i Thumb-2-modus, lik Windows. En preloader brukes for å laste slike filer.
- Støtte for unrolling (unwinding) av unntak er implementert for 32-bits ARM-plattformer.
- Antall støttede forespørsel om lavnivå systeminformasjon for FreeBSD er utvidet, som data om minnetilstand og batterinivå.
- Innebygde applikasjoner og utviklingsverktøy
- Støtte for 32- og 64-bits visninger av registeret er lagt til i verktøyet reg.exe. Støtte for kopiering av registernøkler er også lagt til.
- Støtte for å vise dump av Windows-metadata og detaljerte beskrivelser av CodeView-poster er lagt til i verktøyet WineDump.
- Muligheten til å feilsøke 32-bits prosesser fra en 64-bits debugger er implementert i Wine Debugger (winedbg).
- Kompilatoren IDL (widl) har fått støtte for å laste biblioteker innebygd i PE-filer, støtte for WinRT-spesifikke attributter og konstruksjoner, samt muligheten til å søke etter biblioteker knyttet til plattformen.
- Byggeverktøy
- I katalogene spesifikke for maskinvarearkitekturer lagres nå biblioteker med navn som reflekterer arkitekturen og typen av kjørbare filer, for eksempel 'i386-windows' for PE-format og 'x86_64-unix' for unix-biblioteker, noe som muliggjør støtte for forskjellige arkitekturer i én Wine-installasjon og gjør kryss-kompilering av Winelib mulig.
- For å sette alternativer i PE-filer som styrer overgangen til bruk av native DLL-biblioteker, er flagget '--prefer-native option' lagt til i winebuild (håndtering av DLL_WINE_PREATTACH i DllMain er stoppet).
- Støtte for versjon 4 av Dwarf-debuggingdataformatet, som nå brukes som standard ved bygging av Wine-biblioteker, er lagt til.
- Byggealternativet '--enable-build-id' er lagt til for å bevare unike bygg-ID-er i kjørbare filer.
- Støtte for bruk av Clang-kompilatoren i MSVC-kompatibilitetsmodus er lagt til.
- Diverse
- Navnet på standardkatalogene i brukergrensesnittet (Windows Shell) har blitt endret til mønsteret som brukes fra Windows Vista, dvs. i stedet for 'Mine Dokumenter' opprettes nå katalogen 'Dokumenter', og mesteparten av dataene lagres i katalogen 'AppData'.
- I laget for OpenCL-biblioteket er støtte for spesifikasjonen OpenCL 1.2 lagt til.
- I WinSpool-driveren er støtte for ulike papirstørrelser ved utskrift lagt til.
- Innledende støtte for MSDASQL, Microsoft OLE DB-leverandøren for ODBC-drivere, er lagt til.
- Wine Mono-motoren med implementeringen av .NET-plattformen er oppdatert til versjon 7.0.0.
- Unicode-dataene er oppdatert til spesifikasjonen Unicode 14.
- Bibliotekene Faudio, GSM, LCMS2, LibJPEG, LibJXR, LibMPG123, LibPng, LibTiff, LibXml2, LibXslt og Zlib er integrert i kildekoden, og disse samles i PE-format og krever ikke en Unix-formatversjon. I tillegg kan disse bibliotekene også importeres fra systemet for å bruke eksterne samlinger i stedet for de innebygde PE-versjonene.
Kilde: opennet.ru
