Dopo un anno di sviluppo e 26 versioni sperimentali, è stato rilasciato Wine 9.0, una realizzazione aperta dell'API Win32, che comprende oltre 7000 modifiche. Tra i principali traguardi 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 il supporto di 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 impostazioni aggiuntive e DLL esterne. Per 3943 programmi (un anno fa 3888, due anni fa 3813, tre anni fa 3703) si riscontrano piccoli problemi di funzionamento, che non ostacolano l'uso delle funzioni principali delle applicazioni.
Novità principali di Wine 9.0:
- È stato aggiunto il driver winewayland.drv, che consente di utilizzare Wine in ambienti basati sul protocollo Wayland senza utilizzare XWayland e componenti X11. Lo sviluppo è mirato a garantire il funzionamento di un ambiente Wayland pulito con supporto per l'esecuzione di applicazioni Windows, senza dover installare pacchetti legati a X11, cosa che permette di ottenere prestazioni e reattività superiori nei giochi grazie all'eliminazione di strati superflui. L'uso dell'ambiente Wayland puro per Wine consente anche di evitare i problemi di sicurezza associati a X11 (ad esempio, giochi non fidati per X11 possono disturbare altre applicazioni poiché il protocollo X11 consente di accedere a tutti gli eventi di input e di effettuare sostituzioni di pressioni dei tasti fittizie).
Il driver è contrassegnato come sperimentale e in fase di sviluppo, ma è già dotato di supporto per molte funzionalità, come gestione delle finestre, supporto per più monitor, supporto per la scalabilità su schermi ad alta densità di pixel (high-DPI), tracciamento delle coordinate relative nei movimenti del mouse e supporto per l'API grafica Vulkan. Per impostazione predefinita, il driver non è attivo e per attivarlo è necessario aggiungere "wayland" alla chiave di registro "HKCU\Software\Wine\Drivers" e assicurarsi che la variabile di ambiente DISPLAY non sia impostata: wine reg.exe add HKCU\\Software\\Wine\\Drivers /v Graphics /d x11,wayland
- È stata completata la traduzione di tutti i moduli all'interfaccia delle chiamate di sistema NT, anziché effettuare chiamate dirette tra i livelli PE e Unix, segnando il completamento di un lungo lavoro di traduzione di tutte le librerie DLL per l'uso del formato dei file eseguibili PE (Portable Executable).
- È proseguito lo sviluppo del layer WoW64 (Windows-on-Windows a 64 bit), che consente 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 implementati i convertitori delle chiamate di sistema WoW64 (thunk), che consentono ai moduli a 32 bit in formato PE di accedere alle librerie Unix a 64 bit.
È stato migliorato un nuovo regime di avvio per WoW64, in cui il codice a 32 bit viene eseguito all'interno di un processo a 64 bit (nel vecchio regime WoW64, le applicazioni a 32 bit venivano avviate in processi Unix a 32 bit). È stato aggiunto il supporto per l'uso del nuovo regime WoW64 sulla piattaforma macOS. Poiché nel nuovo regime WoW64 ci sono alcune mancanze, come la mancanza di supporto per la modalità a 16 bit e la diminuzione delle prestazioni di OpenGL a causa dell'assenza di supporto per l'estensione ARB_buffer_storage, attualmente non è abilitato per impostazione predefinita e richiede la compilazione con l'opzione "—enable-archs=i386,x86_64" nello script di configurazione.
- È stata aggiunta la possibilità di eseguire file eseguibili Windows esistenti su sistemi con architettura ARM64. È stata implementata la possibilità di costruire Wine per ABI ARM64EC (ARM64 Emulation Compatible) e il supporto per il caricamento di moduli ARM64EC, utilizzati per semplificare il porting di applicazioni scritte originariamente per l'architettura x86_64 sui sistemi ARM64, offrendo la possibilità di eseguire in un ambiente ARM64 moduli specifici con codice x86_64 utilizzando un emulatore. È stato aggiunto il supporto per il formato dei file PE ARM64X, che consente di caricare un unico file eseguibile nei processi x64/Arm64EC e ARM64. È stata implementata un'interfaccia per l'emulazione dei sistemi x86 a 32 bit, ma la libreria con l'emulatore non è ancora inclusa nella versione principale di Wine (per eseguire codice x86 in un ambiente ARM64 è possibile utilizzare un emulatore esterno FEX).
- Sottosistema grafico
- Il driver PostScript è stato riprogettato per supportare file spool nel formato Windows, in cui vengono memorizzati i dati sui lavori di stampa. Sono state escluse le chiamate dirette al driver dall'ambiente Unix.
- Nelle interfacce grafiche WinRT è stato aggiunto il supporto per la modalità scura. In WineCfg è stata aggiunta un'impostazione per abilitare l'interfaccia con tema scuro.
- Nel driver per l'API grafica 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, permettendo di aumentare le prestazioni nella gestione della grafica.
- Direct3D
- È stata implementata la sospensione dell'analisi del flusso di comandi multi-thread in assenza di comandi di rendering da elaborare, riducendo così il consumo energetico a un livello di elaborazione mono-thread durante l'esecuzione di programmi che non occupano tutta la larghezza di banda del flusso di comandi.
- In Direct3D 10 è stata implementata la supporto per effetti aggiuntivi.
- Sono state apportate ottimizzazioni delle prestazioni nel codice di WineD3D e nel backend che utilizza l'API grafica Vulkan.
- Nel codice di rendering basato sull'API Vulkan è stata aggiunta una verifica delle capacità supportate dal dispositivo, con la comunicazione all'applicazione delle informazioni sul livello funzionale disponibile di Direct3D.
- Sono state implementate le funzioni D3DXFillTextureTX e D3DXFillCubeTextureTX.
- Nel backend classico degli shader OpenGL ARB è stata aggiunta la supporto per la definizione delle ombre tramite l'estensione ARB_fragment_program_shadow.
- Nelle funzioni D3DXLoadMeshHierarchyFromX e simili è stata aggiunta la supporto per il caricamento di dati personalizzati tramite l'interfaccia ID3DXLoadUserData.
- Audio e video
- È stata proposta una implementazione iniziale dell'API DirectMusic. È stata aggiunta la supporto per collezioni, strumenti e campioni audio in formato SoundFont. È stata aggiunta 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'utilizzo nell'API DirectMusic è stata integrata la libreria FluidSynth.
- È stata implementata la supporto per il caricamento di font audio (SoundFont - formati per il campionamento utilizzati per la riproduzione di file MIDI) nei formati DLS1 e DLS2, nonché nel formato SF2, utilizzato in Linux.
- È stata aggiunta la possibilità di riprodurre contenuti MIDI tramite la libreria dmsynth, utilizzando il sintetizzatore software FluidSynth e l'API DirectSound per l'output audio.
- È stato aggiunto un decodificatore per video nel formato del codec video Indeo IV50.
- DirectShow
- È stato implementato un componente DMO (DirectX Media Object) con un decodificatore per il formato WMV (Windows Media Video).
- È stato aggiunto un filtro di acquisizione audio (DirectShow Audio Capture Filter).
- Nel filtro di separazione dei flussi MPEG‑1 (DirectShow MPEG‑1 Stream Splitter) è stata aggiunta la supporto per i flussi video e i flussi di servizio, insieme ai flussi audio.
- È stato implementato un filtro per la decodifica di video nel formato MPEG‑1 (DirectShow MPEG‑1 Video Decoder).
- Dispositivi di input
- In DirectInput è stata implementata la supporto per la mappatura delle azioni (action maps), che consente di associare i pulsanti del controller di gioco a specifiche azioni nei giochi.
- Integrazione con il desktop
- È stata garantita l'esportazione nell'ambiente utente principale delle associazioni, che consentono di avviare applicazioni gestite da Wine come gestori di protocolli all'apertura degli URL (ad esempio, avviare spotify.exe all'apertura di link del tipo «spotify:user:spotify:playlist:848218482355482821»).
- È stata implementata l'estrazione dei dati EDID (Extended Display Identification Data) con informazioni sulle caratteristiche del monitor collegato, come il nome e il modello del dispositivo.
- È stata fornita la possibilità di chiudere la finestra del desktop, estesa in modalità a schermo intero, utilizzando il pulsante «Exit desktop» nel menu «Start».
- Internazionalizzazione
- È stata ampliata la supporto per IME (Input Method Editors). Sono stati effettuati lavori per garantire la compatibilità con le implementazioni nativo di Windows degli IME e migliorare l'integrazione con gli IME di Linux.
- È stata garantita la generazione del database delle localizzazioni nel formato locale.nls dal database Unicode CLDR (Unicode Common Locale Data Repository) versione 44. È stato aggiunto il supporto per ulteriori localizzazioni bew-ID, blo-BJ, csw-CA, ie-EE, mic-CA, prg-PL, skr-PK, tyv-RU, vmw-MZ, xnr-IN e za-CN.
- È stata tradotta l'interfaccia nella lingua georgiana. Sono state fornite traduzioni complete per 16 lingue, e parziali per 31 lingue.
- Le tabelle dei caratteri Unicode sono state aggiornate alla versione 15.1.0. È stato aggiornato il database dei fusi orari.
- Nucleo (interfacce del kernel Windows)
- Come versione di Windows emessa per impostazione predefinita è stata identificata 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 un heap scarsamente frammentato (LFH, Low Fragmentation Heap), che ha permesso di aumentare le prestazioni delle operazioni di allocazione della memoria.
- Nel meccanismo di allocazione della memoria virtuale è stata aggiunta la supporto per la riservazione della memoria (placeholder), consentendo all’applicazione di riservare un’area specifica di memoria virtuale per un uso futuro.
- I loader a 64 bit (loader e preloader) per file eseguibili e librerie sono stati compilati nel formato PIE (Position-Independent Executables) per liberare parte dello spazio di indirizzo a 32 bit.
- È stata garantita una corretta esecuzione dello srotolamento dello stack (stack unwinding) per le chiamate di sistema NT e le chiamate di callback utente.
- Funzionalità di rete
- Nel motore MSHTML è stata implementata la supporto per il meccanismo di garbage collection «Cycle Collection».
- In MSHTML è stata aggiunta la supporto per la modalità di elaborazione sincrona delle richieste XMLHttpRequest.
- In jscript.dll è stata aggiunta la supporto per l'oggetto WeakMap per lavorare con una collezione di coppie chiave/valore, in cui la chiave è un oggetto al quale può essere associato un valore arbitrario. Sono stati implementati i metodi WeakMap.get(), WeakMap.delete(), WeakMap.clear() e WeakMap.has().
- Il motore del browser Gecko è stato aggiornato alla versione 2.47.4.
- È stata implementata la supporto per le notifiche di cambiamento dello stato dell'interfaccia di rete.
- Crittografia e sicurezza
- Nella libreria Winscard.dll è stato aggiunto il supporto per le smart card, implementato tramite la libreria di sistema PCSClite.
- In BCrypt è stato aggiunto il supporto per il protocollo di scambio delle chiavi Diffie-Hellman.
- È stato implementato il pacchetto Negotiate, che fornisce uno strato per l'uso dell'interfaccia SSPI (Security Support Provider Interface) per accedere ai fornitori SSP (Security Support Provider).
- Applicazioni integrate
- Nel debugger di Wine Debugger (winedbg) per il disassemblaggio delle istruzioni macchina X86 è stata coinvolta la libreria Zydis.
- Nell'interfaccia WineCfg è stata aggiunta la possibilità di impostare versioni precedenti di Windows (fino a XP) su piattaforme a 64 bit, permettendo l'esecuzione di applicazioni obsolete utilizzando la modalità WoW64.
- In tutte le applicazioni grafiche integrate è stato implementato il rilascio di informazioni sugli errori in una finestra di dialogo separata, anziché mostrarli nella console.
- Nel programma systeminfo è stato garantito che vengano mostrati i dati dal DB WMI (Windows Management Instrumentation).
- È stata aggiunta l'applicazione klist per visualizzare i biglietti Kerberos.
- Nell'applicazione taskkill è stata implementata la possibilità di terminare forzatamente i processi figli.
- 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 un'implementazione di base dell'applicazione findstr.
- Strumenti per sviluppatori
- Nell'utilità WineDump è stata implementata la possibilità di visualizzare il contenuto dei file di registro di Windows (formato REGF), nonché di mostrare i dati per tutte le architetture (x86/ARM64) supportate nei file PE ibridi.
- Nel compilatore IDL è stata aggiunta la 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 e non è stata utilizzata a lungo in Wine. I programmi in formato ELF compilati nelle versioni precedenti di Wine (5.0 e precedenti) con libwine.so, per essere eseguiti in Wine 9.0, richiedono una ricompilazione.
- Librerie integrate e dipendenze esterne
- Sono integrate le librerie FluidSynth 2.3.3, Musl 1.2.3 (solo funzioni matematiche) e Zydis 4.0.0.
- Aggiornati alla nuova versione 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 l'implementazione della piattaforma .NET è stato aggiornato alla versione 8.1.0.
- Nel driver winewayland.drv, sono utilizzate come dipendenze esterne la libreria client Wayland, insieme alle librerie xkbcommon e xkbregistry.
- Per supportare le smart card, viene utilizzata la libreria esterna PCSClite (su macOS — PCSC).
- Per la compilazione di file PE su piattaforme diverse da i386, ora è necessario avere un cross-compilatore che supporti le direttive «.seh» per la gestione delle eccezioni.
Fonte: opennet.ru
