Dopo un anno di sviluppo e 30 versioni di prova, viene presentata la versione stabile dell'implementazione open source dell'API Win32 — Wine 7.0, che include oltre 9100 cambiamenti. Tra i risultati chiave di questa nuova versione, segnaliamo la conversione della maggior parte dei moduli di Wine nel formato PE, il supporto per i 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.
In Wine è stata confermata la piena funzionalità di 5156 (un anno fa 5049) programmi per Windows; altri 4312 (un anno fa 4227) funzionano perfettamente con configurazioni aggiuntive e DLL esterne. 3813 programmi (un anno fa 3703) presentano piccoli problemi di funzionamento, che non ostacolano l'uso delle funzioni principali delle applicazioni.
Novità chiave di 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 di PE risolve problemi con il supporto di vari schemi di protezione contro la copia che effettuano un controllo sull'identità dei moduli di sistema sia sul disco che in memoria.
- È stata implementata la possibilità di interazione tra i moduli PE e le librerie Unix utilizzando le chiamate di sistema del kernel NT, consentendo di nascondere le chiamate al codice Unix da parte dei debugger di Windows e monitorare la registrazione dei thread.
- Le DLL incorporate vengono ora caricate solo se esiste un file corrispondente sul disco in formato PE, indipendentemente dal fatto che si tratti di una libreria reale o di un placeholder. Questa modifica consente all'applicazione di visualizzare sempre il binding corretto ai file PE. Per disabilitare questo comportamento, è possibile utilizzare la variabile ambientale WINEBOOTSTRAPMODE.
- WoW64
- È stata realizzata l'architettura WoW64 (Windows-on-Windows a 64 bit), che consente l'esecuzione di applicazioni Windows a 32 bit all'interno di processi Unix a 64 bit. Il supporto è stato implementato tramite un layer che traduce le chiamate di sistema NT a 32 bit in richieste a 64 bit verso NTDLL.
- Le librerie WoW64 sono preparate per la maggior parte delle librerie Unix e consentono ai moduli a 32 bit nel formato PE di accedere alle librerie Unix a 64 bit. Una volta completata la conversione di tutti i moduli nel formato PE, sarà possibile eseguire applicazioni Windows a 32 bit senza necessità di installare librerie Unix a 32 bit.
- Temi
- È stata implementata la supporto per i temi. Sono inclusi i temi "Light", "Blue" e "Classic Blue", che possono essere selezionati tramite il configuratore WineCfg.
- È stata aggiunta la possibilità di personalizzare l'aspetto di tutti gli elementi dell'interfaccia tramite i temi. È garantito l'aggiornamento automatico dell'aspetto degli elementi dopo il cambio di tema.
- Tutte le applicazioni predefinite di Wine hanno ora il supporto per i temi. È stata effettuata l'adattamento delle applicazioni a schermi con alta densità di pixel (High DPI).
- Sottosistema grafico
- È stata aggiunta una nuova libreria Win32u, che incorpora parti delle librerie GDI32 e USER32, relative alla gestione grafica e alle finestre a livello di kernel. In seguito, verrà avviato il lavoro di trasferimento in Win32u dei componenti dei driver, come winex11.drv e winemac.drv.
- Il driver Vulkan implementa il supporto per la specifica dell'API grafico Vulkan 1.2.201.
- È stato fornito il supporto per il rendering tramite l'API Direct2D di oggetti geometrici tratteggiati, con la possibilità di effettuare un controllo delle collisioni (hit-test).
- Nell'API Direct2D è stato implementato un supporto iniziale per gli effetti visivi applicati utilizzando l'interfaccia ID2D1Effect.
- Nell'API Direct2D è stata aggiunta la supporto all'interfaccia ID2D1MultiThread, utilizzata per organizzare l'accesso esclusivo alle risorse nelle applicazioni multithread.
- Nella libreria WindowsCodecs è stato implementato il supporto per la decodifica delle immagini nel formato WMP (Windows Media Photo) e per la codifica delle immagini nel formato DDS (DirectDraw Surface). È stata cessata la supporto per la codifica delle immagini nel formato ICNS (per macOS), non supportato in Windows.
- Direct3D
- È stato notevolmente migliorato il nuovo motore di rendering, che traduce le chiamate Direct3D nell'API grafico Vulkan. Nella maggior parte delle situazioni, il livello di supporto per Direct3D 10 e 11 nel motore basato su Vulkan è stato portato al parità con il vecchio motore basato su OpenGL. Per attivare 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), il funzionamento con oggetti di stato nel contesto dispositivo, offset costanti nei buffer, la pulizia delle visualizzazioni di texture non ordinate, la copia dei dati tra risorse in formati senza tipo (DXGI_FORMAT_BC3_TYPELESS, DXGI_FORMAT_R32G32B32A32_TYPELESS) e altro ancora.
- È stato aggiunto il supporto per le configurazioni multi-monitor, che consente di selezionare il monitor per visualizzare l'applicazione Direct3D in modalità schermo intero.
- Nell'API DXGI è stata implementata la gamma di correzione del display, che può essere utilizzata dalle applicazioni basate su Direct3D 10 e 11 per modificare la luminosità dello schermo. È stata fornita l'estrazione dei contatori dei framebuffer virtuali (SwapChain).
- In Direct3D 12 è stato aggiunto il supporto per le firme radice versione 1.1.
- Nel codice di rendering tramite l'API Vulkan è stata migliorata l'efficienza della gestione delle richieste quando è presente nel sistema il supporto per l'estensione VK_EXT_host_query_reset.
- È stata aggiunta la possibilità di output dei framebuffer virtuali (SwapChain) tramite GDI, qualora OpenGL o Vulkan non possano essere utilizzati per la visualizzazione, ad esempio, durante l'output in una finestra da processi diversi, come nelle applicazioni basate sul framework CEF (Chromium Embedded Framework).
- L'uso del backend per gli shader GLSL consente l'applicazione del modificatore «precise» per le istruzioni degli shader.
- Nell'API DirectDraw è stata aggiunta la supporto per il rendering 3D nella memoria di sistema, utilizzando dispositivi software come «RGB», «MMX» e «Ramp».
- Nel database 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.
- Dall'registro HKEY_CURRENT_USER\Software\Wine\Direct3D è stata rimossa la chiave «UseGLSL», per cui a partire da Wine 5.0 è necessario utilizzare «shader_backend».
- Per il supporto di Direct3D 12 è ora necessaria la libreria vkd3d in versione 1.2 o superiore.
- D3DX
- Nell'implementazione di D3DX 10 è stata migliorata la compatibilità con il framework degli effetti visivi ed è stato aggiunto il supporto per il formato delle immagini Windows Media Photo (JPEG XR).
- Sono state aggiunte funzioni per la creazione di texture fornite in D3DX10, come D3DX10CreateTextureFromMemory().
- Sono parzialmente implementate le interfacce di programmazione ID3DX10Sprite e ID3DX10Font.
- Audio e video
- È stato unificato in un unico backend WineGStreamer il supporto per le estensioni GStreamer per DirectShow e il framework Media Foundation, il che dovrebbe semplificare lo sviluppo di nuove API per la decodifica dei contenuti.
- Basato sul backend WineGStreamer, sono stati implementati oggetti Windows Media per la lettura sincrona e asincrona.
- È proseguita la revisione dell'implementazione del framework Media Foundation, aggiunta la compatibilità con le funzionalità di IMFPMediaPlayer, del campionatore di campioni (sample allocator), migliorato il supporto per EVR e per i buffer di rendering SAR.
- Rimossa la libreria wineqtdecoder, che offriva un decoder per il formato QuickTime (ora per tutti i codec si utilizza GStreamer).
- Dispositivi di input
- Notevolmente migliorato il supporto per i dispositivi di input che utilizzano 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 traslazione delle descrizioni dei dispositivi in messaggi HID.
- Aggiunto un nuovo backend DirectInput per joystick che supportano il protocollo HID. Implementata la possibilità di utilizzare effetti di feedback nei joystick. Ottimizzato pannello di controllo il funzionamento con dispositivi compatibili con XInput. In WinMM, il supporto per joystick è stato trasferito a DInput, invece di utilizzare il backend evdev in Linux e l'IOHID in macOS. Rimossa la vecchia driver joystick winejoystick.drv.
- Nel modulo DInput sono stati aggiunti nuovi test basati sull'uso di dispositivi HID virtuali che non richiedono la presenza di un dispositivo fisico.
- Testo e caratteri
- In DirectWrite è stato aggiunto l'oggetto Font Set.
- In RichEdit è stato implementato correttamente l'interfaccia TextHost.
- Nucleo (interfacce di core di Windows)
- All'avvio di un file eseguibile non identificato in Wine (ad esempio, 'wine foo.msi'), viene ora chiamato start.exe, che attiva i gestori associati al tipo di file.
- Aggiunta la supporto per i meccanismi di sincronizzazione NtAlertThreadByThreadId e NtWaitForAlertByThreadId, simili ai futex in Linux.
- Aggiunta la supporto per gli oggetti di debug NT utilizzati nel debugging delle funzioni di kernel.
- Aggiunta la supporto per le chiavi di registro dinamiche per memorizzare i dati sulle prestazioni.
- C Runtime
- Nel C runtime è stata implementata una gamma completa di funzioni matematiche, principalmente trasferite dalla libreria Musl.
- Per tutte le piattaforme CPU è garantita la corretta supporto delle funzioni per i calcoli in virgola mobile.
- Funzionalità di rete
- Migliorata la modalità di compatibilità con Internet Explorer 11 (IE11), ora utilizzata come predefinita per l'elaborazione dei documenti HTML.
- Nella libreria mshtml è stata implementata la modalità JavaScript ES6 (ECMAScript 2015), che supporta funzionalità come l'espressione let e l'oggetto Map.
- L'installazione di pacchetti MSI Wine con componenti aggiuntivi per il motore Gecko ora avviene solo se necessario, anziché durante l'aggiornamento di Wine.
- Aggiunta la supporto per il protocollo DTLS.
- È stato implementato il servizio NSI (Network Store Interface), che memorizza e trasmette ad altri servizi informazioni sulla routing e sulle interfacce di rete del computer.
- I gestori API WinSock, come setsockopt e getsockopt, sono stati spostati nella libreria NTDLL e nel driver afd.sys, per conformarsi all'architettura di Windows.
- Ora nel catalogo di lavoro di Wine vengono installati file propri con database di rete, come /etc/protocols e /etc/networks, invece di fare riferimento a database Unix analoghi.
- Piattaforme alternative
- Aggiunta la compatibilità hardware per i dispositivi Apple basati su chip ARM M1 (Apple Silicon).
- Per supportare le funzionalità BCrypt e Secur32 su piattaforma macOS, ora è necessaria l'installazione della libreria GnuTLS.
- I file eseguibili a 32 bit per piattaforme ARM ora vengono compilati in modalità Thumb-2, in analogia con Windows. Per il caricamento di tali file viene utilizzato un preloader.
- Per le piattaforme ARM a 32 bit è stata implementata la supporto per il unwind delle eccezioni.
- Per FreeBSD è stata ampliata la quantità di richieste supportate per informazioni di basso livello sul sistema, come dati sullo stato della memoria e sul livello di carica della batteria.
- Applicazioni e strumenti integrati per lo sviluppo
- L'utility reg.exe ha acquisito il supporto per le versioni a 32 e 64 bit del registro. È stata aggiunta la possibilità di copiare le chiavi del registro.
- L'utility WineDump ha aggiunto il supporto per l'output del dump dei metadati di Windows e la visualizzazione di informazioni dettagliate sulle voci di CodeView.
- Nel debugger Wine Debugger (winedbg) è stata implementata la possibilità di eseguire il debug di processi a 32 bit da un debugger a 64 bit.
- Nel compilatore IDL (widl) è stata aggiunta la possibilità di caricare le librerie incorporate nei file PE, supportando attributi e costrutti specifici per WinRT, ed è stata implementata la ricerca di librerie in legame con la piattaforma.
- Sistema di build
- Nelle directory specifiche per le architetture hardware, le librerie sono ora salvate con nomi che riflettono l'architettura e il tipo di file eseguibili, ad esempio, 'i386-windows' per i file PE e 'x86_64-unix' per le librerie unix, consentendo il supporto di diverse architetture in una sola installazione di Wine e garantendo la cross-compilazione di Winelib.
- Per l'installazione negli header dei file PE, un'opzione che gestisce il passaggio all'uso di librerie DLL native è stata aggiunta in winebuild con il flag ‘—prefer-native option’ (la gestione di DLL_WINE_PREATTACH in DllMain è stata interrotta).
- Aggiunto il supporto per la versione 4 del formato di debug Dwarf, che ora viene utilizzato di default durante la compilazione delle librerie Wine.
- Aggiunta l'opzione di compilazione ‘—enable-build-id’ per conservare identificatori unici di build nei file eseguibili.
- Aggiunto il supporto per l'uso del compilatore Clang in modalità compatibile con MSVC.
- Varie
- La denominazione delle directory standard nella Shell di Windows è stata adattata allo schema utilizzato a partire da Windows Vista, ovvero, al posto di ‘My Documents’ ora viene creata 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.
- Aggiunto un 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 incorporate le librerie Faudio, GSM, LCMS2, LibJPEG, LibJXR, LibMPG123, LibPng, LibTiff, LibXml2, LibXslt e Zlib, che vengono compilate in formato PE e non richiedono la presenza di una variante in formato Unix. Queste biblioteche possono essere anche importate dal sistema per l'uso di compilazioni esterne invece delle varianti PE incorporate.
Fonte: opennet.ru
