Nach einem Jahr Entwicklung und 26 experimentellen Versionen wurde die stabile Veröffentlichung der Open-Source-Implementierung der Win32 API — Wine 9.0 — vorgestellt, die über 7000 Änderungen umfasst. Zu den wichtigsten Neuerungen in der neuen Version gehört die Implementierung der WoW64-Architektur zur Ausführung von 32-Bit-Programmen in einer 64-Bit-Umgebung, die Integration eines Treibers zur Unterstützung von Wayland, die Unterstützung der ARM64-Architektur, die Implementierung der DirectMusic-API und die Unterstützung von Smartcards.
In Wine wurde die vollständige Funktionalität von 5336 Windows-Anwendungen (vor einem Jahr 5266, vor zwei Jahren 5156, vor drei Jahren 5049) bestätigt, während weitere 4397 (vor einem Jahr 4370, vor zwei Jahren 4312, vor drei Jahren 4227) Programme mit zusätzlichen Anpassungen und externen DLLs einwandfrei funktionieren. Bei 3943 Programmen (vor einem Jahr 3888, vor zwei Jahren 3813, vor drei Jahren 3703) treten leichte Probleme auf, die die Nutzung der Hauptfunktionen der Anwendungen jedoch nicht beeinträchtigen.
Wesentliche Neuerungen von Wine 9.0:
- Es wurde ein Treiber winewayland.drv hinzugefügt, der es ermöglicht, Wine in Umgebungen zu verwenden, die auf dem Wayland-Protokoll basieren, ohne XWayland und Komponenten von X11 einzusetzen. Die Entwicklung zielt darauf ab, den Betrieb einer reinen Wayland-Umgebung mit Unterstützung für die Ausführung von Windows-Anwendungen zu gewährleisten, ohne dass Pakete installiert werden müssen, die mit X11 verbunden sind, was eine höhere Leistung und Reaktionsfähigkeit von Spielen durch den Ausschluss überflüssiger Schichten ermöglicht. Die Verwendung einer reinen Wayland-Umgebung für Wine reduziert zudem Sicherheitsprobleme, die mit X11 verbunden sind (zum Beispiel können nicht vertrauenswürdige Spiele unter X11 andere Anwendungen ausspionieren, da das X11-Protokoll den Zugriff auf alle Eingabeveranstaltungen ermöglicht und das Einfügen von gefälschten Tastatureingaben erlaubt).
Der Treiber wird als experimentell und noch in der Entwicklung eingestuft, bietet jedoch bereits Unterstützung für viele Funktionen, darunter Fensterverwaltung, Unterstützung für mehrere Monitore, Unterstützung der Skalierung auf Bildschirmen mit hoher Pixeldichte (high-DPI), Verarbeitung relativer Koordinaten bei der Verfolgung von Mauskbewegungen und Unterstützung der grafischen API Vulkan. Der Treiber ist standardmäßig nicht aktiv und um ihn zu aktivieren, muss "wayland" in den Registrierungseintrag "HKCU\Software\Wine\Drivers" hinzugefügt werden, und es muss sichergestellt werden, dass die Umgebungsvariable DISPLAY nicht gesetzt ist: wine reg.exe add HKCU\\Software\\Wine\\Drivers /v Graphics /d x11,wayland
- Die Übersetzung aller Module auf die Schnittstelle der NT-Systemaufrufe wurde abgeschlossen, anstelle direkter Aufrufe zwischen den PE- und Unix-Ebenen, was das Ende jahrelanger Arbeiten an der Übersetzung aller DLL-Bibliotheken auf die Nutzung des Formats der ausführbaren Dateien PE (Portable Executable) markiert.
- Die Entwicklung der WoW64-Schicht (64-Bit Windows-on-Windows) wurde fortgesetzt, die es ermöglicht, 32-Bit Windows-Anwendungen in 64-Bit Unix-Systemen auszuführen. In allen Modulen, die auf Unix-Bibliotheken zugreifen, werden WoW64-Systemaufrufkonverter (Thunk) eingesetzt, die es 32-Bit-Modulen im PE-Format ermöglichen, auf 64-Bit Unix-Bibliotheken zuzugreifen.
Ein neuer WoW64-Ausführungsmodus wurde verbessert, in dem 32-Bit-Code innerhalb eines 64-Bit-Prozesses ausgeführt wird (im alten WoW64-Modus wurden 32-Bit-Anwendungen in 32-Bit Unix-Prozessen ausgeführt). Die Unterstützung des neuen WoW64-Modus auf der macOS-Plattform wurde hinzugefügt. Da im neuen WoW64-Modus bestimmte Einschränkungen wie die fehlende Unterstützung des 16-Bit-Modus und die geringere Leistung von OpenGL aufgrund fehlender Unterstützung der Erweiterung ARB_buffer_storage vermerkt sind, ist er derzeit nicht standardmäßig aktiviert und erfordert den Build mit der Option „—enable-archs=i386,x86_64“ im Konfigurationsskript.
- Die Möglichkeit, bestehende Windows-executables auf ARM64-Architekturen auszuführen, wurde hinzugefügt. Die Möglichkeit, Wine für ABI ARM64EC (ARM64 Emulation Compatible) zu erstellen, und die Unterstützung für das Laden von ARM64EC-Modulen wurde umgesetzt, die dazu dienen, die Portierung von Anwendungen, die ursprünglich für die x86_64-Architektur geschrieben wurden, auf ARM64-Systeme zu vereinfachen, indem die Ausführung einzelner Module mit x86_64-Code in einer ARM64-Umgebung mittels Emulator ermöglicht wird. Unterstützung für das PE-Dateiformat ARM64X wurde hinzugefügt, das es ermöglicht, eine ausführbare Datei in x64/Arm64EC- und ARM64-Prozessen zu laden. Eine Schnittstelle zur Emulation von 32-Bit-x86-Systemen wurde implementiert, aber die Emulator-Bibliothek ist derzeit nicht in das Hauptprogramm von Wine aufgenommen (zur Ausführung von x86-Code in einer ARM64-Umgebung kann ein externer Emulator FEX verwendet werden).
- Grafik-Subsystem
- Der PostScript-Treiber wurde überarbeitet, um Spool-Dateien im Windows-Format zu unterstützen, in denen Daten über Druckaufträge gespeichert werden. Direkte Aufrufe an den Treiber aus der Unix-Umgebung wurden ausgeschlossen.
- Das WinRT-Design unterstützt jetzt den Dunkelmodus. In WineCfg wurde eine Einstellung zum Aktivieren des dunklen Designs der Benutzeroberfläche hinzugefügt.
- Der Treiber für die grafische API Vulkan hat die Unterstützung für die Spezifikation Vulkan 1.3.272 hinzugefügt (in Wine 8.0 wurde 1.3.237 unterstützt).
- Die Funktionen der GdiPlus-Bibliothek wurden optimiert, was die Grafikleistung erhöht hat.
- Direct3D
- Die Analyse des mehrthreadigen Befehlsstroms wurde pausiert, wenn keine zu verarbeitenden Renderbefehle vorhanden sind, wodurch der Energieverbrauch auf das Niveau einer einthreadigen Bearbeitung gesenkt werden kann, wenn Programme ausgeführt werden, die nicht die gesamte Bandbreite des Befehlsstroms beanspruchen.
- In Direct3D 10 wurde die Unterstützung zusätzlicher Effekte implementiert.
- Leistungsoptimierungen wurden im Code von WineD3D und dem Backend, das die grafische API Vulkan nutzt, implementiert.
- Im Vulkan-basierten Rendering-Code wurde eine Überprüfung der vom Gerät unterstützten Funktionen hinzugefügt, die der Anwendung Informationen über das verfügbare Direct3D-Funktionsniveau bereitstellt.
- Die Funktionen D3DXFillTextureTX und D3DXFillCubeTextureTX wurden implementiert.
- Im klassischen OpenGL ARB Shader-Backend wurde die Unterstützung für die Schattendefinition mithilfe der Erweiterung ARB_fragment_program_shadow hinzugefügt.
- In D3DXLoadMeshHierarchyFromX und ähnlichen Funktionen wurde die Unterstützung für das Laden von Benutzerdaten über die ID3DXLoadUserData-Schnittstelle hinzugefügt.
- Ton und Video
- Eine erste Implementierung der DirectMusic API wurde vorgeschlagen. Unterstützung für Sammlungen, Instrumente und Soundbeispiele im SoundFont-Format wurde hinzugefügt. Unterstützung für den Doppler-Effekt wurde implementiert. Es wurden Tests zur Überprüfung der korrekten Implementierung mit dem Sequencer dmime und dem MIDI-Synthesizer dmsynth durchgeführt.
- Für die Verwendung in der DirectMusic-API wurde die FluidSynth-Bibliothek integriert.
- Die Unterstützung zum Laden von Soundfonts (SoundFont — Formate für die auf Samples basierende Synthese zur Wiedergabe von MIDI-Dateien) in den Formaten DLS1 und DLS2 sowie im SF2-Format, das in Linux verwendet wird, wurde implementiert.
- Die Möglichkeit zur Wiedergabe von MIDI-Inhalten mit der dmsynth-Bibliothek wurde hinzugefügt, wobei der Software-Synthesizer FluidSynth und die DirectSound API zur Audioausgabe verwendet werden.
- Ein Decoder für Videos im Format des Videocodecs Indeo IV50 wurde hinzugefügt.
- DirectShow
- Eine DMO (DirectX Media Object)-Komponente mit Decoder für das WMV-Format (Windows Media Video) wurde implementiert.
- Ein Audioaufnahmefilter (DirectShow Audio Capture Filter) wurde hinzugefügt.
- Im MPEG‑1 Stream Splitter (DirectShow MPEG‑1 Stream Splitter) wurde neben Audiostreams auch die Unterstützung für Video-Stream und Steuerstreams hinzugefügt.
- Ein Filter zum Decodieren von Video im MPEG‑1-Format (DirectShow MPEG‑1 Video Decoder) wurde implementiert.
- Eingabegeräte
- Im DirectInput wurde die Unterstützung für Aktionszuordnungen (Action Maps) implementiert, die es ermöglichen, Tasten auf dem Gamecontroller bestimmten Aktionen in Spielen zuzuordnen.
- Integration mit dem Desktop
- Es wurde sichergestellt, dass Bindungen in die wichtigste Benutzerschnittstelle exportiert werden, sodass Anwendungen, die unter Wine ausgeführt werden, als Protokollhandler beim Öffnen von URLs aufgerufen werden können (zum Beispiel das Starten von spotify.exe beim Öffnen von Links wie „spotify:user:spotify:playlist:848218482355482821“).
- Es wurde die Extraktion von EDID-Daten (Extended Display Identification Data) mit Informationen über die Parameter des angeschlossenen Monitors, wie z. B. den Namen und das Modell des Geräts, implementiert.
- Es wurde die Möglichkeit bereitgestellt, das Desktopfenster, das im Vollbildmodus ausgeführt wird, mit der Schaltfläche „Desktop beenden“ im Menü „Start“ zu schließen.
- Internationalisierung
- Die Unterstützung für IME (Input Method Editors) wurde erweitert. Es wurden Maßnahmen zur Gewährleistung der Kompatibilität mit nativen Windows-Implementierungen von IME ergriffen und die Integration mit Linux-IME verbessert.
- Die Generierung einer Datenbank von Locale im Format locale.nls aus der Unicode CLDR-Datenbank (Unicode Common Locale Data Repository) Version 44 wurde sichergestellt. Unterstützung für zusätzliche Locales wurde hinzugefügt: bew-ID, blo-BJ, csw-CA, ie-EE, mic-CA, prg-PL, skr-PK, tyv-RU, vmw-MZ, xnr-IN und za-CN.
- Die Benutzeroberfläche wurde ins Georgische übersetzt. Vollständige Übersetzungen für 16 Sprachen sowie teilweise Übersetzungen für 31 Sprachen wurden bereitgestellt.
- Die Unicode-Zeichentabellen wurden auf die Version des Standards 15.1.0 aktualisiert. Die Datenbank der Zeitzonen wurde aktualisiert.
- Kern (Windows Kernel-Schnittstellen)
- Die standardmäßig ausgegebene Version von Windows wurde auf Windows 10 festgelegt.
- Für ausführbare Dateien im PE-Format wurde die Unterstützung für die Adressraumrandomisierung (ASLR) implementiert, jedoch sind die Ladeadressen des Codes im Speicher noch nicht vollständig randomisiert.
- Die Unterstützung für schwach fragmentierten Heap (LFH, Low Fragmentation Heap) wurde implementiert, was die Leistung von Speicherzuweisungsoperationen erhöht hat.
- In den Mechanismus zur Zuweisung virtueller Speicher wurde die Unterstützung für die Reservierung von Speicher (Placeholder) eingeführt, die es der Anwendung ermöglicht, einen bestimmten Bereich des virtuellen Speichers für die zukünftige Verwendung zu reservieren.
- 64-Bit-Lader (Loader und Preloader) für ausführbare Dateien und Bibliotheken sind im format PIE (Position-Independent Executables) erstellt worden, um einen Teil des 32-Bit-Adressraums freizugeben.
- Eine korrekte Entfaltung des Stacks (Stack Unwinding) für NT-Systemaufrufe und Benutzer-Callback-Aufrufe wurde sichergestellt.
- Netzwerkfähigkeiten
- Die MSHTML-Engine unterstützt nun den Mechanismus der Speicherbereinigung ‚Cycle Collection‘.
- MSHTML bietet jetzt Unterstützung für den synchronen Modus der Verarbeitung von XMLHttpRequest-Anfragen.
- In jscript.dll wurde die Unterstützung für das WeakMap-Objekt hinzugefügt, um mit einer Sammlung von Schlüssel/Wert-Paaren zu arbeiten, wobei der Schlüssel ein Objekt ist, dem ein beliebiger Wert zugewiesen werden kann. Die Methoden WeakMap.get(), WeakMap.delete(), WeakMap.clear() und WeakMap.has() wurden implementiert.
- Die Browsing-Engine Gecko wurde auf Version 2.47.4 aktualisiert.
- Die Unterstützung von Benachrichtigungen über Änderungen des Netzwerkstatus wurde implementiert.
- Kryptographie und Sicherheit
- In der Bibliothek Winscard.dll wurde die Unterstützung für Smartcards implementiert, die über die Systembibliothek PCSClite bereitgestellt wird.
- In BCrypt wurde die Unterstützung für das Diffie-Hellman-Schlüsselaustauschprotokoll hinzugefügt.
- Das Paket Negotiate wurde implementiert, um eine Schicht zur Verwendung der SSPI (Security Support Provider Interface) zur Kommunikation mit SSP-Anbietern (Security Support Provider) bereitzustellen.
- Eingebettete Anwendungen
- Im Wine-Debugger (winedbg) wird die Zydis-Bibliothek zur Disassemblierung von X86-Maschinencodes eingesetzt.
- Im WineCfg-Interface wurde die Möglichkeit hinzugefügt, alte Windows-Versionen (vor XP) auf 64-Bit-Plattformen einzustellen, um die Ausführung veralteter Anwendungen im WoW64-Modus zu ermöglichen.
- In allen integrierten Grafik-Anwendungen wurde die Ausgabe von Fehlermeldungen in einem separaten Dialog anstelle der Anzeige in der Konsole implementiert.
- Das Programm systeminfo zeigt nun Informationen aus der WMI-Datenbank (Windows Management Instrumentation) an.
- Die Anwendung klist wurde hinzugefügt, um Kerberos-Tickets anzuzeigen.
- In der Anwendung taskkill wurde die Möglichkeit zur erzwungenen Beendigung von Kindprozessen implementiert.
- In das Tool start wurde der Parameter ‚/machine‘ hinzugefügt, um die Architektur auszuwählen, die beim Start hybrider ausführbarer Dateien verwendet wird, die sowohl x86 als auch ARM unterstützen.
- Der größte Teil der Funktionalität des Programms tasklist wurde implementiert.
- Eine grundsätzliche Implementierung der Anwendung findstr wurde hinzugefügt.
- Entwicklungstools
- In dem Tool WineDump wurde die Möglichkeit implementiert, den Inhalt von Windows-Registrierungsdateien (REGF-Format) anzuzeigen sowie Daten für alle Architekturen (x86/ARM64) zu zeigen, die in hybriden PE-Dateien unterstützt werden.
- Im IDL-Compiler wurde die Unterstützung für die Attribute „composable“, „default_overload“, „deprecated“ und „protected“ hinzugefügt.
- Die Bibliothek libwine.so wurde entfernt, da sie in der Version Wine 6.0 als veraltet erklärt wurde und in Wine seit langem nicht mehr verwendet wird. ELF-Programme, die in älteren Versionen von Wine (5.0 und älter) mit libwine.so erstellt wurden, benötigen zur Ausführung in Wine 9.0 eine Neucompilierung.
- Integrierte Bibliotheken und externe Abhängigkeiten
- In die Integration wurden die Bibliotheken FluidSynth 2.3.3, Musl 1.2.3 (nur mathematische Funktionen) und Zydis 4.0.0 aufgenommen.
- Die Komponenten 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 und Zlib 1.3 wurden auf neue Versionen aktualisiert. Die Wine Mono-Engine mit der .NET-Plattform-Implementierung wurde auf die Version 8.1.0 aktualisiert.
- Im Treiber winewayland.drv werden die Clientbibliothek Wayland sowie die Bibliotheken xkbcommon und xkbregistry als externe Abhängigkeiten verwendet.
- Zur Unterstützung von Smartcards wird die externe Bibliothek PCSClite (in macOS — PCSC) verwendet.
- Für die Erstellung von PE-Dateien auf nicht i386-Plattformen ist jetzt ein Cross-Compiler erforderlich, der die Direktiven «.seh» zur Verarbeitung von Ausnahmen unterstützt.
Quelle: opennet.ru
