Nach einem Jahr Entwicklung und 29 experimentellen Versionen wurde die stabile Version der offenen Win32 API-Implementierung – Wine 10.0 – veröffentlicht, die über 6000 Änderungen enthält. Zu den wichtigsten Neuerungen der neuen Version gehören die vollständige Unterstützung der ARM64EC-Architektur, die Skalierung auf hochauflösenden Bildschirmen, die standardmäßige Aktivierung des Wayland-Treibers, die Implementierung von Panels zur Anpassung des Bildschirms und des Joysticks, ein alternativer Multimedia-Backend auf Basis von FFmpeg, ein Bluetooth-Treiber, die Unterstützung von Vulkan 1.4 und die Möglichkeit zur Emulation des Wechsels von Video-Modi.
In Wine sind 5372 Windows-Anwendungen vollständig funktionsfähig (vor einem Jahr 5336, vor zwei Jahren 5266, vor drei Jahren 5156), außerdem funktionieren 4435 Anwendungen (vor einem Jahr 4397, vor zwei Jahren 4370, vor drei Jahren 4312) einwandfrei mit zusätzlichen Einstellungen und externen DLLs. Bei 4020 Anwendungen (vor einem Jahr 3943, vor zwei Jahren 3888, vor drei Jahren 3813) treten kleinere Probleme auf, die die Nutzung der Hauptfunktionen der Anwendungen jedoch nicht beeinträchtigen.
Wichtige Neuerungen in Wine 10.0:
- ARM64
- Die vollständige Unterstützung der ARM64EC-Architektur (ARM64 Emulation Compatible) wurde sichergestellt, deren Unterstützungsniveau in Wine mit der ARM64-Architektur gleichgezogen wurde. Die ARM64EC-Architektur wurde entwickelt, um die Portierung von auf x86_64-Systemen ursprünglich entwickelten Anwendungen auf ARM64-Systeme zu erleichtern und ermöglicht die Ausführung einzelner Module mit x86_64-Code in einer ARM64-Umgebung mittels eines Emulators.
- Die vollständige Unterstützung für das ARM64X-Format von PE-Dateien wurde implementiert, das die Kombination von Code für die ARM64EC- und ARM64-Architekturen in einer ausführbaren Datei ermöglicht. Für den Aufbau von Wine im ARM64X-Format muss LLVM aus dem Git installiert werden (die erforderliche Funktionalität wird in die Version LLVM 20 aufgenommen) und beim Start des Skripts "configure" muss die Option "—enable-archs=arm64ec,aarch64" angegeben werden.
- Eine Schnittstelle zur Emulation von 64-Bit x86-Systemen wurde implementiert. Bei Verwendung von ARM64EC wird Wine so ausgeführt, wie es ist, und die Emulation wird nur für den Code von x86-64-Anwendungen angewendet. Die Bibliothek mit dem Emulator ist zwar noch nicht Bestandteil von Wine, aber um x86-64-Code in einer ARM64-Umgebung auszuführen, kann ein externer Emulator FEX verwendet werden, der mit Unterstützung für ARM64EC kompiliert wurde.
- Für die Unterstützung von ARM64 ist die Verwendung von 4KB großen Seiten im System erforderlich, wie es das Windows ABI verlangt (die Ausführung in Umgebungen mit Linux-Kernen, die 16K- oder 64K-Speicherseiten verwenden, wird derzeit nicht unterstützt).
- Grafik-Subsystem
- Eine genauere Skalierung auf Bildschirmen mit hoher Pixeldichte (High-DPI) wurde umgesetzt. Die Unterstützung des DPI-Bewusstseinsmodus wurde bereitgestellt, um die Anzeige von Anwendungen auf Bildschirmen mit hoher Pixeldichte zu optimieren, je nachdem, ob die Anwendung eine Anpassung an sich ändernde DPI unterstützt oder nicht (Anwendungen, die DPI nicht berücksichtigen, werden automatisch skaliert). Optionen wurden hinzugefügt, um die Unterstützung für High-DPI je nach einzelnen Anwendungen oder Wine-Präfixen zu überschreiben.
- Im Treiber für die Grafik-API Vulkan wurde die Unterstützung der Spezifikation Vulkan 1.4 hinzugefügt (in Wine 9.0 wurde Vulkan 1.3.272 unterstützt). Unterstützung für Vulkan-Erweiterungen zum Kodieren und Dekodieren von Videos wurde hinzugefügt.
- Bei der Verwendung des X11-Backends wurde die Möglichkeit zur Darstellung von Vulkan-Child-Fenstern für Anwendungen implementiert, die solche Fenster zur Ausgabe von 3D-Inhalten verwenden (früher war diese Möglichkeit nur für OpenGL verfügbar).
- Die GdiPlus-Bibliothek hat die Unterstützung für den Schriftartenverknüpfungsmechanismus ('Font Linking') hinzugefügt, der es ermöglicht, beim Anzeigen von Text mehrere Schriftarten zu verwenden, wenn keine einzelnen Schriftarten vorhanden sind, die alle im Text vorkommenden Zeichen abdecken.
- Wayland
- Im Standardkonfiguration wurde der Treiber winewayland.drv aktiviert, der die Verwendung von Wine in Umgebungen auf Basis des Wayland-Protokolls ohne Einsatz von XWayland und Komponenten von X11 ermöglicht. Wine startet Anwendungen standardmäßig direkt auf Wayland, wenn XWayland nicht verfügbar ist; andernfalls bleibt der Start mit XWayland vorrangig. Um Wayland zwangsweise zu aktivieren, kann die Umgebungsvariable DISPLAY verwendet oder ein Schlüssel in der Registry hinzugefügt werden, indem eine Datei file.reg erstellt wird: Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\Software\Wine\Drivers] "Graphics"="wayland" und sie mit dem Befehl angewendet wird: $ WINEPREFIX=\/pfad\/zum\/präfix wine regedit \/pfad\/zu\/file.reg
- Im Treiber winewayland.drv wurde die Unterstützung für OpenGL und pixel-Buffer (pBuffer) hinzugefügt.
- Probleme mit der Positionierung von Popup-Fenstern in Umgebungen auf Basis von Wayland wurden gelöst.
- Bei der Verwendung von Wayland wurde die Unterstützung für die automatische Wiederholung von Tastenanschlägen beim Halten von Tasten implementiert.
- Integration mit dem Desktop
- Ein experimenteller Mechanismus zur Emulation von 'modesetting' wurde hinzugefügt, der es ermöglicht, den Wechsel der Videomodi zu emulieren, ohne die Bildschirm Einstellungen tatsächlich zu ändern. Die Sichtbarkeit der Änderung der Bildschirmauflösung ohne den Wechsel des Videomodi wird über Erweiterung und Skalierung von Fenstern erzeugt.
- Ein neuer Applet Desktop Control Panel (desk.cpl) wurde hinzugefügt, der eine Benutzeroberfläche zur Verwaltung der Anzeigeeinstellungen implementiert (zum Beispiel kann die virtuelle Desktopauflösung geändert oder emulierte Anzeigeparameter angepasst werden).
- Die Möglichkeit, die Bildschirmeinstellungen auf die Standardwerte zurückzusetzen, wurde hinzugefügt, falls der Zustand nach einem Absturz des Prozesses nicht wiederhergestellt werden kann.
- Die Unterstützung zum Deaktivieren der Anzeige von Symbolen im Systemtray wurde hinzugefügt (in „HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer“ sollte „NoTrayItemsDisplay=1“ angegeben werden).
- Die Unterstützung zum Deaktivieren von Shell-Launchern im Desktop-Modus wurde hinzugefügt (in „HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer“ sollte „NoDesktop=1“ angegeben werden).
- Direct3D
- Für das Rendering mit OpenGL ist jetzt die Unterstützung von GLSL 1.20 sowie den Erweiterungen EXT_framebuffer_object und ARB_texture_non_power_of_two erforderlich. Die Unterstützung des alten ARB-Shader-Backends und der OffscreenRenderingMode-Einstellungen wurde eingestellt.
- Ein grafischer Festfunktions-Pipeline für Direct3D 9 und ältere Versionen wurde hinzugefügt (in älteren Direct3D wurden nur vordefinierte grafische Operationen bereitgestellt, die nicht verändert werden konnten), implementiert in der HLSL-Shadersprache und ermöglicht das Emulieren festgelegter Funktionen beim Rendering über die Vulkan- oder OpenGL-API.
- Beim Rendering mit Vulkan werden Vulkan-Erweiterungen verwendet, um den Zustand der grafischen Pipeline dynamisch zu ändern, wodurch Ruckler in Spielen reduziert werden.
- Ein alternativer glsl-vkd3d Backend für GLSL-Shader wurde hinzugefügt, der vkd3d-shader nutzt.
- Erste Unterstützung für die Kompilierung von Direct3D-Effekten unter Verwendung von vkd3d-shader wurde bereitgestellt.
- In der D3DX9-Bibliothek wurde die Möglichkeit zur Generierung von MIP-Texturen (MipMap) beim Laden von volumetrischen Texturen realisiert. Die Unterstützung für Farbformat-Darstellungen mit 64bpp RGBA und 48bpp RGB in PNG-Bildern sowie die Formate X8L8V8U8, A2W10V10U10, A8P8, V16U16 und Q16W16V16U16 wurde hinzugefügt.
- Ton und Video
- Als Alternative zum GStreamer-basierten Backend wurde ein neues Multimedia-Backend entwickelt, das FFmpeg verwendet und für die Unterstützung des Media Foundation-Frameworks geeignet ist. Zum Aktivieren des alternativen Backends sollte in den Registrierungseinträgen unter „HKCU\Software\Wine\MediaFoundation“ „DisableGstByteStreamHandler=1“ angegeben werden.
- Die Implementierung der Media Foundation-API wurde verbessert, die nun besser mit Anwendungen funktioniert, die auf Demultiplexing- und Decoding-Komponenten angewiesen sind.
- Die API DirectMusic unterstützt nun das Hochladen von MIDI-Dateien.
- Eingabegeräte
- Die erste Version des Bluetooth-Treibers wurde hinzugefügt.
- Ein Applet für das Joystick-Steuerfeld (joy.cpl) mit Einstellungen für den Joystick wurde hinzugefügt.
- Es wurden Verbesserungen im Zusammenhang mit Zeigegeräten (Touchpads, Mäuse) implementiert, die das HID-Protokoll (Human Interface Device) verwenden. Ein Treiber mouhid.sys für HID-Geräte wurde hinzugefügt. Die korrekte Verarbeitung zusammengesetzter Eingabegeräte wurde realisiert, und die Informationen darüber werden in Windows-Anwendungen als separate Geräte übermittelt.
- Für das X11-Backend wurde die Unterstützung für Touchscreens hinzugefügt, und es wurde die Möglichkeit implementiert, den Multitouch-Modus durch die Verarbeitung von WM_POINTER*-Nachrichten (WM_POINTERENTER, WM_POINTERLEAVE usw.) zu nutzen.
- Einige interne Strukturen der Bibliothek user32 wurden im gemeinsam genutzten Speicher platziert, was die Leistung verbessert und die Belastung des Wine Servers verringert hat.
- In winex11 wurde die Unterstützung für die Ereignisverarbeitung von XInput2 in Bezug auf einzelne Fenster hinzugefügt.
- Die korrekte Unterstützung von Tastaturen mit dem Dvorak-Layout wurde implementiert.
- Kern (Windows Kernel-Schnittstellen)
- Die Unterstützung für das Anheben von Prozessprivilegien wurde hinzugefügt (ein Prozess, der ursprünglich als normaler Benutzer gestartet wurde, kann Administratorprivilegien erhalten). Bei der Erstellung von Serverprozessen (msi action server) sowie Prozessen, die die Funktionen RtlCreateUserProcess() und CreateProcessInternal() aufrufen, wird standardmäßig ein eingeschränkter Administrator-Token verwendet.
- Beim Abrufen von Informationen über Festplattenscheiben wird nach Möglichkeit auf Systemdienste über DBus zugegriffen, anstatt einen direkten Zugriff auf das Gerät zu versuchen.
- Der unidirektionale Mechanismus zur interprozesslichen Kommunikation (IPC) Mailslots wird nun direkt im Wine Server implementiert, was eine vollständige Unterstützung der Windows-Semantik ermöglicht.
- Die asynchrone Ereigniswarteschlange für serielle Ports wurde realisiert.
- Die vollständige Unterstützung der Prozessorerweiterungen XSTATE in den Thread-Kontexten wurde hinzugefügt, was die Verwendung neuer vektorbasierter Erweiterungen wie AVX-512 ermöglicht.
- Eingebettete Anwendungen
- Die Eingabeverarbeitung, die im Befehlsinterpreter cmd.exe verwendet wird, wurde neu geschrieben. In cmd.exe wurde die Unterstützung für die Operationen „||“ und „&&“ hinzugefügt.
- Die Utility findstr hat die Unterstützung für reguläre Ausdrücke und die Groß-/Kleinschreibung ignorierenden Suchfunktionen erhalten.
- In die Utilities regsvr32 und rundll32 wurde die Möglichkeit zur Registrierung von ARM64EC-Modulen implementiert.
- Werkzeuge hinzugefügt: sort zum Sortieren von Eingabedaten, fc zum Vergleichen von Dateien und where zum Suchen von Dateien.
- Die Anwendung wmic unterstützt jetzt einen interaktiven Modus.
- Im Explorer wurde eine optionale Unterstützung für das Startmenü und die Symbolleiste hinzugefügt. Der Start von explorer.exe mit reduzierten Zugriffsrechten wurde ermöglicht.
- Entwicklungstools
- Im winebuild wurde die Option „-marm64x“ hinzugefügt, um hybride ARM64X-Bibliotheken zu generieren.
- Im winegcc wurde die Option „-marm64x“ hinzugefügt, die die Erstellung für ARM64X ermöglicht.
- In den aus der Schnittstellendefinitionssprache IDL (Interface Definition Language) generierten Dateien werden Komponenten verwendet, die die Ausführung im Interpretationsmodus vollständig unterstützen.
- Der IDL-Compiler (Interface Definition Language) unterstützt jetzt die Generierung von Typbibliotheken (TypeLib) im alten Format (SLTG).
- Das Werkzeug winedump unterstützt nun das Speichern von Minidump-Tabellendumps, Informationen zu C++-Ausnahmen und Typbibliothek-Ressourcen.
- Verschiedenes
- Die Unterstützung des Diffie-Hellman-Schlüsselverfahrens (DH) wurde verbessert. Eine Möglichkeit zur Konfiguration und zum Abrufen von DH-Parametern wurde hinzugefügt. Handler für die Generierung von Paaren aus öffentlichen und privaten Schlüsseln wurden implementiert.
- Die Verwendung von OAEP (Optimal Asymmetric Encryption Padding) zusammen mit dem RSA-Algorithmus wurde sichergestellt.
- In der DirectPlay-API wurde die Unterstützung für Netzwerksitzungen implementiert.
- Die Verarbeitung von Zuständen für asynchronen Input/Output im WoW64-Modus (Windows-on-Windows 64-Bit) wurde optimiert, was die Ausführung von 32-Bit-Windows-Anwendungen auf 64-Bit-Unix-Systemen ermöglicht.
- Die Unterstützung für die Installation von ODBC-Treibern für DBMS, die für Windows erstellt wurden, wurde hinzugefügt.
- Vollständige Unterstützung für RPC/COM, C++ RTTI (Run-Time Type Information) und C++-Ausnahmen wurde für die ARM-Plattform implementiert.
- Im C-Laufzeitbetriebssystem wurde die Unterstützung für UTF-8-Codierung in ANSI-Funktionen implementiert.
- Die Funktionalität der MSHTML-Engine wurde erweitert. Unterstützung für Prototypen und Objektkonstrukteure wurde hinzugefügt. Im JavaScript-Engine wurde eine neue Bindungsschnittstelle für MSHTML hinzugefügt. Die eingebauten Funktionen von MSHTML wurden in korrekte JavaScript-Objekte umgewandelt. Der Garbage Collector für JavaScript wurde verbessert und deckt jetzt alle Ausführungskontexte im Thread ab. Unterstützung für JavaScript-Objekte ArrayBuffer und DataView wurde hinzugefügt.
- Im Gitlab-basierten kontinuierlichen Integrationssystem wurde die Unterstützung für statische Analyse mit Clang und JUnit-Testberichten hinzugefügt.
- Die Capstone-Bibliothek 5.0.3 wurde integriert, über die das Disassemblieren im WineDb-Debugger umgesetzt wird.
- Die Komponenten wurden auf neue Versionen aktualisiert: Vkd3d 1.14, Faudio 24.10, FluidSynth 2.4.0, LDAP 2.5.18, LCMS2 2.16, LibJpeg 9f, LibMPG123 1.32.9, LibPng 1.6.44, LibTiff 4.7.0, LibXml2 2.12.8, LibXslt 1.1.42 und Zlib 1.3.1.
Quelle: opennet.ru
