Po roku vývoja a 30 experimentálnych verzií bol predstavený stabilný release otvorenej implementácie Win32 API — Wine 7.0, ktorý zahŕňa viac ako 9100 zmien. Medzi kľúčové dosiahnutia novej verzie patrí prechod väčšiny modulov Wine na formát PE, podpora tém, rozšírenie zásobníka pre joystickové a vstupné zariadenia s rozhraním HID a implementácia architektúry WoW64 na spúšťanie 32-bitových programov v 64-bitovom prostredí.
V Wine bola potvrdená plná funkčnosť 5156 (pred rokom 5049) programov pre Windows, ďalších 4312 (pred rokom 4227) programov funguje vynikajúco s dodatočnými nastaveniami a externými DLL. U 3813 programov (pred rokom 3703) sa pozorujú drobné problémy v prevádzke, ktoré nebránia používaniu základných funkcií aplikácií.
Kľúčové novinky Wine 7.0:
- Moduly vo formáte PE
- Takmer všetky DLL knižnice boli prevedené na používanie formátu spustiteľných súborov PE (Portable Executable, používa sa v systéme Windows) namiesto ELF. Použitie PE rieši problémy s podporou rôznych schém ochrany pred kopírovaním, ktoré kontrolujú identitu systémových modulov na disku a v pamäti.
- Bola implementovaná možnosť interakcie modulov PE s Unix knihovnami prostredníctvom štandardného systémového volania jadra NT, čo umožňuje skryť prístup k Unix kódu od laditeľov Windows a sledovať registráciu vlákien.
- Vstavané DLL sa teraz načítavajú iba v prípade, že na disku sa nachádza príslušný súbor v formáte PE, nezávisle od toho, či ide o skutočnú knižnicu alebo zástupcu. Uvedená zmena umožňuje aplikácii vždy vidieť správne prepojenie na PE súbory. Na vypnutie tohto správania je možné použiť premennú prostredia WINEBOOTSTRAPMODE.
- WoW64
- Bola implementovaná architektúra WoW64 (64-bit Windows-on-Windows), ktorá umožňuje spúšťanie 32-bitových Windows aplikácií v 64-bitových Unix procesoch. Podpora je realizovaná prostredníctvom pripojenia vrstvy, ktorá prekladá 32-bitové systémové volania NT na 64-bitové volania na NTDLL.
- Vrstvy WoW64 sú pripravené pre väčšinu Unix knižníc a umožňujú 32-bitovým modulom v formáte PE pristupovať k 64-bitovým Unix knižniciam. Po dokončení prechodu všetkých modulov na formát PE sa objaví možnosť vykonávania 32-bitových Windows aplikácií bez inštalácie 32-bitových Unix knižníc.
- Témy
- Podpora tém bol implementovaná. Súčasťou sú témy „Light“, „Blue“ a „Classic Blue“, ktoré je možné vybrať prostredníctvom konfigurátora WineCfg.
- Bola pridaná možnosť prispôsobiť vzhľad všetkých prvkov rozhrania prostredníctvom tém. Zabezpečené automatické aktualizovanie vzhľadu prvkov po zmene témy.
- Všetky vstavané aplikácie Wine získali podporu tém. Aplikácie boli prispôsobené obrazovkám s vysokou hustotou pixelov (High DPI).
- Grafický subsystém
- Pridaná nová knižnica Win32u, do ktorej boli presunuté časti knižníc GDI32 a USER32, súvisiace s grafickým spracovaním a riadením okien na úrovni jadra. Následne sa začne práca na prenose komponentov ovládačov do Win32u, ako sú winex11.drv a winemac.drv.
- V ovládači Vulkan bola implementovaná podpora špecifikácie grafického API Vulkan 1.2.201.
- Poskytla sa podpora výstupu cez API Direct2D pre pruhované geometrické objekty s možnosťou kontroly úderu (hit-test).
- V API Direct2D bola implementovaná základná podpora vizuálnych efektov používaných pomocou rozhrania ID2D1Effect.
- API Direct2D pridalo podporu rozhrania ID2D1MultiThread, ktoré sa používa na organizáciu exkluzívneho prístupu k zdrojom v viacvláknových aplikáciách.
- V súbore knižníc WindowsCodecs bola implementovaná podpora dekódovania obrázkov vo forme WMP (Windows Media Photo) a kódovania obrázkov do formátu DDS (DirectDraw Surface). Podpora kódovania obrázkov vo formáte ICNS (pre macOS), ktorý nie je podporovaný v systéme Windows, bola zastavená.
- Direct3D
- Nový engine vykresľovania bol výrazne vylepšený, uskutočňujúci transláciu volaní Direct3D do grafického API Vulkan. V väčšine situácií bol úroveň podpory Direct3D 10 a 11 v engine na báze Vulkan zrovnaná so starým engine založeným na OpenGL. Pre aktiváciu vykresľovacieho engine cez Vulkan je potrebné nastaviť registry Direct3D premennú „renderer“ na hodnotu „vulkan“.
- Implementované mnohé možnosti Direct3D 10 a 11, vrátane odložených kontextov (Deferred Contexts), ktoré fungujú v kontexte zariadení, objekty stavu, trvalé posuny v vyrovnávacích pamätiach, čistenie neusporiadaných predstavení textúr, kopírovanie údajov medzi zdrojmi v typoch bez typov (DXGI_FORMAT_BC3_TYPELESS, DXGI_FORMAT_R32G32B32A32_TYPELESS) a podobne.
- Pridaná podpora viacmonitorových konfigurácií, ktorá umožňuje vybrať monitor na zobrazenie Direct3D aplikácie na celú obrazovku.
- V API DXGI bola implementovaná funkcia gama korekcie obrazovky, ktorá môže byť použitá aplikáciami založenými na Direct3D 10 a 11 na zmenu jasnosti obrazovky. Zabezpečené bolo získavanie čítačov virtuálnych rámcových vyrovnávacích pamätí (SwapChain).
- V Direct3D 12 bola pridaná podpora koreňových podpisov verzie 1.1.
- V kóde vykresľovania prostredníctvom API Vulkan bola zvýšená efektívnosť spracovania požiadaviek pri existencii podpory rozšírenia VK_EXT_host_query_reset v systéme.
- Pridaná možnosť výstupu virtuálnych rámcových vyrovnávacích pamätí (SwapChain) cez GDI, ak nemôžu byť použité na zobrazenie OpenGL alebo Vulkan, napríklad pri výstupe do okna z rôznych procesov, ako sú programy založené na frameworku CEF (Chromium Embedded Framework).
- Pri použití backendu pre shadery GLSL pre shadrové inštrukcie je zabezpečené použitie modifikátora „precise“.
- V API DirectDraw bola pridaná podpora 3D vykresľovania do systémovej pamäte, pričom sa používajú softvérové zariadenia, ako sú „RGB“, „MMX“ a „Ramp“.
- Do databázy grafických kariet Direct3D boli pridané karty AMD Radeon RX 5500M, AMD Radeon RX 6800/6800 XT/6900 XT, AMD Van Gogh, Intel UHD Graphics 630 a NVIDIA GT 1030.
- Z registra HKEY_CURRENT_USER\Software\Wine\Direct3D bol odstránený kľúč „UseGLSL“, namiesto ktorého je od verzie Wine 5.0 potrebné použiť „shader_backend“.
- Na podporu Direct3D 12 je teraz potrebná knižnica vkd3d aspoň verzie 1.2.
- D3DX
- V implementácii D3DX 10 bola zlepšená podpora frameworku vizuálnych efektov a pridaná podpora formátu obrázkov Windows Media Photo (JPEG XR).
- Pridané funkcie na vytváranie textúr poskytované v D3DX10, ako D3DX10CreateTextureFromMemory().
- Čiastočne boli implementované programové rozhrania ID3DX10Sprite a ID3DX10Font.
- Zvuk a video
- Do spoločného backendu WineGStreamer boli zlúčené GStreamer rozšírenia pre DirectShow a framework Media Foundation, čo by malo uľahčiť vývoj nových API dekódovania obsahu.
- Na základe backendu WineGStreamer boli implementované objekty Windows Media pre synchronné a asynchrónne čítanie.
- Pokračovalo sa v dokončovaní implementácie frameworku Media Foundation, bola pridaná podpora funkčnosti IMFPMediaPlayer, distribútora vzoriek (sample allocator), a bola zlepšená podpora EVR a vyrovnávacích pamätí na vykresľovanie SAR.
- Knižnica wineqtdecoder, poskytujúca dekodér pre formát QuickTime, bola odstránená (pre všetky kodeky sa teraz používa GStreamer).
- Vstupné zariadenia
- Výrazne zlepšený stack pre vstupné zariadenia podporujúce protokol HID (Human Interface Devices), ktorý implementuje možnosti ako analýza HID popisov, spracovanie HID správ a poskytovanie mini ovládačov HID.
- V backendoch ovládača winebus.sys bola vylepšená translácia popisov zariadení do HID správ.
- Bol pridaný nový backend DirectInput pre joystickové ovládače podporujúce protokol HID. Implementovali sa možnosti použitia efektov spätnej väzby v joystickoch. ovládací panel Optimalizovalo sa interakcia s zariadeniami kompatibilnými s XInput. V WinMM bola podpora joystickov prevedená na DInput, namiesto použitia backendu evdev v Linuxe a IOHID v macOS. Starý ovládač joystickov winejoystick.drv bol odstránený.
- Do modulu DInput boli pridané nové testy založené na použití virtuálnych HID zariadení a nevyžaduje prítomnosť fyzického zariadenia.
- Text a písma
- Do DirectWrite bol pridaný objekt Font Set.
- V RichEdit bol správne implementovaný rozhranie TextHost.
- Jadro (rozhrania jadra Windows)
- Pri spustení neznámeho spustiteľného súboru v Wine (napríklad ‘wine foo.msi’) sa teraz volá start.exe, ktorý spúšťa handleri súvisiace s typom súboru.
- Bola pridaná podpora synchronizačných mechanizmov NtAlertThreadByThreadId a NtWaitForAlertByThreadId, ktoré sú blízke futexom v Linuxe.
- Bola pridaná podpora pre debugovacie objekty NT používané na ladenie funkcií jadra.
- Bola pridaná podpora pre dynamické registry kľúče na uchovávanie údajov o výkonnosti.
- C Runtime
- V C runtime bol implementovaný úplný súbor matematických funkcií, ktorý bol hlavne prenesený z knižnice Musl.
- Pre všetky platformy CPU bola zabezpečená správna podpora funkcií na výpočty s pohyblivou desatinnou čiarkou.
- Network capabilities
- Zlepšený režim kompatibility s Internet Explorer 11 (IE11), ktorý sa teraz používa ako predvolený na spracovanie HTML dokumentov.
- V knižnici mshtml bol implementovaný JavaScript režim ES6 (ECMAScript 2015), ktorý zabezpečuje podporu pre možnosti ako výraz let a objekt Map.
- Inštalácia doplnkov Wine MSI balíkov do pracovného adresára sa teraz vykonáva podľa potreby, nie pri aktualizácii Wine.
- Pridaná podpora protokolu DTLS.
- Bol implementovaný servis NSI (Network Store Interface), ktorý uchováva a prenáša informácie o smerovaní a sieťových rozhraniach na počítači iným servisom.
- API spracovatelia WinSock, ako setsockopt a getsockopt, boli presunuté do knižnice NTDLL a ovládača afd.sys, aby zodpovedali architektúre Windows.
- Do pracovného adresára Wine sa teraz inštalujú vlastné súbory so sieťovými DB, ako napríklad /etc/protocols a /etc/networks, namiesto odkazu na podobné Unix DB.
- Alternatívne platformy
- Pridaná podpora hardvéru Apple založeného na ARM čipoch M1 (Apple Silicon).
- Na podporu funkcií BCrypt a Secur32 na platforme macOS je teraz potrebné nainštalovať knižnicu GnuTLS.
- 32-bitové spustiteľné súbory pre platformy ARM sa teraz zostavujú v režime Thumb-2, podobne ako v systéme Windows. Na načítanie takýchto súborov je použitý preloader.
- Na 32-bitových platformách ARM bola implementovaná podpora rozvinovania (unwinding) výnimiek.
- Pre FreeBSD bolo rozšírené množstvo podporovaných požiadaviek na nízkoúrovňové informácie o systéme, ako sú údaje o stave pamäte a úrovni nabitia batérie.
- Vstavané aplikácie a nástroje na vývoj
- Do nástroja reg.exe sa pridala podpora 32- a 64-bitových reprezentácií registra. Pridaná podpora kopírovania kľúčov registra.
- Do nástroja WineDump sa pridala podpora výstupu dumpu metadát Windows a zobrazenia podrobných informácií o záznamoch CodeView.
- V ladení Wine Debugger (winedbg) bola realizovaná možnosť ladění 32-bitových procesov z 64-bitového debuggera.
- Do kompilátora IDL (widl) bola pridaná možnosť načítania knižníc integrovaných do PE súborov, bola zabezpečená podpora atribútov a konštrukcií špecifických pre WinRT, ako aj realizovaný vyhľadávanie knižníc viazané na platformu.
- Systém zostavovania
- V adresároch špecifických pre architektúry sa knižnice teraz ukladajú s názvami, ktoré odrážajú architektúru a typ spustiteľných súborov, napríklad 'i386-windows' pre formát PE a 'x86_64-unix' pre unixové knižnice, čo umožňuje implementovať podporu rôznych architektúr v jednej inštalácii Wine a zabezpečiť krížovú kompiláciu Winelib.
- Na nastavenie v hlavičkách PE súborov volieb, ktoré riadia prechod na používanie natívnych DLL knižníc, bol do winebuild pridaný parameter '--prefer-native option' (spracovanie DLL_WINE_PREATTACH v DllMain bolo zastavené).
- Pridaná podpora 4. verzie formátu debugovacích údajov Dwarf, ktorý sa teraz používa ako predvolený pri zostavovaní knižníc Wine.
- Pridaná zostavovacia možnosť '--enable-build-id' na zachovanie unikátnych identifikátorov zostavenia v spustiteľných súboroch.
- Pridaná podpora pre použitie kompilátora Clang v režime kompatibility s MSVC.
- Rôzne
- Názvy typových adresárov v používateľskom prostredí (Windows Shell) boli prispôsobené schéme používané od Windows Vista, t.j., namiesto 'Moje dokumenty' sa teraz vytvára adresár 'Dokumenty' a väčšina údajov sa ukladá do adresára 'AppData'.
- V medzivrstve pre knižnicu OpenCL bola pridaná podpora špecifikácie OpenCL 1.2.
- V ovládači WinSpool bola pridaná podpora rôznych variantov veľkostí strán pri tlači.
- Pridaná počiatočná podpora MSDASQL, poskytovateľa Microsoft OLE DB pre ovládače ODBC.
- Engin Wine Mono s implementáciou platformy .NET bol aktualizovaný na verziu 7.0.0.
- Údaje Unicode boli aktualizované na špecifikáciu Unicode 14.
- Do stromu zdrojových textov boli začlenené knižnice Faudio, GSM, LCMS2, LibJPEG, LibJXR, LibMPG123, LibPng, LibTiff, LibXml2, LibXslt a Zlib, ktoré sú kompilované vo formáte PE a nevyžadujú variant v Unix formáte. Tieto knižnice môžu byť tiež importované zo systému na použitie externých zostáv namiesto zabudovaných PE variantov.
Zdroj: opennet.ru
