Na een jaar ontwikkeling en 26 experimentele versies is de stabiele release van de open implementatie van de Win32 API — Wine 9.0 gepresenteerd, die meer dan 7000 wijzigingen omvat. Een van de belangrijkste prestaties in de nieuwe versie is de implementatie van de WoW64-architectuur voor het uitvoeren van 32-bits programma's in een 64-bits omgeving, de integratie van een stuurprogramma ter ondersteuning van Wayland, de ondersteuning van de ARM64-architectuur, de implementatie van de DirectMusic API en ondersteuning voor smartcards.
In Wine is volledige werking bevestigd voor 5336 (een jaar geleden 5266, twee jaar geleden 5156, drie jaar geleden 5049) Windows-programma's, daarnaast werken nog eens 4397 (een jaar geleden 4370, twee jaar geleden 4312, drie jaar geleden 4227) programma's prima met extra instellingen en externe DLL's. Bij 3943 programma's (een jaar geleden 3888, twee jaar geleden 3813, drie jaar geleden 3703) zijn er kleine problemen, die de basisfunctionaliteit van de applicaties niet hinderen.
Belangrijkste vernieuwingen in Wine 9.0:
- Er is een stuurprogramma winewayland.drv toegevoegd, waardoor Wine kan worden gebruikt in omgevingen op basis van het Wayland-protocol zonder gebruik te maken van XWayland en X11-componenten. De ontwikkeling is gericht op het waarborgen van een zuivere Wayland-omgeving met ondersteuning voor het draaien van Windows-applicaties zonder dat pakketten gerelateerd aan X11 geïnstalleerd hoeven te worden, wat een hogere prestaties en responsiviteit van spellen mogelijk maakt door overbodige lagen te elimineren. Het gebruik van een pure Wayland-omgeving voor Wine helpt ook bij het vermijden van beveiligingsproblemen die samenhangen met X11 (bijvoorbeeld, onbetrouwbare spellen voor X11 kunnen andere applicaties bespioneren, omdat het X11-protocol toegang geeft tot alle invoerevenementen en frauduleuze toetsaanslagen kan invoegen).
Het stuurprogramma is gemarkeerd als experimenteel en in ontwikkeling, maar toch heeft het al ondersteuning voor veel functies, zoals vensterbeheer, het werken met meerdere monitoren, ondersteuning voor schaling op schermen met een hoge pixel-dichtheid (high-DPI), het gebruik van relatieve coördinaten bij het volgen van muisbewegingen en ondersteuning voor de grafische API Vulkan. Standaard is het stuurprogramma niet actief en om het in te schakelen moet 'wayland' aan de registerparameter 'HKCU\Software\Wine\Drivers' worden toegevoegd en moet ervoor gezorgd worden dat de omgevingsvariabele DISPLAY niet is ingesteld: wine reg.exe add HKCU\\Software\\Wine\\Drivers \/v Graphics \/d x11,wayland
- De vertaling van alle modules naar de interface van NT-systeemaanroepen is voltooid, in plaats van directe aanroepen tussen de PE- en Unix-niveaus, wat het einde markeert van jarenlange inspanningen om alle DLL-bibliotheken om te zetten naar het Portable Executable (PE) bestandsformaat.
- De ontwikkeling van de WoW64-laag (64-bit Windows-on-Windows) is voortgezet, waarmee 32-bit Windows-applicaties op 64-bit Unix-systemen kunnen worden uitgevoerd. In alle modules die toegang hebben tot Unix-bibliotheken zijn WoW64-systeemaanroepconverters (thunks) geïmplementeerd, waardoor 32-bit PE-modules toegang hebben tot 64-bit Unix-bibliotheken.
De nieuwe opstartmodus van WoW64 is verbeterd, waarin 32-bit code wordt uitgevoerd binnen een 64-bit proces (in de oude WoW64-modus werden 32-bit applicaties in 32-bit Unix-processen gestart). Ondersteuning voor het gebruik van de nieuwe WoW64-modus op het macOS-platform is toegevoegd. Aangezien in de nieuwe WoW64-modus enkele tekortkomingen worden opgemerkt, zoals het ontbreken van ondersteuning voor de 16-bit modus en een verminderde OpenGL-prestaties door het gebrek aan ondersteuning voor de ARB_buffer_storage-extensie, is het voorlopig niet standaard ingeschakeld en vereist het een build met de optie "--enable-archs=i386,x86_64" in het configure-script.
- De mogelijkheid om bestaande Windows-uitvoerbare bestanden uit te voeren op ARM64-architectuur systemen is toegevoegd. Er is een optie geïmplementeerd om Wine te bouwen voor ABI ARM64EC (ARM64 Emulation Compatible) en ondersteuning voor het laden van ARM64EC-modules, die zijn ontworpen om het porteren van x86_64-applicaties naar ARM64-systemen te vergemakkelijken, door de mogelijkheid te bieden om individuele modules met x86_64-code uit te voeren in een omgeving van ARM64 met behulp van een emulator. Ondersteuning voor het ARM64X PE-bestandsformaat is toegevoegd, waarmee één uitvoerbaar bestand kan worden geladen in x64/Arm64EC en ARM64-processen. Een interface voor de emulatie van 32-bit x86-systemen is geïmplementeerd, maar de emulatorbibliotheek is voorlopig nog niet opgenomen in de hoofdsamenstelling van Wine (voor het uitvoeren van x86-code in een ARM64-omgeving kan een externe emulator zoals FEX worden gebruikt).
- Grafisch subsysteem
- De PostScript-driver is herontworpen om ondersteuning te bieden voor spool-bestanden in Windows-formaat, waarin gegevens over afdrukopdrachten worden opgeslagen. Directe aanroepen naar de driver vanuit het Unix-omgeving zijn uitgesloten.
- Aan de WinRT-thema's is ondersteuning voor een donkere modus toegevoegd. In WineCfg is een instelling toegevoegd om de donkere interface-instelling in te schakelen.
- De driver voor de Vulkan grafische API heeft ondersteuning gekregen voor specificatie Vulkan 1.3.272 (in Wine 8.0 werd 1.3.237 ondersteund).
- De functies van de GdiPlus-bibliotheek zijn geoptimaliseerd, wat de prestaties bij grafische taken heeft verbeterd.
- Direct3D
- De parsing van de multithreaded commandostroom wordt gepauzeerd wanneer er geen verwerkingsopdrachten voor de weergave zijn, wat het energieverbruik verlaagt tot het niveau van single-threaded verwerking bij het uitvoeren van programma's die niet de volledige bandbreedte van de commandostroom gebruiken.
- Direct3D 10 heeft ondersteuning voor extra effecten geïmplementeerd.
- Er zijn prestatie-optimalisaties doorgevoerd in de WineD3D-code en de backend die de Vulkan grafische API gebruikt.
- In de rendering code op basis van de Vulkan API is er een controle toegevoegd voor mogelijkheden die door het apparaat worden ondersteund, en de toepassing wordt voorzien van informatie over het beschikbare niveau van Direct3D-functionaliteit.
- De functies D3DXFillTextureTX en D3DXFillCubeTextureTX zijn geïmplementeerd.
- De klassieke OpenGL ARB shader backend ondersteunt nu schaduwdefinitie via de ARB_fragment_program_shadow extensie.
- In D3DXLoadMeshHierarchyFromX en soortgelijke functies is ondersteuning toegevoegd voor het laden van gebruikersgegevens via de ID3DXLoadUserData-interface.
- Geluid en video
- Een initiële implementatie van de DirectMusic API is voorgesteld. Ondersteuning voor collecties, instrumenten en geluidsmonsters in SoundFont-formaat is toegevoegd. Ondersteuning voor het Doppler-effect is toegevoegd. Tests zijn geïmplementeerd om de juiste werking van de dmime sequencer en de dmsynth MIDI-synthesizer te controleren.
- Voor gebruik in de DirectMusic API is de FluidSynth-bibliotheek ingebouwd.
- Ondersteuning voor het laden van geluidsfonts (SoundFont — formaten voor sample-gebaseerde synthese gebruikt voor het afspelen van MIDI-bestanden) in DLS1 en DLS2-formaten, evenals in SF2-formaten, die in Linux worden gebruikt, is geïmplementeerd.
- De mogelijkheid om MIDI-inhoud af te spelen met behulp van de dmsynth-bibliotheek is toegevoegd, waarbij gebruik wordt gemaakt van de FluidSynth-software synthesizer en de DirectSound API voor geluidsuitvoer.
- Een decoder voor video in het Indeo IV50 videocodec-formaat is toegevoegd.
- DirectShow
- Er is een DMO (DirectX Media Object) component geïmplementeerd met een decoder voor het WMV (Windows Media Video) formaat.
- Een geluidcapturefilter (DirectShow Audio Capture Filter) is toegevoegd.
- In de MPEG‑1 stream splitter filter (DirectShow MPEG‑1 Stream Splitter) is naast de geluidsstromen ook ondersteuning toegevoegd voor videostromen en service streams.
- Er is een filter voor het decoderen van video in het MPEG‑1 formaat (DirectShow MPEG‑1 Video Decoder) geïmplementeerd.
- Invoerapparaten
- In DirectInput is de ondersteuning voor action maps geïmplementeerd, waarmee knoppen op de gamecontroller aan bepaalde acties in games kunnen worden gekoppeld.
- Integratie met desktop
- Het exporteren naar de hoofdgebruikersomgeving van bindings is mogelijk gemaakt, zodat applicaties die onder Wine draaien als protocolhandlers kunnen worden opgeroepen bij het openen van URL's (bijvoorbeeld het starten van spotify.exe bij het openen van links zoals 'spotify:user:spotify:playlist:848218482355482821').
- Er is een functie geïmplementeerd voor het extraheren van EDID (Extended Display Identification Data) met informatie over de parameters van de aangesloten monitor, zoals de naam en het model van het apparaat.
- Er is een mogelijkheid toegevoegd om het bureaubladvenster dat in de volledig schermmodus is geopend te sluiten met de knop 'Exit desktop' in het menu 'Start'.
- Internationalisatie
- De ondersteuning voor IME (Input Method Editors) is uitgebreid. Er is gewerkt aan compatibiliteit met de native Windows-implementaties van IME en de integratie met Linux IME is verbeterd.
- De generatie van de locale-database in het formaat locale.nls vanuit de Unicode CLDR (Unicode Common Locale Data Repository) versie 44 is mogelijk gemaakt. Ondersteuning is toegevoegd voor extra locales bew-ID, blo-BJ, csw-CA, ie-EE, mic-CA, prg-PL, skr-PK, tyv-RU, vmw-MZ, xnr-IN en za-CN.
- De interface is naar het Georgisch vertaald. Volledige vertalingen zijn beschikbaar voor 16 talen, en gedeeltelijke vertalingen voor 31 talen.
- Unicode-teken tabellen zijn bijgewerkt naar versie 15.1.0 van de standaard. De database van tijdzones is bijgewerkt.
- Kern (Windows kerninterfaces)
- Als standaard uitgevende versie van Windows is Windows 10 vastgesteld.
- Voor uitvoerbare bestanden in PE-formaat is er ondersteuning voor address space randomization (ASLR) geïmplementeerd, maar de laadadressen van de code in het geheugen zijn nog niet volledig gerandomiseerd.
- De ondersteuning voor een low fragmentatie heap (LFH) is geïmplementeerd, wat de prestaties van geheugentoewijzingsoperaties heeft verbeterd.
- In het mechanisme voor virtuele geheugenallocatie is ondersteuning voor geheugenreservering (placeholder) toegevoegd, waarmee een applicatie een bepaald gebied van virtueel geheugen voor toekomstig gebruik kan reserveren.
- 64-bits loaders (loader en preloader) van uitvoerbare bestanden en bibliotheken zijn in het PIE (Position-Independent Executables) formaat gecompileerd om een deel van de 32-bits adresruimte vrij te geven.
- Een correcte stack-unwinding is gegarandeerd voor NT-systeemoproepen en gebruikerscallbackoproepen.
- Netwerkfunctionaliteiten
- In de MSHTML-engine is ondersteuning voor het ‘Cycle Collection’ garbage collection-mechanisme gerealiseerd.
- In MSHTML is ondersteuning voor de synchronisatie modus van XMLHttpRequest-verzoeken toegevoegd.
- In jscript.dll is ondersteuning voor het WeakMap-object toegevoegd, waarmee een collectie sleutel/waarde-paren kan worden beheerd, waarbij de sleutel een object is dat willekeurige waarden kan bevatten. De methoden WeakMap.get(), WeakMap.delete(), WeakMap.clear() en WeakMap.has() zijn geïmplementeerd.
- De browser engine Gecko is bijgewerkt naar versie 2.47.4.
- Ondersteuning voor meldingen over de statuswijziging van het netwerkinterface is geïmplementeerd.
- Cryptografie en beveiliging
- In de Winscard.dll bibliotheek is ondersteuning voor smartcards toegevoegd, geïmplementeerd via de systeembibliotheek PCSClite.
- In BCrypt is ondersteuning voor het Diffie-Hellman-sleuteluitwisselingsprotocol toegevoegd.
- Het Negotiate-pakket is geïmplementeerd, dat een laag biedt voor het gebruik van de SSPI (Security Support Provider Interface) om toegang te krijgen tot SSP (Security Support Provider).
- Ingebouwde toepassingen
- In de Wine Debugger (winedbg) is de Zydis bibliotheek gebruikt voor het disassembleren van x86 machine-instructies.
- In de WineCfg interface is de mogelijkheid toegevoegd om oude versies van Windows (tot XP) in te stellen op 64-bit platforms, wat het mogelijk maakt om verouderde toepassingen uit te voeren met behulp van de WoW64 modus.
- In alle ingebouwde grafische toepassingen wordt foutinformatie weergegeven in een afzonderlijk dialoogvenster, in plaats van in de console.
- In het programma systeminfo wordt informatie uit de WMI (Windows Management Instrumentation) database getoond.
- De klist toepassing is toegevoegd voor het weergeven van Kerberos-tickets.
- In de taskkill toepassing is de mogelijkheid om kindprocessen geforceerd te beëindigen geïmplementeerd.
- De start utility is uitgebreid met de parameter ‘/machine’ voor het selecteren van de architectuur die wordt gebruikt bij het starten van hybride uitvoerbare bestanden die zowel x86 als ARM ondersteunen.
- Een groot deel van de functionaliteit van het programma tasklist is geïmplementeerd.
- Een basisimplementatie van de findstr toepassing is toegevoegd.
- Ontwikkelingstools
- In de WineDump utility is de mogelijkheid om de inhoud van Windows-registerbestanden (REGF-formaat) weer te geven, evenals het tonen van gegevens voor alle architecturen (x86/ARM64) die worden ondersteund in hybride PE-bestanden, geïmplementeerd.
- In de IDL-compiler is ondersteuning voor de attributen ‘composable’, ‘default_overload’, ‘deprecated’ en ‘protected’ toegevoegd.
- De libwine.so bibliotheek is verwijderd, die als verouderd werd verklaard in de release van Wine 6.0 en al geruime tijd niet in Wine wordt gebruikt. Programma's in ELF-formaat die zijn samengesteld met oudere versies van Wine (5.0 en eerder) met libwine.so, vereisen een hercompilatie om uit te voeren in Wine 9.0.
- Ingebouwde bibliotheken en externe afhankelijkheden
- De integratie bevat de bibliotheken FluidSynth 2.3.3, Musl 1.2.3 (alleen wiskundige functies) en Zydis 4.0.0.
- Componenten 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 en Zlib 1.3 zijn bijgewerkt naar nieuwe versies. De Wine Mono-engine met implementatie van het .NET-platform is bijgewerkt naar release 8.1.0.
- In de driver winewayland.drv zijn als externe afhankelijkheden de clientbibliotheek Wayland, evenals de bibliotheken xkbcommon en xkbregistry gebruikt.
- Voor de ondersteuning van smartcards is de externe bibliotheek PCSClite (op macOS — PCSC) gebruikt.
- Voor het bouwen van PE-bestanden op platforms anders dan i386 is nu de aanwezigheid van een cross-compiler met ondersteuning voor de directieven ‘.seh’ voor de verwerking van uitzonderingen vereist.
Bron: opennet.ru
