După un an de dezvoltare și 26 de versiuni experimentale, a fost prezentată o versiune stabilă a implementării deschise a API-ului Win32 - Wine 9.0, care a încorporat peste 7000 de modificări. Realizările cheie din noua versiune includ implementarea arhitecturii WoW64 pentru rularea programelor pe 32 de biți într-un mediu de 64 de biți, integrarea driverelor pentru a suporta Wayland, suport pentru arhitectura ARM64, implementarea API-ului DirectMusic și suport pentru carduri inteligente.
S-a confirmat că 5336 (5266 acum un an, 5156 acum doi ani, 5049 acum trei ani) programe funcționează corect în Wine. WindowsAlte 4397 de programe (4370 acum un an, 4312 acum doi ani, 4227 acum trei ani) funcționează fără probleme cu setări suplimentare și DLL-uri externe. 3943 de programe (3888 acum un an, 3813 acum doi ani, 3703 acum trei ani) au probleme minore care nu interferează cu funcționalitatea de bază a aplicațiilor.
Inovații cheie în Wine 9.0:
- Driverul winewayland.drv a fost adăugat, permițând utilizarea Wine în medii bazate pe Wayland fără a utiliza componente XWayland sau X11. Această dezvoltare are ca scop furnizarea unui mediu Wayland pur, cu suport pentru lansare. Windows- aplicații care nu necesită instalarea de pachete legate de X11, ceea ce permite o performanță și o reacție mai rapidă în jocuri prin eliminarea straturilor inutile. Utilizarea unui mediu Wayland pur pentru Wine elimină, de asemenea, problemele de securitate inerente X11 (de exemplu, jocurile X11 neîncredute pot spiona alte aplicații deoarece protocolul X11 permite accesul la toate evenimentele de intrare și efectuează substituirea apăsărilor de taste).
Driverul este marcat ca experimental și în curs de dezvoltare, dar, cu toate acestea, are deja suport pentru multe caracteristici, cum ar fi gestionarea ferestrelor, lucrul cu mai multe monitoare, suportul pentru scalarea ieșirii pe ecrane cu densitate mare de pixeli (DPI ridicat), lucrul cu coordonate relative la urmărirea mișcării mouse-ului și suport pentru API-ul grafic Vulkan. În mod implicit, driverul nu este activ și pentru a-l activa ar trebui să adăugați „wayland” la parametrul de registry „HKCU\Software\Wine\Drivers” și să vă asigurați că variabila de mediu DISPLAY nu este setată: wine reg.exe add HKCU\ \Software\\Wine\\Drivers /v Graphics /d x11,wayland
- Toate modulele au fost convertite la interfața de apel de sistem NT, mai degrabă decât să efectueze apeluri directe între straturile PE și Unix, marcând finalizarea multor ani de muncă pentru a converti toate DLL-urile pentru a utiliza formatul de fișier executabil PE (Portable Executable).
- Dezvoltarea stratului WoW64 (64 biți) a continuat Windows-pe-Windows), care vă permite să rulați pe 32 de biți Windows- aplicații pe sisteme Unix pe 64 de biți. Toate modulele care accesează bibliotecile Unix utilizează traducătoare de apeluri de sistem WoW64 (thunks), permițând modulelor pe 32 de biți în format PE să acceseze bibliotecile Unix pe 64 de biți.
Noul mod de lansare WoW64 a fost îmbunătățit, permițând rularea codului pe 32 de biți într-un proces pe 64 de biți (în vechiul mod WoW64, aplicațiile pe 32 de biți rulau în procese Unix pe 32 de biți). A fost adăugat suport pentru utilizarea noului mod WoW64 pe platformă. macOSÎntrucât noul mod WoW64 are câteva erori minore, cum ar fi lipsa suportului pe 16 biți și performanța redusă a OpenGL din cauza lipsei de suport pentru extensia ARB_buffer_storage, acesta nu este încă activat în mod implicit și necesită compilarea cu opțiunea „--enable-archs=i386,x86_64” din scriptul de configurare.
- Adăugată posibilitatea de a executa fișiere executabile existente Windows Pe sistemele cu arhitectura ARM64. Wine poate fi acum construit pentru ABI-ul ARM64EC (compatibil cu emularea ARM64), iar modulele ARM64EC pot fi încărcate. Aceste module sunt utilizate pentru a simplifica portarea aplicațiilor scrise inițial pentru arhitectura x86_64 la sistemele ARM64, permițând execuția modulelor individuale de cod x86_64 în mediul ARM64 folosind un emulator. A fost adăugat suport pentru formatul de fișier ARM64X PE, care permite încărcarea unui singur fișier executabil atât în procesele x64/Arm64EC, cât și în cele ARM64. A fost implementată o interfață pentru emularea sistemelor x86 pe 32 de biți, dar biblioteca emulatorului nu este încă inclusă în distribuția principală Wine (emulatorul extern FEX poate fi utilizat pentru a rula cod x86 în mediul ARM64).
- Subsistemul grafic
- Driverul PostScript a fost reproiectat pentru a accepta fișiere spool în formatul Windows, care stochează date despre lucrările de imprimare. Apelurile directe către driver din mediul Unix sunt excluse.
- Suportul pentru modul întunecat a fost adăugat temelor WinRT. O setare a fost adăugată la WineCfg pentru a activa designul interfeței întunecate.
- Driverul pentru API-ul grafic Vulkan a adăugat suport pentru specificația Vulkan 1.3.272 (8.0 a fost acceptat în Wine 1.3.237).
- Funcțiile bibliotecii GdiPlus au fost optimizate, permițând o performanță grafică crescută.
- Direct3D
- Analiza unui flux de comenzi cu mai multe fire este suspendată atunci când nu există comenzi de randare în curs de procesare, ceea ce permite reducerea consumului de energie la nivelul procesării cu un singur thread atunci când se execută programe care nu ocupă întreaga lățime de bandă a fluxului de comenzi.
- Direct3D 10 include suport pentru efecte suplimentare.
- Optimizări de performanță pentru codul WineD3D și backend folosind API-ul grafic Vulkan.
- Codul de randare bazat pe API Vulkan verifică acum ce capabilități suportă dispozitivul și spune aplicației ce nivel de funcționalitate Direct3D este disponibil.
- Funcțiile D3DXFillTextureTX și D3DXFillCubeTextureTX au fost implementate.
- Backend-ul clasic OpenGL ARB shader a adăugat suport pentru definirea umbrelor folosind extensia ARB_fragment_program_shadow.
- D3DXLoadMeshHierarchyFromX și funcții similare au adăugat suport pentru încărcarea datelor utilizatorului folosind interfața ID3DXLoadUserData.
- Sunet și video
- A fost propusă o implementare inițială a API-ului DirectMusic. S-a adăugat suport pentru colecții, instrumente și mostre de sunet în formatul SoundFont. S-a adăugat suport pentru efectul Doppler. Au fost implementate teste pentru a verifica implementarea corectă la operarea secvențatorului dmime și a sintetizatorului MIDI dmsynth.
- Biblioteca FluidSynth este încorporată în DirectMusic API pentru utilizare.
- S-a implementat suport pentru încărcarea fonturilor sonore (SoundFont - formate pentru sinteza bazată pe eșantioane utilizate pentru redarea fișierelor MIDI) în formatele DLS1 și DLS2, precum și în formatul SF2 utilizat în Linux.
- S-a adăugat posibilitatea de a reda conținut MIDI folosind biblioteca dmsynth, folosind sintetizatorul software FluidSynth și API-ul DirectSound pentru ieșire audio.
- S-a adăugat un decodor pentru video în formatul de codec video Indeo IV50.
- DirectShow
- Componenta DMO (DirectX Media Object) cu un decodor de format WMV a fost implementată (Windows Media Video).
- S-a adăugat un filtru de captură audio (DirectShow Audio Capture Filter).
- Pe lângă fluxurile audio, MPEG-1 Stream Splitter (DirectShow MPEG-1 Stream Splitter) acceptă acum fluxuri video și fluxuri de servicii.
- A fost implementat un filtru pentru decodarea videoclipurilor în format MPEG-1 (DirectShow MPEG-1 Video Decoder).
- Dispozitive de intrare
- DirectInput acceptă maparea acțiunilor, care vă permite să legați butoanele unui controler de joc la anumite acțiuni din jocuri.
- Integrare desktop
- Legăturile au fost exportate în mediul principal al utilizatorului, permițând aplicațiilor care rulează sub Wine să fie apelate ca handlere de protocol atunci când se deschide o adresă URL (de exemplu, lansarea spotify.exe când se deschide link-uri precum „spotify:user:spotify:playlist:848218482355482821”).
- Am implementat extragerea datelor EDID (Extended Display Identification Data) cu informații despre parametrii monitorului conectat, cum ar fi numele și modelul dispozitivului.
- Este posibil să închideți o fereastră de desktop instalată în modul ecran complet folosind butonul „Ieșire din desktop” din meniul „Start”.
- Internaționalizare
- Suportul pentru IME-uri (Input Method Editors - editori de metode de intrare) a fost extins. S-au depus eforturi pentru a asigura compatibilitatea cu editorii nativi. Windows Implementări IME și integrare îmbunătățită cu Linux EU MIE
- Generarea bazelor de date locale în format locale.nls din baza de date Unicode CLDR (Unicode Common Locale Data Repository) versiunea 44 a fost furnizată Suport pentru locații suplimentare bew-ID, blo-BJ, csw-CA, ie-EE, mic-CA. , a fost adăugat prg-PL, skr-PK, tyv-RU, vmw-MZ, xnr-IN și za-CN.
- Interfața a fost tradusă în georgiană. Sunt oferite traduceri complete pentru 16 limbi și traduceri parțiale pentru 31 de limbi.
- Tabelele de caractere Unicode au fost actualizate la versiunea standard 15.1.0. Baza de date a fusului orar a fost actualizată.
- Nucleu (interfețe nucleu Windows)
- Ca versiune emisă Windows definit în mod implicit Windows 10.
- Pentru fișierele executabile în format PE, suportul pentru randomizarea spațiului de adrese (ASLR) este implementat, dar adresele pentru încărcarea codului în memorie nu sunt încă complet randomizate.
- A fost implementat suport pentru un heap slab fragmentat (LFH, Low Fragmentation Heap), ceea ce a crescut performanța operațiunilor de alocare a memoriei.
- Suportul pentru rezervarea memoriei (substituent) a fost adăugat mecanismului de alocare a memoriei virtuale, permițând unei aplicații să rezerve o anumită zonă de memorie virtuală pentru utilizare ulterioară.
- Încărcătoarele pe 64 de biți (încărcătorul și preîncărcarea) de fișiere executabile și biblioteci sunt compilate în formatul PIE (Executabile independente de poziție) pentru a elibera o parte din spațiul de adrese de 32 de biți.
- Derularea corectă a stivei este furnizată pentru apelurile de sistem NT și apelurile inverse ale utilizatorului.
- Caracteristici de rețea
- Motorul MSHTML acceptă mecanismul de colectare a gunoiului „Cycle Collection”.
- MSHTML a adăugat suport pentru procesarea sincronă a cererilor XMLHttpRequest.
- jscript.dll adaugă suport pentru un obiect WeakMap pentru a lucra cu o colecție de perechi cheie/valoare în care cheia este un obiect care poate avea o valoare arbitrară atașată. Implementarea metodelor WeakMap.get(), WeakMap.delete(), WeakMap.clear() și WeakMap.has().
- Motorul de browser Gecko a fost actualizat la versiunea 2.47.4.
- A fost implementat suport pentru notificări despre modificările stării interfeței de rețea.
- Criptografie și securitate
- Suport pentru carduri inteligente a fost adăugat la biblioteca Winscard.dll, implementat prin biblioteca de sistem PCSClite.
- BCrypt a adăugat suport pentru protocolul de schimb de chei Diffie-Hellman.
- Pachetul Negotiate a fost implementat, oferind un strat pentru utilizarea interfeței SSPI (Security Support Provider Interface) pentru a accesa furnizorii SSP (Security Support Provider).
- Aplicații încorporate
- Wine Debugger (winedbg) folosește biblioteca Zydis pentru a dezasambla instrucțiunile mașinii X86.
- Interfața WineCfg a fost actualizată pentru a oferi suport și pentru versiuni mai vechi pe platforme pe 64 de biți. Windows (înainte de XP), care vă permite să rulați aplicații vechi folosind modul WoW64.
- Toate aplicațiile grafice încorporate afișează acum informații despre eroare într-un dialog separat, în loc să le afișeze în consolă.
- Programul systeminfo oferă afișarea informațiilor din baza de date WMI (Windows Instrumentație de management).
- S-a adăugat aplicația klist pentru a afișa biletele Kerberos.
- Aplicația taskkill implementează capacitatea de a încheia forțat procesele copil.
- S-a adăugat opțiunea „/machine” la utilitarul de pornire pentru a selecta arhitectura utilizată atunci când rulează executabile hibride care acceptă x86 și ARM.
- Cea mai mare parte a funcționalității programului tasklist a fost implementată.
- S-a adăugat o implementare de bază a aplicației findstr.
- Instrumente de dezvoltare
- Utilitarul WineDump are capacitatea de a afișa conținutul fișierelor de registry. Windows (format REGF), precum și afișarea datelor pentru toate arhitecturile (x86/ARM64) acceptate în fișierele PE hibride.
- Compilatorul IDL a adăugat suport pentru atributele „composable”, „default_overload”, „deprecated” și „protected”.
- S-a eliminat libwine.so, care a fost depreciat în Wine 6.0 și nu a mai fost folosit de mult în Wine. Programele în format ELF construite în versiuni mai vechi de Wine (5.0 și mai vechi) cu libwine.so necesită reconstrucție pentru a rula în Wine 9.0.
- Biblioteci încorporate și dependențe externe
- Bibliotecile FluidSynth 2.3.3, Musl 1.2.3 (numai funcții matematice) și Zydis 4.0.0 sunt integrate în pachet.
- 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, LibXml1.1.38 1.3 au fost actualizate la versiunea 8.1.0Xs.XNUMX și XNUMXXs . Motorul Wine Mono cu implementarea platformei .NET a fost actualizat pentru lansarea XNUMX.
- Driverul winewayland.drv folosește biblioteca client Wayland ca dependențe externe, precum și bibliotecile xkbcommon și xkbregistry.
- Pentru a suporta cardurile inteligente, se utilizează biblioteca externă PCSClite (în macOS — PCSC).
- Construirea fișierelor PE pe platforme non-i386 necesită acum un compilator încrucișat cu suport pentru directivele „.seh” pentru a gestiona excepțiile.
Sursa: opennet.ru
