Po roku vývoja a 26 experimentálnych verziách bol uvedený stabilný release otvorenej implementácie Win32 API — Wine 9.0, ktorý obsahuje viac ako 7000 zmien. Medzi kľúčové dosiahnuté ciele v novej verzii patrí implementácia architektúry WoW64 na spúšťanie 32-bitových programov v 64-bitovom prostredí, integrácia ovládača pre podporu Waylandu, podpora architektúry ARM64, implementácia API DirectMusic a podpora smart kariet.
Vo Wine bola potvrdená plná funkčnosť 5336 (pred rokom 5266, pred dvoma rokmi 5156, pred tromi rokmi 5049) programov pre Windows, ďalších 4397 (pred rokom 4370, pred dvoma rokmi 4312, pred tromi rokmi 4227) programov funguje výborne pri dodatočných nastaveniach a externých DLL. U 3943 programov (pred rokom 3888, pred dvoma rokmi 3813, pred tromi rokmi 3703) sa vyskytujú drobné problémy, ktoré však nebránia používaniu základných funkcií aplikácií.
Kľúčové novinky Wine 9.0:
- Bol pridaný ovládač winewayland.drv, ktorý umožňuje používať Wine v prostrediach postavených na protokole Wayland bez nutnosti použitia XWayland a komponentov X11. Vývoj je zameraný na zabezpečenie fungovania čistého Wayland prostredia s podporou spúšťania aplikácií Windows, ktoré nevyžaduje inštaláciu balíkov súvisiacich s X11, čo umožňuje dosiahnuť vyšší výkon a rýchlejšiu odozvu hier vďaka odstráneniu zbytočných vrstiev. Použitie čistého prostredia Wayland pre Wine taktiež umožňuje zbaviť sa problémov so zabezpečením, ktoré sú pre X11 typické (napríklad nedôveryhodné hry pre X11 môžu špehovať iné aplikácie, pretože protokol X11 umožňuje prístup ku všetkým vstupným udalostiam a realizovať substitúciu fiktívnych stlačení klávesov).
Ovládač je označený ako experimentálny a stále sa vyvíja, ale už teraz podporuje mnohé funkcie, ako je správa okien, práca s viacerými monitormi, podpora škálovania výstupu na obrazovkách s vysokou hustotou pixelov (high-DPI), práca s relatívnymi súradnicami pri sledovaní pohybu myši a podpora grafického API Vulkan. Predvolene nie je ovládač aktívny a na jeho aktiváciu je potrebné pridať „wayland“ do registru v parametri „HKCU\Software\Wine\Drivers“ a zabezpečiť, aby nebola nastavená premenná prostredia DISPLAY: wine reg.exe add HKCU\\Software\\Wine\\Drivers /v Graphics /d x11,wayland
- Bol preložený všetok modul na rozhranie systémových volaní NT, namiesto vykonávania priamych volaní medzi úrovňami PE a Unix, čo znamenalo dokončenie mnohoročnej práce na preklade všetkých DLL knižníc na používanie formátu spustiteľných súborov PE (Portable Executable).
- Pokračoval vývoj vrstvy WoW64 (64-bit Windows-on-Windows), ktorá umožňuje spúšťať 32-bitové Windows aplikácie v 64-bitových Unix systémoch. Vo všetkých moduloch, ktoré sa obracajú na Unix knižnice, sú zapojené prevodníky systémových volaní WoW64 (thunk), ktoré umožňujú 32-bitovým modulom vo formáte PE obrátiť sa na 64-bitové Unix knižnice.
Vylepšený nový režim spúšťania WoW64, v ktorom sa 32-bitový kód vykonáva vnútri 64-bitového procesu (v starom režime WoW64 sa 32-bitové aplikácie spúšťali v 32-bitových Unix procesoch). Pridaná podpora použitia nového režimu WoW64 na platforme macOS. Pretože v novom režime WoW64 sú zaznamenané jednotlivé nedostatky, ako napríklad absencia podpory 16-bitového režimu a zníženie výkonu OpenGL kvôli absencii podpory rozšírenia ARB_buffer_storage, zatiaľ nie je zapnutý predvolene a vyžaduje si zostavenie s možnosťou „—enable-archs=i386,x86_64“ v skripte configure.
- Pridaná možnosť vykonávania existujúcich spustiteľných súborov Windows na systémoch s architektúrou ARM64. Realizovaná možnosť zostavenia Wine pre ABI ARM64EC (ARM64 Emulation Compatible) a podpora načítania modulov ARM64EC, ktoré sa používajú na uľahčenie portovania na systémy ARM64 aplikácií, ktoré boli pôvodne napísané pre architektúru x86_64, prostredníctvom poskytnutia možnosti vykonávania v prostredí ARM64 jednotlivých modulov s kódom x86_64 pomocou emulátora. Pridaná podpora formátu PE súborov ARM64X, ktorý umožňuje načítanie jedného spustiteľného súboru v procesoch x64/Arm64EC a ARM64. Realizované rozhranie na emuláciu 32-bitových systémov x86, ale knižnica s emulátorom zatiaľ nie je zahrnutá v hlavnom zložení Wine (na spúšťanie x86 kódu v prostredí ARM64 sa môže použiť externý emulátor FEX).
- Grafický subsystém
- Ovládač PostScript bol prepracovaný na podporu spool súborov vo formáte Windows, v ktorých sú uložené údaje o úlohách, ktoré sa posielajú na tlač. Priame prístupy k ovládaču z Unix prostredia boli vylúčené.
- V témach WinRT bola pridaná podpora tmavého režimu. V aplikácii WineCfg bola pridaná možnosť povoliť tmavé rozhranie.
- V ovládači pre grafické API Vulkan bola pridaná podpora špecifikácie Vulkan 1.3.272 (v Wine 8.0 bola podpora 1.3.237).
- Bola optimalizovaná funkcia knižnice GdiPlus, čo viedlo k zvýšeniu výkonu pri práci s grafikou.
- Direct3D
- Bola zabezpečená pozastavovanie analýzy viacerých prúdov príkazov v prípade, že nie sú spracované príkazy na vykresľovanie, čím sa znižuje spotreba energie na úroveň jedného prúdu pri vykonávaní programov, ktoré nezaberajú celú šírku pásma prúdov príkazov.
- V Direct3D 10 bola implementovaná podpora pre dodatočné efekty.
- Boli zavedené optimalizácie výkonu v kóde WineD3D a backend, ktorý využíva grafické API Vulkan.
- V kóde vykresľovania založenom na API Vulkan bola pridaná kontrola možností podporovaných zariadením a poskytnú aplikácii informácie o dostupnej úrovni funkcionality Direct3D.
- Boli implementované funkcie D3DXFillTextureTX a D3DXFillCubeTextureTX.
- Do klasického backendu OpenGL ARB bola pridaná podpora určovania tieňov pomocou rozšírenia ARB_fragment_program_shadow.
- V D3DXLoadMeshHierarchyFromX a podobných funkciách bola pridaná podpora pre načítanie používateľských údajov pomocou rozhrania ID3DXLoadUserData.
- Zvuk a video
- Bola navrhnutá počiatočná implementácia API DirectMusic. Bola pridaná podpora kolekcií, nástrojov a zvukových vzoriek vo formáte SoundFont. Bola pridaná podpora Dopplerovho efektu. Boli implementované testy na overenie správnosti implementácie pri práci s sekvencorom dmime a MIDI syntetizátorom dmsynth.
- Pre použitie v API DirectMusic je zabudovaná knižnica FluidSynth.
- Bola implementovaná podpora načítania zvukových fontov (SoundFont — formáty pre syntézu na základe vzoriek, ktoré sa používajú na prehrávanie MIDI súborov) vo formátoch DLS1 a DLS2, ako aj vo formáte SF2, ktorý sa používa v Linuxe.
- Bola pridaná možnosť prehrávania MIDI obsahu pomocou knižnice dmsynth s využitím softvérového syntetizátora FluidSynth a API DirectSound pre výstup zvuku.
- Bol pridaný dekodér pre videá vo formáte videokodéka Indeo IV50.
- DirectShow
- Bol implementovaný komponent DMO (DirectX Media Object) s dekodérom formátu WMV (Windows Media Video).
- Bol pridaný filter na zachytávanie zvuku (DirectShow Audio Capture Filter).
- V filtre na rozdelenie tokov MPEG‑1 (DirectShow MPEG‑1 Stream Splitter) bola pridaná podpora video tokov a servisných tokov, okrem zvukových tokov.
- Implementovaný filter na dekódovanie videa vo formáte MPEG‑1 (DirectShow MPEG‑1 Video Decoder).
- Vstupné zariadenia
- V DirectInput bola implementovaná podpora mapovania akcií (action maps), ktorá umožňuje priradiť tlačidlá na hernom ovládači k určitým akciám v hrách.
- Integrácia s pracovnou plochou
- Zabezpečené exportovanie do hlavného používateľského prostredia nastavení, ktoré umožňujú spúšťať aplikácie riadené Wine ako spracovateľov protokolov pri otváraní URL (napríklad spustenie spotify.exe pri otvorení odkazov vo forme „spotify:user:spotify:playlist:848218482355482821“).
- Implementované extrahovanie údajov EDID (Extended Display Identification Data) s informáciami o parametroch pripojeného monitora, ako sú názov a model zariadenia.
- Poskytla sa možnosť zavrieť okno pracovnej plochy rozšírenej na celú obrazovku pomocou tlačidla „Exit desktop“ v ponuke „Start“.
- Internacionalizácia
- Rozšírená podpora IME (Input Method Editors). Vykonané práce na zabezpečení kompatibility s natívnymi realizáciami IME pre Windows a zlepšení integrácie s IME v Linuxe.
- Zabezpečená generácia databázy lokalít vo formáte locale.nls z databázy Unicode CLDR (Unicode Common Locale Data Repository) verzie 44. Pridaná podpora dodatočných lokalít bew-ID, blo-BJ, csw-CA, ie-EE, mic-CA, prg-PL, skr-PK, tyv-RU, vmw-MZ, xnr-IN a za-CN.
- Prevedený preklad rozhrania do gruzínskeho jazyka. Poskytované kompletné preklady pre 16 jazykov, pričom pre 31 jazykov sú čiastočné.
- Tabuľky symbolov Unicode boli aktualizované na verziu štandardu 15.1.0. Aktualizovaná databáza časových zón.
- Jadro (rozhrania jadra Windows)
- Ako predvolená verzia Windows bola určená Windows 10.
- Pre spustiteľné súbory vo formáte PE bola implementovaná podpora randomizácie adresného priestoru (ASLR), avšak adresy načítania kódu do pamäte zatiaľ nie sú úplne randomizované.
- Implementovaná podpora slabo fragmentovanej hromady (LFH, Low Fragmentation Heap), čo umožnilo zvýšiť výkon operácií alokácie pamäte.
- Do mechanizmu alokácie virtuálnej pamäte bola pridaná podpora pre rezervovanie pamäte (placeholder), čo umožňuje aplikácii rezervovať určitú oblasť virtuálnej pamäte na budúce využitie.
- 64-bit boot loaders (loader and preloader) for executable files and libraries are assembled in the PIE (Position-Independent Executables) format to free up part of the 32-bit address space.
- Correct stack unwinding is ensured for NT system calls and user callback calls.
- Network capabilities
- The MSHTML engine has implemented garbage collection support through the 'Cycle Collection' mechanism.
- MSHTML has added support for synchronous processing mode of XMLHttpRequest requests.
- The jscript.dll has added support for the WeakMap object for handling collections of key/value pairs, where the key is an object to which arbitrary values can be attached. The methods WeakMap.get(), WeakMap.delete(), WeakMap.clear(), and WeakMap.has() have been implemented.
- The Gecko browser engine has been updated to version 2.47.4.
- Support for notifications of network interface state changes has been implemented.
- Cryptography and security
- The Winscard.dll library has added support for smart cards implemented via the PCSClite system library.
- BCrypt has added support for the Diffie-Hellman key exchange protocol.
- The Negotiate package has been implemented, providing a layer for using the SSPI (Security Support Provider Interface) to access SSP (Security Support Provider) providers.
- Built-in applications
- In the Wine Debugger (winedbg), the Zydis library is utilized for disassembling X86 machine instructions.
- The WineCfg interface has been enhanced to set older Windows versions (up to XP) on 64-bit platforms, allowing the launch of outdated applications using WoW64 mode.
- All built-in graphical applications now output error information in a separate dialog instead of displaying it in the console.
- The systeminfo program now displays information from the WMI (Windows Management Instrumentation) database.
- The klist application has been added to display Kerberos tickets.
- The taskkill application has implemented the ability to forcibly terminate child processes.
- The start utility has added the '/machine' parameter to select the architecture used when launching hybrid executables that support both x86 and ARM.
- Most of the functionality of the tasklist program has been implemented.
- A basic implementation of the findstr application has been added.
- Development tools
- V utilite WineDump bola implementovaná možnosť výstupu obsahu súborov registrov Windows (formát REGF) a zobrazenia údajov pre všetky architektúry (x86/ARM64) podporované v hybridných PE súboroch.
- V kompilátore IDL bola pridaná podpora atribútov „composable“, „default_overload“, „deprecated“ a „protected“.
- Bola odstránená knižnica libwine.so, ktorá bola označená za zastaranú v verzii Wine 6.0 a už sa dlho nepoužívala v Wine. Programy vo formáte ELF, zostavené v starých verziách Wine (5.0 a starších) s libwine.so, na spustenie vo Wine 9.0 vyžadujú prekompiláciu.
- Zabudované knižnice a externé závislosti
- Do súboru boli integrované knižnice FluidSynth 2.3.3, Musl 1.2.3 (iba matematické funkcie) a Zydis 4.0.0.
- Aktualizované na nové verzie komponenty 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 a Zlib 1.3. Engine Wine Mono s implementáciou platformy .NET bol aktualizovaný na verziu 8.1.0.
- V ovládači winewayland.drv ako externé závislosti sú použité klientská knižnica Wayland a knižnice xkbcommon a xkbregistry.
- Na podporu smart kariet bola použitá externá knižnica PCSClite (v macOS – PCSC).
- Na zostavenie PE súborov na platformách odlišných od i386 je teraz potrebný krížový kompilátor so podporou direktív „.seh“ na spracovanie výnimiek.
Zdroj: opennet.ru
