Dopo un anno di sviluppo e 30 versioni sperimentali, è stato presentato il rilascio stabile dell'implementazione open source dell'API Win32 – Wine 7.0, che include oltre 9100 modifiche. Tra i principali risultati della nuova versione c'è il porting della maggior parte dei moduli di Wine nel formato PE, il supporto per temi, l'espansione dello stack per joystick e dispositivi di input con interfaccia HID, e l'implementazione dell'architettura WoW64 per eseguire programmi a 32 bit in un ambiente a 64 bit.
Wine supporta ora l'esecuzione completa di 5156 programmi (rispetto ai 5049 di un anno fa) per Windows, altri 4312 (rispetto ai 4227 di un anno fa) funzionano perfettamente con configurazioni aggiuntive e DLL esterne. Ci sono piccole problematiche operative con 3813 programmi (rispetto ai 3703 di un anno fa), che non ostacolano l'uso delle funzioni principali delle applicazioni.
Novità principali in Wine 7.0:
- Moduli in formato PE
- Quasi tutte le librerie DLL sono state convertite per utilizzare il formato dei file eseguibili PE (Portable Executable, utilizzato in Windows) anziché ELF. L'uso del formato PE risolve problemi di compatibilità con vari schemi di protezione dalla copia, che verificano l'identità dei moduli di sistema sul disco e in memoria.
- È stata implementata la possibilità di interazione dei moduli PE con le librerie Unix utilizzando la chiamata di sistema standard del kernel NT, permettendo di nascondere l'accesso al codice Unix dai debugger di Windows e monitorare la registrazione dei thread.
- Le DLL incorporate ora vengono caricate solo se è presente sul disco il file corrispondente nel formato PE, indipendentemente dal fatto che si tratti di una vera libreria o di un mockup. Questa modifica consente all'applicazione di vedere sempre un binding corretto ai file PE. Per disattivare questo comportamento, è possibile utilizzare la variabile d'ambiente WINEBOOTSTRAPMODE.
- WoW64
- È stata implementata l'architettura WoW64 (Windows-on-Windows a 64 bit), che consente di eseguire applicazioni Windows a 32 bit in processi Unix a 64 bit. Il supporto è stato realizzato tramite un layer che traduce le chiamate di sistema NT a 32 bit in richieste a 64 bit verso NTDLL.
- I layer WoW64 sono stati preparati per la maggior parte delle librerie Unix e permettono ai moduli a 32 bit in formato PE di accedere alle librerie Unix a 64 bit. Dopo il completamento del porting di tutti i moduli nel formato PE, sarà possibile eseguire applicazioni Windows a 32 bit senza installare librerie Unix a 32 bit.
- Temi
- È stato implementato il supporto per i temi. Sono inclusi i temi "Light", "Blue" e "Classic Blue", selezionabili tramite il configuratore WineCfg.
- Aggiunta la possibilità di personalizzare l'aspetto di tutti gli elementi dell'interfaccia utente tramite temi. Garantito l'aggiornamento automatico dell'aspetto degli elementi dopo il cambio di tema.
- Tutte le applicazioni integrate in Wine hanno ora il supporto per i temi. È stata effettuata l'adattamento delle applicazioni per schermi ad alta densità di pixel (High DPI).
- Sottosistema grafico
- Aggiunta una nuova libreria Win32u, in cui sono state spostate parti delle librerie GDI32 e USER32, relative all'elaborazione grafica e alla gestione delle finestre a livello di kernel. In seguito, si inizierà a lavorare sul trasferimento in Win32u dei componenti dei driver, come winex11.drv e winemac.drv.
- Nel driver Vulkan è stato implementato il supporto per la specifica dell'API grafica Vulkan 1.2.201.
- Fornito il supporto per l'output tramite l'API Direct2D di oggetti geometrici tratteggiati, con la possibilità di verificare il colpo (hit-test).
- Nel API Direct2D è stata realizzata una prima implementazione del supporto per effetti visivi utilizzati tramite l'interfaccia ID2D1Effect.
- Nell'API Direct2D è stato aggiunto il supporto per l'interfaccia ID2D1MultiThread, utilizzata per organizzare l'accesso esclusivo alle risorse in applicazioni multithreading.
- Nel set di librerie WindowsCodecs è stato implementato il supporto per la decodifica delle immagini nel formato WMP (Windows Media Photo) e la codifica delle immagini nel formato DDS (DirectDraw Surface). È stata interrotta la codifica delle immagini nel formato ICNS (per macOS), che non è supportato in Windows.
- Direct3D
- Significativamente migliorato il nuovo motore di rendering, che effettua la traduzione delle chiamate Direct3D nell'API grafica Vulkan. Nella maggior parte dei casi, il livello di supporto per Direct3D 10 e 11 nel motore basato su Vulkan è stato portato a parità con il vecchio motore basato su OpenGL. Per abilitare il motore di rendering tramite Vulkan, è necessario impostare la variabile di registro Direct3D "renderer" su "vulkan".
- Sono state implementate molte funzionalità di Direct3D 10 e 11, inclusi i contesti differiti (Deferred Contexts), che funzionano nel contesto delle risorse degli oggetti di stato, offset costanti nei buffer, pulizia delle rappresentazioni non ordinate delle texture, copia dei dati tra le risorse in formati senza tipo (DXGI_FORMAT_BC3_TYPELESS, DXGI_FORMAT_R32G32B32A32_TYPELESS), ecc.
- È stata aggiunta la supporto per configurazioni a più monitor, permettendo di scegliere il monitor per visualizzare l'applicazione Direct3D in modalità schermo intero.
- Nell'API DXGI è stata implementata la possibilità di correzione gamma dello schermo, che può essere utilizzata dalle applicazioni basate su Direct3D 10 e 11 per modificare la luminosità dello schermo. È stata garantita l'estrazione dei contatori dei frame buffer virtuali (SwapChain).
- In Direct3D 12 è stata aggiunta la supporto per le firme radice della versione 1.1.
- Nel codice di rendering tramite l'API Vulkan è stata migliorata l'efficienza nel gestire le richieste quando il sistema supporta l'estensione VK_EXT_host_query_reset.
- È stata aggiunta la possibilità di visualizzare i frame buffer virtuali (SwapChain) tramite GDI, se OpenGL o Vulkan non possono essere utilizzati, ad esempio durante la visualizzazione in una finestra da processi diversi, come nelle applicazioni basate sul framework CEF (Chromium Embedded Framework).
- Utilizzando il backend per gli shader GLSL per le istruzioni degli shader, è stata garantita l'applicazione del modificatore «precise».
- Nell'API DirectDraw è stata aggiunta la supporto per il rendering 3D nella memoria di sistema, utilizzando dispositivi software come «RGB», «MMX» e «Ramp».
- Nella base di dati delle schede grafiche Direct3D sono state aggiunte le schede AMD Radeon RX 5500M, AMD Radeon RX 6800/6800 XT/6900 XT, AMD Van Gogh, Intel UHD Graphics 630 e NVIDIA GT 1030.
- È stata rimossa la chiave «UseGLSL» dal registro HKEY_CURRENT_USER\Software\Wine\Direct3D, invece della quale, a partire da Wine 5.0, bisogna utilizzare «shader_backend».
- Per il supporto di Direct3D 12 è ora necessaria la presenza della libreria vkd3d almeno versione 1.2.
- D3DX
- Nell'implementazione di D3DX 10 è stata migliorata la supporto per il framework degli effetti visivi e aggiunta la supporto per il formato immagini Windows Media Photo (JPEG XR).
- Sono state aggiunte le funzioni di creazione texture fornite in D3DX10, come D3DX10CreateTextureFromMemory().
- Sono stati implementati parzialmente le interfacce del programma ID3DX10Sprite e ID3DX10Font.
- Audio e video
- In un unico backend WineGStreamer sono state unite le estensioni GStreamer per DirectShow e il framework Media Foundation, il che dovrebbe semplificare lo sviluppo di nuove API per la decodifica dei contenuti.
- Sulla base del backend WineGStreamer sono stati implementati oggetti Windows Media per la lettura sincrona e asincrona.
- È continuato il lavoro sull'implementazione del framework Media Foundation, aggiunta la supporto per le funzionalità di IMFPMediaPlayer, allocatore dei campioni (sample allocator), migliorata la supporto per EVR e i buffer di rendering SAR.
- È stata rimossa la libreria wineqtdecoder, che forniva un decodificatore per il formato QuickTime (per tutti i codec ora si utilizza GStreamer).
- Dispositivi di input
- Notevolmente migliorato il supporto per i dispositivi di input che supportano il protocollo HID (Human Interface Devices), implementando funzionalità come l'analisi dei descrittori HID, la gestione dei messaggi HID e la fornitura di mini-driver HID.
- Nei backend del driver winebus.sys migliorata la traduzione delle descrizioni dei dispositivi in messaggi HID.
- Aggiunto un nuovo backend DirectInput per joystick che supportano il protocollo HID. Implementata la possibilità di utilizzare gli effetti di feedback nei joystick. Migliorata dashboard l'interazione con i joystick. Ottimizzata l'interazione con i dispositivi compatibili con XInput. In WinMM il supporto per i joystick è stato spostato su DInput, invece di utilizzare il backend evdev in Linux e IOHID in macOS. Rimosso il vecchio driver dei joystick winejoystick.drv.
- Nel modulo DInput aggiunti nuovi test basati sull'uso di dispositivi HID virtuali che non richiedono un dispositivo fisico.
- Testo e caratteri
- Nel DirectWrite aggiunto l'oggetto Font Set.
- Nel RichEdit implementata correttamente l'interfaccia TextHost.
- Nucleo (interfacce del kernel Windows)
- All'avvio di un file eseguibile non riconosciuto in Wine (ad esempio, 'wine foo.msi') ora viene chiamato start.exe, che attiva i gestori associati al tipo di file.
- Aggiunto supporto per i meccanismi di sincronizzazione NtAlertThreadByThreadId e NtWaitForAlertByThreadId, simile ai futex in Linux.
- Aggiunto supporto per gli oggetti di debug NT, utilizzati per il debugging delle funzionalità del kernel.
- Aggiunto supporto per le chiavi di registro dinamiche per memorizzare dati sulle prestazioni.
- C Runtime
- Nel C runtime implementato un insieme completo di funzioni matematiche, principalmente trasferito dalla libreria Musl.
- Per tutte le piattaforme CPU garantito un supporto corretto delle funzioni per calcoli con numeri in virgola mobile.
- Funzionalità di rete
- Migliorata la modalità di compatibilità con Internet Explorer 11 (IE11), che ora è utilizzata per impostazione predefinita per la gestione dei documenti HTML.
- Nella libreria mshtml implementato il supporto per JavaScript modalità ES6 (ECMAScript 2015), che fornisce supporto per funzionalità come l'espressione let e l'oggetto Map.
- L'installazione dei pacchetti MSI di Wine con integrazioni al motore Gecko nella directory di lavoro ora avviene all'occorrenza, e non durante l'aggiornamento di Wine.
- Aggiunto supporto per il protocollo DTLS.
- Implementato il servizio NSI (Network Store Interface), che memorizza e trasmette ad altri servizi informazioni sul routing e sulle interfacce di rete del computer.
- I gestori API WinSock, come setsockopt e getsockopt, sono stati trasferiti nella libreria NTDLL e nel driver afd.sys, per conformarsi all'architettura Windows.
- Ora nel catalogo di lavoro di Wine vengono installati file personalizzati con database di rete, come /etc/protocols e /etc/networks, invece di fare riferimento ai corrispondenti database Unix.
- Piattaforme alternative
- Aggiunto supporto per hardware Apple basato su chip ARM M1 (Apple Silicon).
- Per supportare le funzioni BCrypt e Secur32 sulla piattaforma macOS ora è richiesta l'installazione della libreria GnuTLS.
- I file eseguibili a 32 bit per piattaforme ARM ora sono compilati in modalità Thumb-2, analogamente a Windows. Per il caricamento di tali file viene utilizzato un preloader.
- Per le piattaforme ARM a 32 bit è stata implementata la gestione delle eccezioni (unwinding).
- Per FreeBSD è stato ampliato il numero di richieste supportate per le informazioni di basso livello sul sistema, come i dati sullo stato della memoria e sul livello di carica della batteria.
- Applicazioni e strumenti integrati per lo sviluppo
- Nell'utilità reg.exe è stato aggiunto il supporto per le rappresentazioni del registro a 32 e 64 bit. È stato aggiunto il supporto per la copia delle chiavi del registro.
- Nell'utilità WineDump è stata aggiunta la possibilità di esportare un dump dei metadati di Windows e mostrare informazioni dettagliate sulle registrazioni di CodeView.
- Nel debugger Wine Debugger (winedbg) è stata implementata la possibilità di eseguire il debug dei processi a 32 bit da un debugger a 64 bit.
- Nel compilatore IDL (widl) è stata aggiunta la possibilità di caricare librerie incorporate nei file PE, è stato garantito il supporto per attributi e costrutti specifici di WinRT, e è stata implementata la ricerca di librerie in base alla piattaforma.
- Sistema di build
- Nelle directory specifiche per architettura hardware, le librerie sono ora salvate con nomi che riflettono l'architettura e il tipo di file eseguibili, ad esempio 'i386-windows' per il formato PE e 'x86_64-unix' per le librerie unix, consentendo il supporto di diverse architetture in un'unica installazione di Wine e assicurando la ricompilazione incrociata di Winelib.
- Per impostare nei file PE le opzioni che gestiscono il passaggio all'uso di librerie DLL native, in winebuild è stato aggiunto il flag '--prefer-native option' (l'elaborazione di DLL_WINE_PREATTACH in DllMain è stata interrotta).
- Aggiunto supporto per la versione 4 del formato di dati di debug Dwarf, che ora viene utilizzato come impostazione predefinita nella compilazione delle librerie Wine.
- Aggiunta l'opzione di compilazione '--enable-build-id' per memorizzare identificatori di compilazione unici nei file eseguibili.
- È stato aggiunto il supporto per l'uso del compilatore Clang in modalità compatibile con MSVC.
- Varie
- I nomi delle cartelle standard nell'interfaccia utente (Windows Shell) sono stati aggiornati secondo lo schema utilizzato a partire da Windows Vista, ovvero invece di ‘Documenti’ ora si crea la cartella ‘Documents’, mentre la maggior parte dei dati viene salvata nella cartella ‘AppData’.
- Nella libreria OpenCL è stato aggiunto il supporto per la specifica OpenCL 1.2.
- Nel driver WinSpool è stato aggiunto il supporto per diverse varianti di dimensioni delle pagine durante la stampa.
- È stato aggiunto il supporto iniziale per MSDASQL, il provider Microsoft OLE DB per i driver ODBC.
- Il motore Wine Mono con implementazione della piattaforma .NET è stato aggiornato alla versione 7.0.0.
- I dati Unicode sono stati aggiornati alla specifica Unicode 14.
- Nell'albero dei sorgenti sono state integrate le librerie Faudio, GSM, LCMS2, LibJPEG, LibJXR, LibMPG123, LibPng, LibTiff, LibXml2, LibXslt e Zlib, che vengono compilate nel formato PE e non richiedono una versione in formato Unix. Queste librerie possono anche essere importate dal sistema per utilizzare build esterne al posto delle versioni PE integrate.
Fonte: opennet.ru
