Nach einem Jahr Entwicklung und 25 experimentellen Versionen wurde die stabile Version der offenen Umsetzung der Win32 API – Wine 11.0 – veröffentlicht, die über 6300 Änderungen und 600 Fehlerbehebungen umfasst. Zu den wichtigsten Neuerungen in der neuen Version zählt die vollständige Unterstützung von NTSYNC, die Implementierung des Reparse Point-Mechanismus und die Verwendung einer neuen Umsetzung der WoW64-Architektur.
In Wine wurde die volle Funktionalität von 5419 Windows-Anwendungen bestätigt (vor einem Jahr waren es 5372, vor zwei Jahren 5336, vor drei Jahren 5266), außerdem funktionieren weitere 4500 Programme (vor einem Jahr 4435, vor zwei Jahren 4397, vor drei Jahren 4370) hervorragend mit zusätzlichen Anpassungen und externen DLLs. Bei 4086 Programmen (vor einem Jahr 4020, vor zwei Jahren 3943, vor drei Jahren 3888) gibt es kleinere Probleme, die die Nutzung der Hauptfunktionen der Anwendungen jedoch nicht beeinträchtigen.
Wichtige Neuerungen in Wine 11.0:
- Vollständige Unterstützung des NTSYNC-Treibers, der die Leistung von Windows-Spielen, die mit Wine ausgeführt werden, erheblich steigert. Der Treiber ist Teil des Linux-Kernels seit Version 6.14 und implementiert das zeichenorientierte Gerät /dev/ntsync sowie einen Satz von Synchronisationsprimitiven, die im Windows NT-Kernel verwendet werden. Der signifikante Leistungszuwachs wird durch die Beseitigung von Overhead, der mit RPC im Benutzerspace verbunden ist, erreicht.
- Die Möglichkeit zur Einstellung der Thread-Prioritäten in Linux und macOS wurde hinzugefügt.
- Im ntdll wurde die Synchronisierungs-API „Synchronization barriers“ hinzugefügt, die es ermöglicht, die Ausführung mehrerer Threads bis zu einem bestimmten Punkt in der Ausführung aller Threads anzuhalten (z. B. bis alle Threads einen bestimmten Punkt beim parallelen Ausführen desselben Codes erreicht haben).
- Die neue Umsetzung der WoW64-Api (64-Bit Windows-on-Windows) wird nun als vollständig unterstützt eingestuft und ermöglicht die Ausführung von 32-Bit Windows-Anwendungen in 64-Bit Unix-Systemen. Im Gegensatz zur alten WoW64-Umsetzung, in der 32-Bit-Anwendungen in 32-Bit Unix-Prozessen ausgeführt wurden, ermöglicht die neue WoW64 die Ausführung von 32-Bit-Code innerhalb eines 64-Bit-Prozesses. Innerhalb des WoW64-Modus wurde die Unterstützung für die Ausführung von 16-Bit-Anwendungen implementiert.
In allen Modulen, die auf Unix-Bibliotheken zugreifen, werden WoW64-Systemaufrufumwandler (Thunk) verwendet, die es 32-Bit-Modulen im PE-Format ermöglichen, auf 64-Bit-Unix-Bibliotheken zuzugreifen. Es wurde die Möglichkeit hinzugefügt, alte WoW64-Installationen im neuen Modus durch Setzen der Umgebungsvariable „WINEARCH=wow64“ zu starten. 32-Bit-Prefixe, die bei Setzen von WINEARCH=win32 erstellt werden, sind als veraltet deklariert und werden im neuen WoW64-Modus nicht mehr unterstützt. Der separate wine64-Loader wurde entfernt; stattdessen wird ein universeller Loader verwendet, der den Modus basierend auf der Bitbreite der ausführbaren Datei bestimmt.
- Kern (Windows Kernel-Schnittstellen)
- Ein Mechanismus für Reparse Points wurde implementiert, mit dem zusätzliche Daten, die über Tags identifiziert werden, an Dateien und Verzeichnisse angehängt werden können. Typen von Reparse Points wie symbolische Links und Einrichtungspunkte werden unterstützt.
- Um die Leistung beim Tracking von Schreiboperationen im Speicher zu verbessern, wird der Mechanismus UFFD (userfaultfd) eingesetzt, der es ermöglicht, Handler für Zugriffe auf nicht zugewiesene Speicherseiten (Page Faults) im Benutzermodus zu erstellen. In durchgeführten Tests ermöglichte der Einsatz von UFFD, die Ladezeit von Levels im Spiel „Streets of Rage 4“ von 6-8 Sekunden auf 1,5-2 Sekunden zu reduzieren, was den Ladezeiten auf der Windows-Plattform entspricht.
- Die Systemaufrufnummern NT, die mit den neuesten Versionen von Windows identisch sind, wurden implementiert, um die Unterstützung von Anwendungen sicherzustellen, die fest codierte Systemaufrufnummern verwenden.
- Auf ARM64-Systemen wurde die Möglichkeit einer Simulation von 4K-Speicherseiten in Umgebungen mit Linux-Kernen, die größere Speicherseiten (16K oder 64K) verwenden, implementiert. Die Simulation ermöglicht das Ausführen einfacher Anwendungen; für komplexere Programme wird empfohlen, Linux-Kerne mit 4-Kilobyte-Speicherseiten zu verwenden.
- Grafik-Subsystem
- Auf X11-Systemen (winex11) wird standardmäßig ein Rendering-Backend, das EGL verwendet, für OpenGL eingesetzt. Das GLX-Backend ist als veraltet angesehen, bleibt aber als Option verfügbar und wird verwendet, wenn EGL nicht vorhanden ist.
- Die anfängliche Unterstützung für D3DKMT-Objekte, die einen niedrigen Zugriff auf grafische Geräte aus dem Benutzermodus bieten, wurde hinzugefügt. Vulkan-Erweiterungen VK_KHR_external_memory_win32, VK_KHR_external_semaphore_win32, VK_KHR_external_fence_win32 und VK_KHR_win32_keyed_mutex wurden realisiert.
- Im WoW64-Modus (64-Bit Windows-on-Windows) wurde die Unterstützung für den Speichermapping von OpenGL über die Vulkan-API implementiert, die die Leistung von 32-Bit OpenGL-Anwendungen in Wine beschleunigt.
- Es wurde eine Emulation des Front-Buffers für OpenGL auf Plattformen ohne integrierte Unterstützung dafür realisiert.
- Im Driver für die Vulkan-API wurde Unterstützung für die Spezifikation Vulkan 1.4.335 hinzugefügt.
- Im WindowsCodecs-Bibliothekspaket wurde die Unterstützung für Metadaten in Bilddateien erweitert, und die Umwandlung zwischen ganzzahligen Farbdarstellungsformaten und Fließkommaformaten wurde implementiert.
- Die Abhängigkeit von der OSMesa-Bibliothek (Off-screen Mesa) wurde entfernt. Es wurde die Möglichkeit implementiert, Bitmaps über OpenGL mit Hilfe eines hardwarebeschleunigten OpenGL-Runtimes zu rendern.
- Integration mit dem Desktop
- Im Driver winewayland.drv, der die Verwendung von Wine in Umgebungen auf Basis des Wayland-Protokolls ohne XWayland und X11-Komponenten ermöglicht, wurde Unterstützung für die Zwischenablage, Eingabemethoden, unregelmäßige Fenster und Transparenz implementiert.
- Die Integration mit X11 wurde verbessert: Anfragen zur Aktivierung von Fenstern werden nun an den Fenstermanager gesendet, und das EWMH-Protokoll wurde aktiviert, um den Zustand aktiver Fenster zwischen X11 und Win32 zu synchronisieren.
- Die Unterstützung für den exklusiven Vollbildmodus wurde implementiert. Die Unterstützung des Vollbildmodus in D3D wurde verbessert, und die Leistung alter Spiele auf Basis von DDraw wurde optimiert.
- Die Leistung bestimmter Fensterfunktionen wurde gesteigert. Für die Interaktion zwischen Prozessen wurde Shared Memory eingesetzt.
- Direct3D
- In Direct3D 11 wurde die Unterstützung für hardwarebeschleunigtes Dekodieren von Videos im H.264-Format implementiert, realisiert durch die Vulkan-API.
- In Direct3D 11 wurde die Unterstützung für Minmax-Texturfilterung unter Verwendung der OpenGL-Erweiterung GL_ARB_texture_filter_minmax oder der Vulkan-Erweiterung VK_EXT_sampler_filter_minmax implementiert.
- In Direct3D 11 wurden Funktionen zum Laden von Texturen realisiert.
- Eine größere Palette von Direct3D-Funktionen beim Rendern über Vulkan wurde implementiert, darunter Vertex-Mischung, Flat Shading, benutzerdefinierte Clipping-Ebenen und verschiedene Ressourcenformate.
- In der integrierten Version von vkd3d-shader wurde die Unterstützung für Shadermodelle 1, 2 und 3 verbessert.
- In der Methode D3DXSaveSurfaceToFileInMemory wurde die Unterstützung für die Formate PNG, JPEG und BMP implementiert.
- In Direct3D 10 und 11 wurde die Unterstützung für die Komprimierung und Dekomprimierung der Formate BC4 und BC5 sowie die Generierung von MIP-Ebenen (MipMap) beim Laden von Texturen implementiert.
- Die Methoden ID3DXEffect::SetRawValue() und ID3DXSkinInfo::UpdateSkinnedMesh() wurden implementiert.
- Eingabegeräte
- Die Kompatibilität mit Joysticks wurde durch die Verwendung des hidraw-Backends verbessert.
- Die Unterstützung für das Vibrieren (Force Feedback) bei der Verwendung von Spielrädern und Joysticks wurde verbessert.
- Die Unterstützung von Gamepads in der API Windows.Gaming.Input sowie bei der Verwendung des evdev-Backends wurde verbessert.
- Im Applet zur Steuerung von Spielcontrollern wurde eine Registerkarte zur Konfiguration der API Windows.Gaming.Input hinzugefügt.
- Die Kompatibilität von DirectInput mit älteren Spielen wurde erhöht.
- Bluetooth
- Im Bluetooth-Treiber wurde die Möglichkeit zum Scannen, Einrichten von Entdeckungen und Koppeln von Geräten hinzugefügt.
- Die Unterstützung für Bluetooth Low Energy-Dienste wurde hinzugefügt.
- Anwendungen wurde die Möglichkeit gegeben, niedrigstufige RFCOMM-Verbindungen mit externen Geräten über die Winsock-API zu erstellen.
- Unterstützung für Scanner
- Die Unterstützung für die API TWAIN 2.0, die den Zugriff auf Scanner aus 64-Bit-Anwendungen ermöglicht, wurde implementiert.
- Die Unterstützung für die Komponente DAT_IMAGENATIVEXFER wurde implementiert, um Bilder von Scannern an Anwendungen zu übertragen.
- Die Auswahl des Scanners und der Scannereinstellungen wird im Registrierungsdatenbank gespeichert.
- Die Unterstützung für das Scannen mehrerer Seiten und die automatische Zuführung von Dokumenten wurde hinzugefügt.
- Die Blockierung der Anwendung während des Aufrufs der Scan-Schnittstelle wurde beendet.
- Die Unterstützung für das Laden der nativen Windows-Treiber für Scanner wurde hinzugefügt.
- Internationalisierung
- Die Generierung einer DB für Locales im Format locale.nls aus der Unicode CLDR-Datenbank (Unicode Common Locale Data Repository) Version 48 wurde sichergestellt. Unterstützung für zusätzliche Locales bua-RU, bqi-IR, cop-EG, ht-HT, kek-GT, lzz-TR, mww-Hmnp-US, oka-CA, pi-Latn-GB, pms-IT, sgs-LT, suz-Deva-NP und suz-Sunu-NP wurde hinzugefügt.
- Die Unicode-Zeichentabellen wurden auf die Standards Version 17.0.0 aktualisiert. Die Zeitzonendatenbank wurde aktualisiert.
- Netzwerkfähigkeiten
- Im MSHTML-Engine wurde im Modus der Standardkonformität die Arbeit mit den Attributen von Elementen als vollwertige DOM-Knoten sichergestellt. Die Objekte DOMParser, XDomainRequest und msCrypto wurden implementiert.
- In JavaScript wurde die Unterstützung für typisierte Arrays hinzugefügt.
- Für ICMPv6 wurde der Befehl ping implementiert.
- Datenbank
- In der MSADO-Bibliothek (ActiveX Data Objects) wurde die Unterstützung für das Schreiben von Änderungen in die Datenbank hinzugefügt. Die meisten Funktionen des Recordset-Objekts wurden implementiert.
- In der Bibliothek odbc32 wurde die Unterstützung für ANSI win32-Treiber, die nicht für die Arbeit mit Unicode ausgelegt sind, verbessert. Die Funktionen SQLDriverConnectA(), SQLSpecialColumnsW(), SQLGetInfoW(), SQLGetInfoW(), SQLStatisticsW() und QLColumnsW() wurden implementiert.
- Eingebettete Anwendungen
- In WineCfg wurde eine Registerkarte zur Konfiguration des standardmäßigen MIDI-Geräts hinzugefügt.
- Das cmd-Tool unterstützt jetzt die automatische Vervollständigung von Dateinamen im interaktiven Modus, ermöglicht komplexe Befehle und implementiert den Befehl „mklink /j“ zur Erstellung eines Reparse Points.
- Im Tool conhost (Console Hosting) wurde die Unterstützung für die Historie durch Drücken der Tasten F1 und F3 hinzugefügt.
- Die Befehle timeout, runas und subst wurden implementiert.
- Im Tool find wurden die Optionen „/c“ zur Anzeige der Anzahl der Übereinstimmungen und „/i“ für die Groß-/Kleinschreibung ignorierende Übereinstimmungen hinzugefügt.
- Im Tool whoami wurde die Möglichkeit zur Anpassung des Ausgabeformats hinzugefügt.
- Verschiedenes
- Im WIDL (Wine Interface Definition Language) wurde die Unterstützung für die Generierung von Windows Runtime (WinRT)-Metadaten hinzugefügt. Es wird die Generierung und Installation von WinMD-Dateien (Windows Metadata) für die WinRT-API (Windows Runtime) ermöglicht.
- Im Tool winedump wurde die Unterstützung für das Dumpen von MUI-Ressourcen, Systemaufrufnummern, eingebetteten NE-Modulen und großen PDB-Dateien (> 4 GB) hinzugefügt.
- Es wurde ein Refactoring der Common Control-Implementierung durchgeführt, die COMCTL32-Bibliothek wurde in separate Module für die Versionen 5 und 6 aufgeteilt.
- In BCrypt wurde die Unterstützung für den PBKDF2-Schlüsselberstellungsstandard hinzugefügt.
- Die Verzeichnisse UserProgramFiles, AccountPictures und Screenshots wurden unterstützt.
- In das Paket wurden die Bibliotheken LLVM Compiler-RT 8.0.1 und TomCrypt 1.18.2 integriert. Zur CPU-Erkennung auf der FreeBSD-Plattform wurde die HwLoc-Bibliothek verwendet.
- Die Komponenten Vkd3d 1.18, Faudio 25.12, FluidSynth 2.4.2, LCMS2 2.17, LibMPG123 1.33.0, Libpng 1.6.51, LibTiff 4.7.1, LibXml2 2.12.10 und LibXslt 1.1.43 wurden auf neue Versionen aktualisiert.
Quelle: opennet.ru
