După un an de dezvoltare și 26 de versiuni experimentale, a fost lansată versiunea stabilă a implementării deschise a Win32 API - Wine 9.0, care include peste 7000 de modificări. Printre realizările cheie din noua versiune se numără implementarea arhitecturii WoW64 pentru rularea programelor pe 32 de biți în medii pe 64 de biți, integrarea unui driver pentru suportul Wayland, suportul pentru arhitectura ARM64, implementarea API-ului DirectMusic și suportul pentru cartele inteligente.
În Wine, s-a confirmat funcționarea completă a 5336 de programe pentru Windows (acum un an 5266, acum doi ani 5156, acum trei ani 5049), iar alte 4397 de programe (acum un an 4370, acum doisprezece ani 4312, acum trei ani 4227) funcționează excelent cu ajustări suplimentare și DLL externe. La 3943 de programe (acum un an 3888, acum doi ani 3813, acum trei ani 3703) s-au observat probleme minore, care nu împiedică utilizarea funcțiilor principale ale aplicațiilor.
Noutățile cheie ale Wine 9.0:
- A fost adăugat driverul winewayland.drv, care permite utilizarea Wine în medii bazate pe protocolul Wayland fără utilizarea XWayland și componentelor X11. Dezvoltarea este orientată spre asigurarea funcționării unui mediu curat Wayland cu suport pentru rularea aplicațiilor Windows, fără a necesita instalarea pachetelor legate de X11, ceea ce permite obținerea unei performanțe mai ridicate și a unei reacții mai rapide în jocuri prin eliminarea straturilor inutile. Utilizarea unui mediu curat Wayland pentru Wine permite, de asemenea, evitarea problemelor de securitate asociate cu X11 (de exemplu, jocurile nesigure pentru X11 pot spiona alte aplicații deoarece protocolul X11 permite accesul la toate evenimentele de intrare și efectuarea substituțiilor de apăsări de taste).
Driverul este marcat ca experimental și în dezvoltare, însă cu toate acestea, acesta dispune deja de suport pentru multe funcționalități, cum ar fi gestionarea ferestrelor, utilizarea mai multor monitoare, suportul pentru scalarea ieșirii pe ecrane cu densitate înaltă de pixeli (high-DPI), utilizarea coordonatelor relative în urmărirea mișcării mouse-ului și suportul pentru API-ul grafic Vulkan. În mod implicit, driverul nu este activ și pentru a-l activa, trebuie adăugat „wayland” în parametrul registrului „HKCU\Software\Wine\Drivers” și să ne asigurăm că variabila de mediu DISPLAY nu este setată: wine reg.exe add HKCU\\Software\\Wine\\Drivers \/v Graphics \/d x11,wayland
- A fost realizat transferul tuturor modulelor la interfața apelurilor de sistem NT, în locul efectuării apelurilor directe între nivelurile PE și Unix, ceea ce a marcat finalizarea unei lucrări de ani de zile pentru traducerea tuturor bibliotecilor DLL pentru a utiliza formatul fișierelor executabile PE (Portable Executable).
- Continuarea dezvoltării stratului WoW64 (Windows-on-Windows 64-bit), care permite rularea aplicațiilor Windows de 32 de biți în sistemele Unix de 64 de biți. În toate modulele care se adresează bibliotecilor Unix, sunt folosite conversoare ale apelurilor de sistem WoW64 (thunk), care permit modulelor de 32 de biți în format PE să acceseze bibliotecile Unix de 64 de biți.
A fost îmbunătățit noul mod de pornire WoW64, în care codul de 32 de biți este executat în interiorul unui proces de 64 de biți (în vechiul mod WoW64, aplicațiile de 32 de biți erau lansate în procese Unix de 32 de biți). A fost adăugată suportul pentru utilizarea noului mod WoW64 pe platforma macOS. Deoarece în noul mod WoW64 sunt marcate unele necorespunderi, cum ar fi lipsa suportului pentru modul de 16 biți și scăderea performanței OpenGL din cauza lipsei suportului pentru extensia ARB_buffer_storage, acesta nu este inclus implicit și necesită compilare cu opțiunea „—enable-archs=i386,x86_64” în scriptul configure.
- A fost adăugată posibilitatea de a rula fișiere executabile existente Windows pe sisteme cu arhitectură ARM64. A fost implementată posibilitatea de a compila Wine pentru ABI ARM64EC (ARM64 Emulation Compatible) și suport pentru încărcarea modulelor ARM64EC, utilizate pentru a simplifica portarea aplicațiilor inițial scrise pentru arhitectura x86_64 pe sistemele ARM64, prin oferirea posibilității de a executa în mediu ARM64 module individuale cu cod x86_64 cu ajutorul emulatorului. A fost adăugat suport pentru formatul fișierelor PE ARM64X, care permite încărcarea unui singur fișier executabil în procesele x64/Arm64EC și ARM64. A fost implementat un interface pentru emularea sistemelor x86 de 32 de biți, dar biblioteca cu emulatorul nu este încă inclusă în compunerea principală Wine (pentru a rula cod x86 în mediu ARM64 poate fi utilizat un emulator extern FEX).
- Substanța grafică
- Driverul PostScript a fost reproiectat pentru a susține fișierele spool în format Windows, în care sunt stocate datele despre sarcinile trimise la imprimare. Au fost excluse apelurile directe către driver din mediu Unix.
- Temele de design WinRT au fost îmbunătățite cu suport pentru modul întunecat. În WineCfg a fost adăugată o setare pentru activarea temei întunecate a interfeței.
- Driverul pentru API-ul grafic Vulkan a adăugat suport pentru specificația Vulkan 1.3.272 (în Wine 8.0 era acceptat 1.3.237).
- Au fost optimizate funcțiile bibliotecii GdiPlus, ceea ce a dus la creșterea performanței în lucrul cu grafica.
- Direct3D
- S-a realizat suspendarea analizei fluxului de comenzi multi-thread în condiții de lipsă a comenzilor de redare, ceea ce permite reducerea consumului de energie la nivelul procesării unithread în timpul execuției programelor care nu folosesc toată lățimea de bandă a fluxului de comenzi.
- În Direct3D 10 a fost implementat suportul pentru efecte suplimentare.
- Au fost efectuate optimizări de performanță în codul WineD3D și în backend-ul care folosește API-ul grafic Vulkan.
- În codul de redare bazat pe API-ul Vulkan a fost adăugată o verificare a capabilităților suportate de dispozitiv, precum și raportarea către aplicație a informațiilor despre nivelul de funcționalitate Direct3D disponibil.
- Au fost implementate funcțiile D3DXFillTextureTX și D3DXFillCubeTextureTX.
- În backend-ul clasic al shader-elor OpenGL ARB a fost adăugat suport pentru determinarea umbrelor prin extensia ARB_fragment_program_shadow.
- În D3DXLoadMeshHierarchyFromX și funcțiile similare a fost adăugat suport pentru încărcarea datelor personalizate prin intermediul interfeței ID3DXLoadUserData.
- Sunet și video
- A fost propusă o implementare inițială a API-ului DirectMusic. A fost adăugat suport pentru colecții, instrumente și mostre de sunet în format SoundFont. A fost adăugat suport pentru efectul Doppler. Au fost implementate teste pentru a verifica corectitudinea implementării în utilizarea secvenței dmime și sintetizatorului MIDI dmsynth.
- Pentru utilizarea în API DirectMusic, a fost integrată biblioteca FluidSynth.
- A fost implementat suportul pentru încărcarea fonturilor sonore (SoundFont — formate pentru sinteză bazate pe mostre, utilizate pentru redarea fișierelor MIDI) în formatele DLS1 și DLS2, precum și în formatul SF2, utilizat în Linux.
- A fost adăugată capacitatea de a reda conținut MIDI prin intermediul bibliotecii dmsynth, folosind sintetizatorul software FluidSynth și API-ul DirectSound pentru redarea sunetului.
- A fost adăugat un decodor pentru video în formatul codec-ului video Indeo IV50.
- DirectShow
- A fost implementat componentul DMO (DirectX Media Object) cu un decodor pentru formatul WMV (Windows Media Video).
- A fost adăugat un filtru pentru captarea sunetului (DirectShow Audio Capture Filter).
- În filtrul de împărțire a fluxurilor MPEG‑1 (DirectShow MPEG‑1 Stream Splitter), pe lângă fluxurile audio, a fost adădat suport pentru fluxurile video și cele auxiliare.
- A fost implementat un filtru pentru decodarea video în format MPEG‑1 (DirectShow MPEG‑1 Video Decoder).
- Dispozitive de intrare
- În DirectInput, a fost implementat suportul pentru maparea acțiunilor (action maps), care permite asocierea butoanelor de pe controlerul de jocuri cu acțiuni specifice în jocuri.
- Integrare cu desktop-ul
- S-a asigurat exportul în mediu utilizator principal al asocierilor, permițând apelarea aplicațiilor rulând sub Wine ca handleri de protocoale la deschiderea URL-urilor (de exemplu, lansarea spotify.exe la deschiderea de linkuri de tip „spotify:user:spotify:playlist:848218482355482821”).
- A fost implementată extragerea datelor EDID (Extended Display Identification Data) cu informații despre specificațiile monitorului conectat, cum ar fi numele și modelul dispozitivului.
- S-a oferit posibilitatea de a închide fereastra desktop-ului, extinsă în modul fullscreen, folosind butonul „Exit desktop” din meniul „Start”.
- Internaționalizare
- Suportul pentru IME (Input Method Editors) a fost extins. S-au realizat lucrări pentru a asigura compatibilitatea cu implementările native ale Windows pentru IME și îmbunătățirea integrării cu IME din Linux.
- S-a asigurat generarea bazei de date a localelor în format locale.nls din baza de date Unicode CLDR (Unicode Common Locale Data Repository) versiunea 44. A fost adăugat suport pentru locale suplimentare bew-ID, blo-BJ, csw-CA, ie-EE, mic-CA, prg-PL, skr-PK, tyv-RU, vmw-MZ, xnr-IN și za-CN.
- A fost realizat traducerea interfeței în limba georgiană. Au fost oferite traduceri complete pentru 16 limbi, iar parțiale pentru 31 de limbi.
- Tabelele de caractere Unicode au fost actualizate la versiunea standard 15.1.0. Baza de date a fuselor orare a fost actualizată.
- Kernel (interfețe ale kernel-ului Windows)
- Versiunea Windows definită implicit este Windows 10.
- Pentru fișierele executabile în format PE a fost implementat suportul pentru randomizarea spațiului de adrese (ASLR), dar adresele de încărcare a codului în memorie nu sunt încă complet randomizate.
- A fost implementat suportul pentru heap-ul cu fragmentare scăzută (LFH, Low Fragmentation Heap), ceea ce a permis creșterea performanței operațiunilor de alocare a memoriei.
- Mecanismul de alocare a memoriei virtuale a fost îmbunătățit cu suport pentru rezervarea memoriei (placeholder), permițând aplicației să rezerve o anumită zonă de memorie virtuală pentru utilizare ulterioară.
- Încărcătoarele de 64 de biți (loader și preloader) pentru fișierele executabile și biblioteci au fost compilate în format PIE (Position-Independent Executables) pentru a elibera o parte din spațiul de adresare de 32 de biți.
- S-a asigurat desfășurarea corectă a stivei (stack unwinding) pentru apelurile de sistem NT și apelurile callback de utilizator.
- Funcționalități de rețea
- În motorul MSHTML s-a implementat suportul pentru mecanismul de colectare a gunoaielor „Cycle Collection”.
- În MSHTML a fost adăugat suport pentru modul de procesare sincronă a cererilor XMLHttpRequest.
- În jscript.dll a fost adăugat suport pentru obiectul WeakMap, care permite manipularea colecțiilor de perechi cheie/valoare, în care cheia este un obiect la care poate fi atașată o valoare arbitrară. Au fost implementate metodele WeakMap.get(), WeakMap.delete(), WeakMap.clear() și WeakMap.has().
- Motorul de browser Gecko a fost actualizat la versiunea 2.47.4.
- A fost implementat suportul pentru notificări despre modificarea stării interfeței de rețea.
- Criptografie și securitate
- În biblioteca Winscard.dll a fost adăugat suport pentru carduri inteligente, realizat prin biblioteca de sistem PCSClite.
- În BCrypt a fost adăugat suport pentru protocolul de schimb de chei Diffie-Hellman.
- A fost implementat pachetul Negotiate, care oferă o interfață pentru utilizarea SSPI (Interfața de furnizor de suport pentru securitate) pentru accesarea furnizorilor SSP (Furnizor de suport pentru securitate).
- Aplicații încorporate
- În debuggerul Wine Debugger (winedbg) pentru dezasamblarea instrucțiunilor în X86 a fost utilizată biblioteca Zydis.
- În interfața WineCfg a fost adăugată opțiunea de a seta versiuni mai vechi de Windows (până la XP) pe platformele pe 64 de biți, permițând rularea aplicațiilor învechite folosind modul WoW64.
- În toate aplicațiile grafice încorporate a fost implementată afișarea informațiilor despre erori într-un dialog separat, în loc să fie afișate în consolă.
- În programul systeminfo a fost asigurat afişarea informaţiilor din baza de date WMI (Instrumentația de management Windows).
- A fost adăugat aplicația klist pentru vizualizarea tichetelor Kerberos.
- În aplicația taskkill a fost implementată posibilitatea de a închide forțat procesele fiice.
- În utilitarul start a fost adăugat parametrul "\/machine" pentru a alege arhitectura utilizată la lansarea fișierelor executabile hibride, care suportă x86 și ARM.
- A fost implementată cea mai mare parte a funcționalității programului tasklist.
- A fost adăugată o implementare de bază a aplicației findstr.
- Instrumente pentru dezvoltare
- În utilitarul WineDump a fost realizată posibilitatea de a afișa conținutul fișierelor registrului Windows (format REGF), precum și de a arăta datele pentru toate arhitecturile (x86/ARM64), acceptate în fișierele PE hibride.
- În compilatorul IDL a fost adăugat suport pentru atributele „composable”, „default_overload”, „deprecated” și „protected”.
- Biblioteca libwine.so a fost eliminată, fiind declarată învechită în versiunea Wine 6.0 și nefiind folosită de mult în Wine. Programele în format ELF, compilate în versiunile vechi de Wine (5.0 și mai vechi) cu libwine.so, necesită recompilare pentru a rula în Wine 9.0.
- Biblioteci incluse și dependențe externe
- În cadrul integrării sunt incluse bibliotecile FluidSynth 2.3.3, Musl 1.2.3 (doar funcții matematice) și Zydis 4.0.0.
- Au fost actualizate la versiunile noi componentele 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 și Zlib 1.3. Motorul Wine Mono cu implementarea platformei .NET a fost actualizat la versiunea 8.1.0.
- În driverul winewayland.drv sunt folosite ca dependențe externe biblioteca client Wayland, precum și bibliotecile xkbcommon și xkbregistry.
- Pentru suportul smartcard-urilor este utilizată biblioteca externă PCSClite (în macOS — PCSC).
- Pentru a construi fișiere PE pe platforme diferite de i386, este acum necesar un compilator cross cu suport pentru directivele „.seh” pentru gestionarea excepțiilor.
Sursa: opennet.ro
