Nach einem Jahr Entwicklung und 26 experimentellen Versionen wurde die stabile Version der offenen Win32 API-Implementierung – Wine 9.0 – veröffentlicht, die über 7000 Änderungen umfasst. Zu den wichtigsten Neuerungen in dieser Version gehört die Implementierung der WoW64-Architektur zum Ausführen von 32-Bit-Anwendungen 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 wird die vollständige Funktionsfähigkeit von 5336 Windows-Programmen bestätigt (vor einem Jahr 5266, vor zwei Jahren 5156, vor drei Jahren 5049); weitere 4397 Programme (vor einem Jahr 4370, vor zwei Jahren 4312, vor drei Jahren 4227) funktionieren hervorragend mit zusätzlichen Einstellungen und externen DLLs. Bei 3943 Programmen (vor einem Jahr 3888, vor zwei Jahren 3813, vor drei Jahren 3703) treten kleinere Probleme auf, die jedoch die Nutzung der grundlegenden Funktionen der Anwendungen nicht beeinträchtigen.
Die wichtigsten Neuerungen von Wine 9.0:
- Der Treiber winewayland.drv wurde hinzugefügt, um Wine in Umgebungen zu nutzen, die auf dem Wayland-Protokoll basieren, ohne XWayland und X11-Komponenten einsetzen zu müssen. Die Entwicklung zielt darauf ab, ein reines Wayland-Umfeld bereitzustellen, das die Ausführung von Windows-Anwendungen unterstützt, ohne dass X11-Pakete installiert werden müssen. Dies führt zu einer höheren Leistung und Reaktionsfähigkeit von Spielen, da überflüssige Schichten vermieden werden. Darüber hinaus ermöglicht die Verwendung einer reinen Wayland-Umgebung für Wine die Beseitigung von Sicherheitsproblemen, die bei X11 auftreten können (zum Beispiel können nicht vertrauenswürdige Spiele für X11 andere Anwendungen ausspionieren, da das X11-Protokoll den Zugriff auf alle Eingabeveranstaltungen ermöglicht und gefälschte Tasteneingaben simulieren kann).
Der Treiber ist als experimentell und in der Entwicklung gekennzeichnet, bietet jedoch bereits Unterstützung für viele Funktionen, wie z. B. Fensterverwaltung, Verwendung mehrerer Monitore, Unterstützung für hochauflösende Ausgaben auf Displays mit hoher Pixeldichte (high-DPI), Verwendung relativer Koordinaten zur Mausverfolgung und Unterstützung der Grafik-API Vulkan. Der Treiber ist standardmäßig nicht aktiviert; um ihn zu aktivieren, fügen Sie "wayland" zum Registrierungsschlüssel "HKCU\Software\Wine\Drivers" hinzu und stellen Sie sicher, dass die Umgebungsvariable DISPLAY nicht gesetzt ist: wine reg.exe add HKCU\\Software\\Wine\\Drivers \/v Graphics \/d x11,wayland
- Alle Module wurden auf die NT-Systemaufrufschnittstelle umgestellt, anstatt direkte Aufrufe zwischen den PE- und Unix-Ebenen vorzunehmen, was den Abschluss jahrelanger Arbeiten markiert, die darauf abzielten, alle DLL-Bibliotheken auf das Format der Portable Executable (PE) umzustellen.
- Die Entwicklung der WoW64-Schicht (64-Bit Windows-on-Windows) wurde fortgesetzt, die es ermöglicht, 32-Bit Windows-Anwendungen auf 64-Bit Unix-Systemen auszuführen. In allen Modulen, die auf Unix-Bibliotheken zugreifen, werden WoW64-Systemaufrufkonverter (Thunk) verwendet, die es 32-Bit Modulen im PE-Format ermöglichen, auf 64-Bit Unix-Bibliotheken zuzugreifen.
Ein neuer WoW64-Startmodus wurde optimiert, 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 gestartet). Die Unterstützung für den neuen WoW64-Modus auf der macOS-Plattform wurde hinzugefügt. Da im neuen WoW64-Modus einige Mängel wie das Fehlen der Unterstützung des 16-Bit-Modus und eine reduzierte OpenGL-Leistung aufgrund fehlender Unterstützung der ARB_buffer_storage-Erweiterung festgestellt werden, ist er vorerst nicht standardmäßig aktiviert und erfordert eine Kompilierung mit der Option „—enable-archs=i386,x86_64“ im Konfigurationsskript.
- Die Möglichkeit zur Ausführung vorhandener Windows-Executable-Dateien auf ARM64-Architekturen wurde hinzugefügt. Es wurde die Möglichkeit implementiert, Wine für ABI ARM64EC (ARM64 Emulation Compatible) zu bauen und die Unterstützung für das Laden von ARM64EC-Modulen, die das Portieren von ursprünglich für die x86_64-Architektur geschriebenen Anwendungen auf ARM64-Systeme erleichtern, abzubilden. Damit können ARM64-Umgebungen auch einzelne Module mit x86_64-Code über einen Emulator ausführen. Unterstützung für das PE-Dateiformat ARM64X wurde hinzugefügt, das das Laden einer einzigen Executable in x64/Arm64EC und ARM64-Prozessen ermöglicht. Eine Schnittstelle zur Emulation von 32-Bit x86-Systemen wurde implementiert, aber die Bibliothek mit dem Emulator ist derzeit noch nicht in der Hauptversion von Wine enthalten (zum Ausführen von x86-Code in einer ARM64-Umgebung kann der externe Emulator FEX verwendet werden).
- Grafiksubsystem
- Der PostScript-Treiber wurde überarbeitet, um die Unterstützung von Spool-Dateien im Windows-Format zu ermöglichen, in denen die Druckauftragsdaten gespeichert sind. Direkte Aufrufe des Treibers aus Unix-Umgebungen wurden ausgeschlossen.
- Das WinRT-Theme unterstützt nun den Dunkelmodus. In WineCfg wurde eine Einstellung zur Aktivierung des dunklen Benutzeroberflächen-Themes hinzugefügt.
- Der Treiber für die Vulkan-Grafik-API unterstützt jetzt die Vulkan-Spezifikation 1.3.272 (in Wine 8.0 wurde 1.3.237 unterstützt).
- Die GdiPlus-Bibliotheksfunktionen wurden optimiert, was die Grafikleistung erhöht.
- Direct3D
- Die Analyse von multithreaded Befehlspipelines wird pausiert, wenn keine zu verarbeiteten Rendering-Befehle vorliegen, was den Energieverbrauch auf das Niveau der Single-Thread-Verarbeitung bei Programmen senkt, die nicht die gesamte Bandbreite der Befehlspipeline beanspruchen.
- Direct3D 10 unterstützt jetzt zusätzliche Effekte.
- Im Code von WineD3D und dem Backend, das die Vulkan-Grafik-API nutzt, wurden Leistungsoptimierungen vorgenommen.
- Im Rendering-Code auf Basis der Vulkan-API wurde eine Überprüfung der vom Gerät unterstützten Funktionen hinzugefügt, die der Anwendung Informationen über den verfügbaren Direct3D-Funktionsgrad gibt.
- Die Funktionen D3DXFillTextureTX und D3DXFillCubeTextureTX wurden implementiert.
- Der klassische OpenGL ARB-Shader-Backend unterstützt jetzt die Schattenerstellung mithilfe der Erweiterung ARB_fragment_program_shadow.
- In D3DXLoadMeshHierarchyFromX und ähnlichen Funktionen wurde die Unterstützung für das Laden benutzerdefinierter Daten über die ID3DXLoadUserData-Schnittstelle hinzugefügt.
- Ton und Video
- Eine erste Implementierung der DirectMusic API wurde vorgeschlagen. Unterstützung für Sammlungen, Instrumente und Sound Samples im SoundFont-Format wurde hinzugefügt. Unterstützung für den Doppler-Effekt wurde realisiert. Tests zur Überprüfung der korrekten Implementierung mit dem Sequencer dmime und dem MIDI-Synthesizer dmsynth wurden implementiert.
- Eine FluidSynth-Bibliothek wurde in das API von DirectMusic integriert.
- Die Unterstützung für das Laden von SoundFonts (SoundFont — Formate für die synthetische Wiedergabe basierend auf Samples, die zur Wiedergabe von MIDI-Dateien verwendet werden) in den Formaten DLS1 und DLS2 sowie im SF2-Format, das unter Linux verwendet wird, wurde realisiert.
- Die Möglichkeit zur Wiedergabe von MIDI-Inhalten mithilfe der Bibliothek dmsynth wurde hinzugefügt, indem der Software-Synthesizer FluidSynth und die DirectSound-API zur Audioausgabe verwendet werden.
- Ein Decoder für Videos im Video-Codec-Format Indeo IV50 wurde hinzugefügt.
- DirectShow
- Ein DMO (DirectX Media Object) mit einem 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-Filter (DirectShow MPEG‑1 Stream Splitter) wurde zusätzlich zu den Audio-Streams die Unterstützung für Video-Streams und Steuer-Streams hinzugefügt.
- Ein Filter zur Decodierung von Videos im MPEG‑1-Format (DirectShow MPEG‑1 Video Decoder) wurde implementiert.
- Eingabegeräte
- DirectInput unterstützt jetzt die Verwendung von Action Maps, mit denen Tasten auf dem Spielecontroller bestimmten Aktionen in Spielen zugeordnet werden können.
- Integration mit dem Desktop
- Es wird die Möglichkeit geboten, Bindings in die primäre Benutzerumgebung zu exportieren, sodass Anwendungen, die unter Wine ausgeführt werden, als Protokollhandler beim Öffnen von URLs aufgerufen werden können (zum Beispiel wird spotify.exe gestartet, wenn Links wie „spotify:user:spotify:playlist:848218482355482821“ geöffnet werden).
- Die Extraktion von EDID-Daten (Extended Display Identification Data) mit Informationen über die Parameter des angeschlossenen Monitors, wie Gerätetyp und Modell, wurde implementiert.
- Es wurde die Möglichkeit geschaffen, das Desktop-Fenster, das im Vollbildmodus geöffnet ist, mit der Schaltfläche „Exit desktop“ im Menü „Start“ zu schließen.
- Internationalisierung
- Die Unterstützung für IME (Input Method Editors) wurde erweitert. Es wurde an der Kompatibilität mit nativen Windows-Implementierungen von IME und der Verbesserung der Integration mit Linux-IME gearbeitet.
- Die Generierung einer Datenbank für Locale im Format locale.nls aus der Unicode-CLDR-Datenbank (Unicode Common Locale Data Repository) der Version 44 wurde sichergestellt. Unterstützung für zusätzliche Locales bew-ID, blo-BJ, csw-CA, ie-EE, mic-CA, prg-PL, skr-PK, tyv-RU, vmw-MZ, xnr-IN und za-CN wurde hinzugefügt.
- Die Benutzeroberfläche wurde ins Georgische übersetzt. Vollständige Übersetzungen sind für 16 Sprachen und teilweise für 31 Sprachen verfügbar.
- Die Unicode-Zeichentabellen wurden auf die Version 15.1.0 aktualisiert. Die Zeitzonendatenbank wurde ebenfalls aktualisiert.
- Kernel (Kernel-Schnittstellen von Windows)
- Windows 10 wurde als Standardversion von Windows festgelegt.
- Für ausführbare Dateien im PE-Format wurde die Unterstützung der Adressraum-Randomisierung (ASLR) implementiert, jedoch sind die Startadressen von Code im Speicher noch nicht vollständig randomisiert.
- Die Unterstützung für schwach fragmentierte Heaps (LFH, Low Fragmentation Heap) wurde implementiert, was die Leistung bei Speicherzuweisungen verbessert hat.
- Im Mechanismus zur Zuweisung virtueller Speicher wurde die Unterstützung für die Speicherreservierung (placeholder) hinzugefügt, die es einer Anwendung ermöglicht, einen bestimmten Bereich virtuellen Speichers für die zukünftige Nutzung zu reservieren.
- 64-Bit-Loader (loader und preloader) für ausführbare Dateien und Bibliotheken wurden im Format PIE (Position-Independent Executables) erstellt, um einen Teil des 32-Bit-Adressraums freizugeben.
- Eine korrekte Stapelaufrollung (stack unwinding) für NT-Systemaufrufe und benutzerdefinierte Callback-Aufrufe wurde sichergestellt.
- Netzwerkfunktionen
- Im MSHTML-Engine wurde die Unterstützung für den Garbage-Collection-Mechanismus „Cycle Collection“ implementiert.
- MSHTML bietet nun Unterstützung für den synchronen Modus bei der Verarbeitung von XMLHttpRequest-Anfragen.
- In jscript.dll wurde die Unterstützung für das WeakMap-Objekt added, das mit einer Sammlung von Schlüssel/Wert-Paaren arbeitet, bei denen der Schlüssel ein Objekt ist, dem ein beliebiger Wert zugeordnet werden kann. Es wurden die Methoden WeakMap.get(), WeakMap.delete(), WeakMap.clear() und WeakMap.has() implementiert.
- Die Browser-Engine Gecko wurde auf Version 2.47.4 aktualisiert.
- Die Unterstützung für Benachrichtigungen über Änderungen des Netzwerkstatus wurde implementiert.
- Kryptografie und Sicherheit
- In der Bibliothek Winscard.dll wurde die Unterstützung für Smartcards hinzugefügt, die über die Systembibliothek PCSClite implementiert wurde.
- In BCrypt wurde die Unterstützung für das Diffie-Hellman-Schlüssel-Austauschprotokoll hinzugefügt.
- Das Paket Negotiate wurde implementiert, das eine Schicht für die Verwendung der SSPI (Security Support Provider Interface) bereitstellt, um auf SSP-Anbieter (Security Support Provider) zuzugreifen.
- Integrierte Anwendungen
- Im Wine-Debugger (winedbg) wurde die Zydis-Bibliothek für die Disassemblierung von X86-Maschineninstruktionen verwendet.
- Im WineCfg-Interface wurde die Unterstützung für 64-Bit-Plattformen älterer Windows-Versionen (bis XP) hinzugefügt, was das Ausführen von veralteten Anwendungen im WoW64-Modus ermöglicht.
- In allen integrierten grafischen Anwendungen wurde die Ausgabe von Fehlermeldungen in einem separaten Dialog implementiert, anstatt sie in der Konsole anzuzeigen.
- Im Programm systeminfo werden Informationen aus der WMI-Datenbank (Windows Management Instrumentation) angezeigt.
- Die Anwendung klist wurde hinzugefügt, um Kerberos-Tickets anzuzeigen.
- In der Anwendung taskkill wurde die Möglichkeit für das gewaltsame Beenden von Kindprozessen implementiert.
- In das Dienstprogramm start wurde der Parameter «/machine» für die Auswahl der Architektur, die beim Start hybrider ausführbarer Dateien, die x86 und ARM unterstützen, verwendet wird, hinzugefügt.
- Ein Großteil der Funktionalität des Programms tasklist wurde implementiert.
- Eine grundlegende Implementierung der Anwendung findstr wurde hinzugefügt.
- Entwicklungstools
- Im Dienstprogramm WineDump wurde die Möglichkeit zur Ausgabe des Inhalts von Windows-Registrierungsdateien (REGF-Format) sowie zur Anzeige von Daten für alle unterstützten Architekturen (x86/ARM64) in hybriden PE-Dateien implementiert.
- Im IDL-Compiler wurde die Unterstützung der Attribute «composable», «default_overload», «deprecated» und «protected» hinzugefügt.
- Die Bibliothek libwine.so wurde entfernt, da sie in der Veröffentlichung von Wine 6.0 als veraltet angekündigt und in Wine seit langem nicht mehr verwendet wird. ELF-Programme, die mit alten Versionen von Wine (5.0 und älter) unter Verwendung von libwine.so erstellt wurden, benötigen für die Ausführung in Wine 9.0 eine Neubewertung.
- Integrierte Bibliotheken und externe Abhängigkeiten
- Integriert sind die Bibliotheken FluidSynth 2.3.3, Musl 1.2.3 (nur mathematische Funktionen) und Zydis 4.0.0.
- 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 Implementierung der .NET-Plattform wurde auf Version 8.1.0 aktualisiert.
- Im Treiber winewayland.drv wird die Clientbibliothek Wayland sowie die Bibliotheken xkbcommon und xkbregistry als externe Abhängigkeiten verwendet.
- Zur Unterstützung von Smartcards wird die externe Bibliothek PCSClite eingesetzt (unter macOS — PCSC).
- Für die Erstellung von PE-Dateien auf Plattformen, die von i386 abweichen, ist nun ein Cross-Compiler mit Unterstützung für die Direktive „.seh“ zur Verarbeitung von Ausnahmen erforderlich.
Quelle: opennet.ru
