Etter ett års utvikling og 26 eksperimentelle versjoner har den stabile utgivelsen av den åpne implementeringen av Win32 API — Wine 9.0, blitt presentert, som inkluderer mer enn 7000 endringer. Blant de viktigste prestasjonene i den nye versjonen er implementeringen av WoW64-arkitekturen for å kjøre 32-bits programmer i et 64-bits miljø, integrasjonen av en driver for å støtte Wayland, støtte for ARM64-arkitektur, implementeringen av DirectMusic API og støtte for smarte kort.
I Wine er det bekreftet at 5336 (i fjor 5266, to år siden 5156, tre år siden 5049) Windows-programmer fungerer fullt ut, ytterligere 4397 (i fjor 4370, to år siden 4312, tre år siden 4227) programmer fungerer utmerket med ekstra innstillinger og eksterne DLL-er. For 3943 programmer (i fjor 3888, to år siden 3813, tre år siden 3703) oppdages det små problemer med ytelsen, som ikke hindrer bruken av hovedfunksjonene i applikasjonene.
Nøkkelnyhetene i Wine 9.0:
- Det er lagt til en driver winewayland.drv, som muliggjør bruk av Wine i miljøer basert på Wayland-protokollen uten å bruke XWayland og X11-komponenter. Utviklingen er rettet mot å sikre drift av et rent Wayland-miljø med støtte for kjøring av Windows-applikasjoner uten behov for å installere X11-relaterte pakker, noe som gir høyere ytelse og responsivitet i spill ved å eliminere unødvendige lag. Bruken av et rent Wayland-miljø for Wine gjør det også mulig å unngå sikkerhetsproblemer knyttet til X11 (for eksempel kan ikke-pålitelige spill for X11 spionere på andre applikasjoner, ettersom X11-protokollen har tilgang til alle inndatahendelser og kan erstatte falske tastetrykk).
Driveren er merket som eksperimentell og under utvikling, men den har allerede støtte for mange funksjoner, som vindushåndtering, støtte for flere skjermer, støtte for skalering på skjermer med høy pixel tetthet (high-DPI), bruk av relative koordinater ved sporing av musebevegelser og støtte for Vulkan grafikk-API. Som standard er driveren inaktiv, og for å aktivere den må du legge til «wayland» i registerparametere «HKCU\Software\Wine\Drivers» og sørge for at miljøvariabelen DISPLAY ikke er satt: wine reg.exe add HKCU\\Software\\Wine\\Drivers /v Graphics /d x11,wayland
- Oversettelsen av alle moduler til grensesnittet for systemanrop i NT er fullført, i stedet for å gjøre direkte anrop mellom PE- og Unix-nivåene. Dette markerer slutten på flere års arbeid med å oversette alle DLL-biblioteker til bruk av formatet for kjørbare filer PE (Portable Executable).
- Utviklingen av WoW64-laget (64-bit Windows-on-Windows) har fortsatt, noe som gjør det mulig å kjøre 32-biters Windows-applikasjoner på 64-biters Unix-systemer. I alle moduler som kommuniserer med Unix-biblioteker har systemanrop WoW64-konverterere (thunks) blitt involvert, som gjør det mulig for 32-biters moduler i PE-format å få tilgang til 64-biters Unix-biblioteker.
Den nye kjøremodus for WoW64 har blitt forbedret, der 32-biters kode kjøres innenfor en 64-biters prosess (i den gamle WoW64-modusen ble 32-biters applikasjoner kjørt i 32-biters Unix-prosesser). Støtte for den nye WoW64-modusen på macOS-plattformen har blitt lagt til. Siden den nye WoW64-modusen har separate mangler, som mangel på støtte for 16-biters modus og redusert OpenGL-ytelse på grunn av mangel på støtte for ARB_buffer_storage-utvidelsen, er den foreløpig ikke aktivert som standard og krever bygging med alternativet “—enable-archs=i386,x86_64” i konfigurasjonsskriptet.
- Muligheten til å kjøre eksisterende Windows-kjørbare filer på ARM64-arkitekturer er blitt lagt til. Det er implementert muligheter for å bygge Wine for ABI ARM64EC (ARM64 Emulation Compatible) og støtte for lasting av ARM64EC-moduler, som forenkler portering av applikasjoner opprinnelig skrevet for x86_64-arkitekturen til ARM64-systemer, ved å gi muligheten til å kjøre separate moduler med x86_64-kode i ARM64-miljøet ved hjelp av en emulator. Støtte for ARM64X-formatet for PE-filer, som lar laste én kjørbar fil i x64/Arm64EC- og ARM64-prosesser, har blitt implementert. Et grensesnitt for emulering av 32-biters x86-systemer har blitt utviklet, men biblioteket med emulatoren er ennå ikke inkludert i hovedgruppen av Wine (for å kjøre x86-kode i ARM64-miljøet, kan en ekstern emulator FEX brukes).
- Grafikkundersystem
- PostScript-driveren er redesignet for å støtte spool-filer i Windows-format, hvor data om utskriftsjobber lagres. Direkte anrop til driveren fra Unix-miljøet er utelukket.
- Temaene for WinRT har fått støtte for mørk modus. I WineCfg er det lagt til en innstilling for å aktivere mørkt grensesnittdesign.
- Grafikk API Vulkan-driveren har fått støtte for spesifikasjonen Vulkan 1.3.272 (i Wine 8.0 var støtten for 1.3.237).
- Funksjonene i GdiPlus-biblioteket er optimalisert for å forbedre ytelsen ved grafikkbehandling.
- Direct3D
- Parsing av flere tråder av kommandoer er blitt suspendert når det ikke er noen behandling av tegnekommandoer, noe som reduserer energiforbruket til nivået av en enkelttråds behandling ved kjøring av programmer som ikke benytter hele båndbredden av kommandostrømmen.
- I Direct3D 10 er støtten for ekstra effekter implementert.
- Ytelsesoptimaliseringer er implementert i WineD3D-koden og backend som bruker grafikk API Vulkan.
- I Vulkan-baserte tegnekode er det lagt til en sjekk for egenskapene som støttes av enheten, samt informasjon om tilgjengelig funksjonalitetsnivå i Direct3D til applikasjonen.
- Funksjonene D3DXFillTextureTX og D3DXFillCubeTextureTX er implementert.
- Den klassiske backend for OpenGL ARB-shadere har fått støtte for skyggebestemmelse ved hjelp av ARB_fragment_program_shadow-utvidelsen.
- I D3DXLoadMeshHierarchyFromX og lignende funksjoner er det lagt til støtte for innlasting av brukerdata ved hjelp av ID3DXLoadUserData-grensesnittet.
- Sound and Video
- En første implementering av DirectMusic API er foreslått. Støtte for samlinger, instrumenter og lydbiter i SoundFont-format er lagt til. Doppler-effekt er også støttet. Tester er implementert for å verifisere korrektheten av implementeringen ved bruk av dmime-sekvenser og MIDI-synthesizer dmsynth.
- For bruk i API-en DirectMusic er FluidSynth-biblioteket innebygd.
- Laste støtten for lydboker (SoundFont – prøvedrevne formater brukt for MIDI-avspilling) er implementert i DLS1, DLS2 samt SF2-formatet som brukes i Linux.
- Støtte for avspilling av MIDI-innhold ved hjelp av dmsynth-biblioteket er lagt til, ved bruk av programvare-synthesizeren FluidSynth og DirectSound API for lydutgang.
- En dekoder for video i Indeo IV50 videokodekformatet er lagt til.
- DirectShow
- Komponenten DMO (DirectX Media Object) med dekoder for WMV (Windows Media Video) formatet er implementert.
- En lydopplevelsesfilter (DirectShow Audio Capture Filter) er lagt til.
- I MPEG-1-strømdelingfilteret (DirectShow MPEG-1 Stream Splitter) er det lagt til støtte for video- og kontrollstrømmer i tillegg til lydstrømmer.
- En filter for dekoding av video i MPEG-1 formatet (DirectShow MPEG-1 Video Decoder) er implementert.
- Inndataenheter
- DirectInput har støtte for handlingmapping (action maps) som lar deg binde knapper på spillkontrolleren til bestemte handlinger i spill.
- Integrasjon med skrivebordet
- Det er mulig å eksportere til det primære brukergrensesnittet bindinger, som lar kjørbare applikasjoner styrt av Wine fungere som protokollbehandlere når URL-er åpnes (for eksempel, starte spotify.exe når du åpner lenker som «spotify:user:spotify:playlist:848218482355482821».
- Dataene fra EDID (Extended Display Identification Data) kan hentes ut, som inneholder informasjon om innstillingene for den tilkoblede skjermen, slik som enhetens navn og modell.
- Det er nå mulig å lukke skrivebordsvinduet som vises i fullskjermmodus ved å bruke knappen «Exit desktop» fra «Start»-menyen.
- Internasjonalisering
- Støtten for IME (Input Method Editors) er utvidet. Arbeidet med å sikre kompatibilitet med Windows-native IME-implementeringer er fullført, og integrasjonen med Linux IME er forbedret.
- Generering av lokaliseringsdatabaser i locale.nls-format fra Unicode CLDR (Unicode Common Locale Data Repository) versjon 44 er gjennomført. Støtte for ekstra lokaliteter er lagt til: bew-ID, blo-BJ, csw-CA, ie-EE, mic-CA, prg-PL, skr-PK, tyv-RU, vmw-MZ, xnr-IN og za-CN.
- Grensesnittet er oversatt til georgisk. Fullstendige oversettelser for 16 språk er tilgjengelige, mens delvise oversettelser er gjort for 31 språk.
- Unicode-tegnsettene er oppdatert til standardversjon 15.1.0. Tidssone-databasen er oppdatert.
- Kjerne (Windows-kjernegrensesnitt)
- Standard Windows-versjon som utstedes er definert som Windows 10.
- Støtte for randomisering av adresseplassen (ASLR) for kjørbare filer i PE-format er implementert, men minneadressene for kodeinnlastning er fortsatt ikke fullt randomisert.
- Støtte for lavfragmentert haug (LFH, Low Fragmentation Heap) er implementert, noe som har økt ytelsen til minnetildelingsoperasjoner.
- Støtten for reservering av minne (placeholder) har blitt lagt til i mekanismen for virtuell minnetildeling, som lar applikasjonen reservere et bestemt område av virtuell hukommelse for fremtidig bruk.
- 64-bits lastere (loader og preloader) for kjørbare filer og biblioteker er samlet i PIE-format (Position-Independent Executables) for å frigjøre en del av det 32-bits adresserommet.
- Riktig stakkopprulling (stack unwinding) for NT-systemanrop og bruker-callback-anrop er sikret.
- Nettverksmuligheter
- I MSHTML-motoren er mekanismen for søppelrydding «Cycle Collection» implementert.
- MSHTML har fått støtte for synkrone forespørselshåndtering med XMLHttpRequest.
- Jscript.dll har fått støtte for objektet WeakMap for å jobbe med samlinger av nøkkel/verdi-par, der nøkkelen er et objekt som kan festes et vilkårlig verdig til. Metodene WeakMap.get(), WeakMap.delete(), WeakMap.clear() og WeakMap.has() er implementert.
- Nettlesermotoren Gecko er oppdatert til versjon 2.47.4.
- Støtte for varsler om endringer i nettverksgrensesnittets tilstand er implementert.
- Kryptering og sikkerhet
- I biblioteket Winscard.dll er støtte for smartkort implementert gjennom det systembiblioteket PCSClite.
- BCrypt har fått støtte for Diffie-Hellman nøkkelutvekslingsprotokollen.
- Det er implementert et Negotiate-pakke som gir et lag for å bruke SSPI (Security Support Provider Interface) for å få tilgang til SSP (Security Support Provider) leverandører.
- Innebygde applikasjoner
- I Wine Debugger (winedbg) er Zydis-biblioteket brukt for å disassemblerer X86 maskinkoder.
- I WineCfg-grensesnittet er det lagt til mulighet for å angi eldre versjoner av Windows (før XP) på 64-biters plattformer, noe som gjør det mulig å kjøre foreldede applikasjoner ved å bruke WoW64-modus.
- I alle innebygde grafiske applikasjoner er det implementert visning av feilmeldinger i en separat dialog i stedet for å vise dem i konsollen.
- I programmet systeminfo er det sikret at informasjon fra WMI (Windows Management Instrumentation) databasen vises.
- Et program kalt klist er lagt til for å vise Kerberos-billetter.
- I programmet taskkill er det lagt til mulighet for å tvinge avslutning av barneprosesser.
- I verktøyet start er parameteren «/machine» lagt til for å velge arkitektur som brukes ved kjøring av hybride kjørbare filer som støtter x86 og ARM.
- Størsteparten av funksjonaliteten til programmet tasklist er implementert.
- En grunnleggende implementasjon av programmet findstr er lagt til.
- Utviklingsverktøy
- I verktøyet WineDump er det lagt til mulighet for å vise innholdet i Windows registerfiler (REGF-format), samt å vise data for alle arkitekturer (x86/ARM64) som støttes i hybride PE-filer.
- Komponenten IDL har fått støtte for attributtene «composable», «default_overload», «deprecated» og «protected».
- Biblioteket libwine.so, som ble erklært foreldet i Wine 6.0-utgivelsen og lenge har vært ikke i bruk, er fjernet. Programmer i ELF-format bygget med gamle versjoner av Wine (5.0 og tidligere) med libwine.so må ombygges for å kjøre i Wine 9.0.
- Innebygde biblioteker og eksterne avhengigheter
- Integrert i produksjonen er bibliotekene FluidSynth 2.3.3, Musl 1.2.3 (kun matematiske funksjoner) og Zydis 4.0.0.
- Komponentene Vkd3d 1.10, Faudio 23.12, OpenLDAP 2.5.16, LCMS2 2.15, LibMPG123 1.32.2, LibPng 1.6.40, LibTiff 4.6.0, LibXml2 2.11.5, LibXslt 1.1.38 og Zlib 1.3 er oppdatert til nye versjoner. Wine Mono-motoren med .NET-plattformimplementeringen er oppdatert til utgave 8.1.0.
- I driveren winewayland.drv er Wayland-klientbiblioteket brukt som ekstern avhengighet, sammen med bibliotekene xkbcommon og xkbregistry.
- For støtte av smarte kort brukes den eksterne biblioteket PCSClite (i macOS - PCSC).
- For bygging av PE-filer på plattformer som ikke er i386, kreves det nå en krysskompilator med støtte for direktiver «.seh» for behandling av unntak.
Kilde: opennet.ru
