Dopo un anno di sviluppo e 26 versioni sperimentali, è stata presentata la versione stabile dell'implementazione open source dell'API Win32 — Wine 9.0, che include oltre 7000 modifiche. Tra i risultati principali della nuova versione, spicca l'implementazione dell'architettura WoW64 per eseguire programmi a 32 bit in un ambiente a 64 bit, l'integrazione di un driver per supportare Wayland, il supporto per l'architettura ARM64, l'implementazione dell'API DirectMusic e il supporto per le smart card.
In Wine è confermato il corretto funzionamento di 5336 programmi (un anno fa 5266, due anni fa 5156, tre anni fa 5049) per Windows, mentre altri 4397 (un anno fa 4370, due anni fa 4312, tre anni fa 4227) funzionano perfettamente con configurazioni aggiuntive e DLL esterne. Sono presenti piccoli problemi in 3943 programmi (un anno fa 3888, due anni fa 3813, tre anni fa 3703), ma questi non ostacolano l'utilizzo delle funzioni principali delle applicazioni.
Novità principali di Wine 9.0:
- Aggiunto il driver winewayland.drv, che consente di utilizzare Wine in ambienti basati sul protocollo Wayland senza l'uso di XWayland e componenti X11. Lo sviluppo mira a garantire il funzionamento di un ambiente Wayland puro con supporto per l'esecuzione di applicazioni Windows, che non richiede l'installazione di pacchetti legati a X11, migliorando così le prestazioni e la reattività dei giochi grazie all'esclusione di strati aggiuntivi. L'uso di un ambiente Wayland puro per Wine permette anche di eliminare i problemi di sicurezza tipici di X11 (ad esempio, giochi non fidati per X11 possono spiare altre applicazioni, poiché il protocollo X11 consente l'accesso a tutti gli eventi di input e l'inserimento di pressioni di tasti simulate).
Il driver è etichettato come sperimentale e in sviluppo; tuttavia, include già il supporto per molte funzionalità, come gestione delle finestre, funzionalità multi-monitor, supporto per scaling su schermi ad alta densità (high-DPI), utilizzo di coordinate relative per la traccia del movimento del mouse e supporto per l'API grafica Vulkan. Per default, il driver non è attivato e per attivarlo è necessario aggiungere 'wayland' al valore del registro 'HKCU\Software\Wine\Drivers' e assicurarsi che la variabile d'ambiente DISPLAY non sia impostata: wine reg.exe add HKCU\\Software\\Wine\\Drivers /v Graphics /d x11,wayland
- Effettuata la transizione di tutti i moduli all'interfaccia delle chiamate di sistema NT, piuttosto che effettuare chiamate dirette tra i livelli PE e Unix, segnando la conclusione di un lungo lavoro di transizione di tutte le librerie DLL all'uso del formato dei file eseguibili PE (Portable Executable).
- Continuato lo sviluppo del layer WoW64 (Windows-on-Windows a 64 bit), permettendo di eseguire applicazioni Windows a 32 bit in sistemi Unix a 64 bit. In tutti i moduli che interagiscono con le librerie Unix, sono stati utilizzati convertitori di chiamate di sistema WoW64 (thunk), che consentono ai moduli a 32 bit in formato PE di interagire con le librerie Unix a 64 bit.
Migliorato il nuovo modo di avvio WoW64, dove il codice a 32 bit è eseguito all'interno di un processo a 64 bit (nel vecchio modo WoW64, le applicazioni a 32 bit venivano eseguite in processi Unix a 32 bit). È stato aggiunto il supporto per l'uso del nuovo modo WoW64 sulla piattaforma macOS. Poiché nel nuovo modo WoW64 sono presenti alcuni difetti, come l'assenza di supporto per il modo a 16 bit e la diminuzione delle performance OpenGL a causa della mancanza di supporto per l'estensione ARB_buffer_storage, esso non è attivato di default e richiede una build con l'opzione '--enable-archs=i386,x86_64' nello script di configurazione.
- Aggiunta la capacità di eseguire file eseguibili Windows esistenti su sistemi con architettura ARM64. Implementata la possibilità di compilare Wine per ABI ARM64EC (ARM64 Emulation Compatible) e supporto per il caricamento di moduli ARM64EC, utilizzati per semplificare il porting su sistemi ARM64 di applicazioni originalmente scritte per architetture x86_64, consentendo l'esecuzione in ambiente ARM64 di singoli moduli con codice x86_64 tramite un emulatore. Aggiunto il supporto per il formato PE dei file ARM64X, che consente di caricare un file eseguibile unico in processi x64/Arm64EC e ARM64. Implementata un'interfaccia per emulare sistemi a 32 bit x86, ma la libreria con l'emulatore non è ancora inclusa nel pacchetto principale di Wine (per eseguire codice x86 in ambiente ARM64, si può utilizzare un emulatore esterno come FEX).
- Sottosistema grafico
- Il driver PostScript è stato riprogettato per supportare i file di spool in formato Windows, in cui sono memorizzati i dati sui lavori di stampa. Esclusi accessi diretti al driver dall'ambiente Unix.
- Nei temi di WinRT è stato aggiunto il supporto per la modalità scura. In WineCfg è stata aggiunta un'impostazione per attivare il tema scuro dell'interfaccia.
- Nel driver per l'API grafico Vulkan è stata aggiunta la supporto per la specifica Vulkan 1.3.272 (in Wine 8.0 era supportato 1.3.237).
- Sono state ottimizzate le funzioni della libreria GdiPlus, aumentando le prestazioni nella gestione grafica.
- Direct3D
- È stata garantita la sospensione dell'analisi dei flussi di comando multithread in assenza di comandi di rendering elaborati, riducendo il consumo energetico a livelli di elaborazione monothread durante l'esecuzione di programmi che non impegnano tutta la larghezza di banda del flusso di comandi.
- In Direct3D 10 è stata implementata la supporto per effetti aggiuntivi.
- Ottimizzazioni delle prestazioni sono state apportate al codice WineD3D e al backend che utilizza l'API grafica Vulkan.
- Nel codice di rendering basato sull'API Vulkan è stata aggiunta una verifica delle capacità supportate dal dispositivo, insieme alla visualizzazione delle informazioni sull'level di funzionalità Direct3D disponibile all'applicazione.
- Sono state implementate le funzioni D3DXFillTextureTX e D3DXFillCubeTextureTX.
- Nel backend classico degli shader OpenGL ARB è stata aggiunta la supporto per la definizione delle ombre mediante l'estensione ARB_fragment_program_shadow.
- In D3DXLoadMeshHierarchyFromX e funzioni simili è stata aggiunta la supporto per il caricamento di dati personalizzati utilizzando l'interfaccia ID3DXLoadUserData.
- Audio e video
- È stata proposta una implementazione iniziale dell'API DirectMusic. È stata aggiunta la supporto per collezioni, strumenti e campioni sonori in formato SoundFont. È stata introdotta la supporto per l'effetto Doppler. Sono stati implementati test per verificare la correttezza dell'implementazione con il sequencer dmime e il sintetizzatore MIDI dmsynth.
- Per l'uso nell'API DirectMusic è stata integrata la libreria FluidSynth.
- È stata implementata la supporto per il caricamento di soundfonts (formati per sintesi basati su campioni utilizzati per la riproduzione di file MIDI) nei formati DLS1 e DLS2, oltre che nel formato SF2, utilizzato in Linux.
- È stata aggiunta la possibilità di riprodurre contenuti MIDI utilizzando la libreria dmsynth, sfruttando il sintetizzatore software FluidSynth e l'API DirectSound per l'uscita audio.
- È stato aggiunto un decoder per video in formato video codec Indeo IV50.
- DirectShow
- È stato realizzato un componente DMO (DirectX Media Object) con decoder per il formato WMV (Windows Media Video).
- È stato aggiunto un filtro per la cattura audio (DirectShow Audio Capture Filter).
- Nel filtro per la separazione dei flussi MPEG‑1 (DirectShow MPEG‑1 Stream Splitter) è stata aggiunta la supporto per i flussi video e i flussi di servizio, oltre ai flussi audio.
- È stato realizzato un filtro per decodificare video in formato MPEG‑1 (DirectShow MPEG‑1 Video Decoder).
- Dispositivi di input
- In DirectInput è stata implementata la supporto per il mapping delle azioni (action maps), che consentono di legare i pulsanti del controller di gioco a determinate azioni nei giochi.
- Integrazione con il desktop
- È stata garantita l'esportazione in ambiente utente principale delle associazioni che consentono di avviare applicazioni gestite da Wine come gestori di protocolli all'apertura di URL (ad esempio, avvio di spotify.exe all'apertura di link come 'spotify:user:spotify:playlist:848218482355482821').
- È stata implementata l'estrazione dei dati EDID (Extended Display Identification Data) con informazioni sui parametri del monitor connesso, come nome e modello del dispositivo.
- È stata fornita la possibilità di chiudere la finestra del desktop espanso in modalità a schermo intero, utilizzando il pulsante 'Exit desktop' nel menu 'Start'.
- Internazionalizzazione
- È stata ampliata la supporto per gli IME (Input Method Editors). Sono stati fatti progressi per garantire la compatibilità con le implementazioni native di Windows per gli IME e migliorare l'integrazione con gli IME di Linux.
- È stata generata una database di localizzazioni nel formato locale.nls dall'database Unicode CLDR (Unicode Common Locale Data Repository) versione 44. È stata aggiunta la supporto per localizzazioni aggiuntive bew-ID, blo-BJ, csw-CA, ie-EE, mic-CA, prg-PL, skr-PK, tyv-RU, vmw-MZ, xnr-IN e za-CN.
- È stata eseguita la traduzione dell'interfaccia in lingua georgiana. Sono state assicurate traduzioni complete per 16 lingue e parziali per 31 lingue.
- Le tabelle dei simboli Unicode sono state aggiornate alla versione dello standard 15.1.0. È stato aggiornato il database dei fusi orari.
- Nucleo (interfacce di core di Windows)
- La versione di Windows di default è stata definita come Windows 10.
- Per i file eseguibili in formato PE è stata implementata la supporto per la randomizzazione dello spazio degli indirizzi (ASLR), ma gli indirizzi di caricamento del codice in memoria non sono ancora completamente randomizzati.
- È stata implementata la supporto per heaps debolmente frammentate (LFH, Low Fragmentation Heap), aumentando le prestazioni delle operazioni di allocazione della memoria.
- Nel meccanismo di allocazione della memoria virtuale è stata aggiunta la supporto per la prenotazione della memoria (placeholder), consentendo all'applicazione di riservare un'area specifica di memoria virtuale per un uso futuro.
- I caricatori a 64 bit (loader e preloader) di file eseguibili e librerie sono stati compilati nel formato PIE (Position-Independent Executables) per liberare parte dello spazio degli indirizzi a 32 bit.
- È stata garantita una corretta liberazione dello stack (stack unwinding) per le chiamate di sistema NT e le callback degli utenti.
- Funzionalità di rete
- Nel motore MSHTML è stata implementata la supporto per il meccanismo di raccolta dei rifiuti 'Cycle Collection'.
- In MSHTML è stata aggiunta la supporto per la modalità sincrona di elaborazione delle richieste XMLHttpRequest.
- In jscript.dll è stato aggiunto il supporto per l'oggetto WeakMap, che gestisce una collezione di coppie chiave/valore, dove la chiave è un oggetto a cui può essere associato un valore arbitrario. Sono stati implementati i metodi WeakMap.get(), WeakMap.delete(), WeakMap.clear() e WeakMap.has().
- Il motore browser Gecko è stato aggiornato alla versione 2.47.4.
- È stata implementata la supporto per le notifiche sui cambiamenti dello stato dell'interfaccia di rete.
- Crittografia e sicurezza
- Nella libreria Winscard.dll è stato aggiunto il supporto per le smart card, implementato attraverso la libreria di sistema PCSClite.
- In BCrypt è stata aggiunta la supporto per il protocollo di scambio chiavi Diffie-Hellman.
- È stato implementato il pacchetto Negotiate, che fornisce uno strato per utilizzare l'interfaccia SSPI (Security Support Provider Interface) per interagire con i provider SSP (Security Support Provider).
- Applicazioni integrate
- Nel debugger Wine Debugger (winedbg) per il disassemblaggio delle istruzioni macchina X86 è stata utilizzata la libreria Zydis.
- Nell'interfaccia WineCfg è stata aggiunta la possibilità di impostare versioni obsolete di Windows (fino a XP) su piattaforme a 64 bit, consentendo di eseguire applicazioni obsolete utilizzando la modalità WoW64.
- Tutte le applicazioni grafiche integrate ora mostrano le informazioni sugli errori in una finestra separata invece di visualizzarle nella console.
- Nel programma systeminfo è stata fornita la visualizzazione delle informazioni dal DB WMI (Windows Management Instrumentation).
- È stata aggiunta l'applicazione klist per visualizzare i ticket Kerberos.
- Nell'applicazione taskkill è stata implementata la possibilità di terminare forzatamente i processi figlio.
- Nell'utilità start è stato aggiunto il parametro "/machine" per scegliere l'architettura da utilizzare durante l'avvio di file eseguibili ibridi che supportano x86 e ARM.
- È stata implementata la maggior parte delle funzionalità del programma tasklist.
- È stata aggiunta una implementazione di base dell'applicazione findstr.
- Strumenti per lo sviluppo
- Nell'utilità WineDump è stata implementata la possibilità di visualizzare il contenuto dei file di registro di Windows (formato REGF) e di mostrare dati per tutte le architetture (x86/ARM64) supportate nei file PE ibridi.
- Nel compilatore IDL è stato aggiunto il supporto per gli attributi "composable", "default_overload", "deprecated" e "protected".
- È stata rimossa la libreria libwine.so, che era stata dichiarata obsoleta nella versione Wine 6.0 ed era già inutilizzata in Wine. I programmi in formato ELF compilati con le vecchie versioni di Wine (5.0 e precedenti) con libwine.so richiedono una ricompilazione per essere eseguiti in Wine 9.0.
- Librerie integrate e dipendenze esterne
- Sono state integrate le librerie FluidSynth 2.3.3, Musl 1.2.3 (solo funzioni matematiche) e Zydis 4.0.0.
- Aggiornati a nuove versioni i componenti 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 e Zlib 1.3. Il motore Wine Mono, con implementazione della piattaforma .NET, è stato aggiornato alla versione 8.1.0.
- Nel driver winewayland.drv sono state utilizzate come dipendenze esterne la libreria client Wayland, oltre alle librerie xkbcommon e xkbregistry.
- Per supportare le smart card è stata utilizzata la libreria esterna PCSClite (in macOS — PCSC).
- Per compilare file PE su piattaforme diverse da i386 è ora necessario avere un compilatore cross con supporto per le direttive ".seh" per la gestione delle eccezioni.
Fonte: opennet.ru
