Po roce vývoje a 30 experimentálních verzích byl představen stabilní release otevřené implementace Win32 API — Wine 7.0, která zahrnuje více než 9100 změn. Mezi klíčová dosažení této verze patří převod většiny modulů Wine do formátu PE, podpora témat, rozšíření zásobníku pro joysticky a vstupní zařízení s rozhraním HID, a implementace architektury WoW64 pro spuštění 32bitových programů v 64bitovém prostředí.
Ve Wine byla potvrzena plná funkcionalita 5156 (před rokem 5049) programů pro Windows, dalších 4312 (před rokem 4227) programů funguje skvěle s dodatečnými nastaveními a externími DLL. U 3813 programů (před rokem 3703) se vyskytují drobné problémy, které však nebrání využití základních funkcí aplikací.
Klíčové novinky Wine 7.0:
- Moduly ve formátu PE
- Téměř všechny DLL knihovny byly převedeny na používání formátu spustitelných souborů PE (Portable Executable, používaný ve Windows) namísto ELF. Použití PE řeší problémy s podporou různých schémat ochrany proti kopírování, jež provádějí kontrolu identity systémových modulů na disku a v paměti.
- Byla realizována možnost interakce modulů PE s Unix knihovnami pomocí standardního systémového volání jádra NT, což umožňuje skrýt přístup k Unixovému kódu před ladícími nástroji Windows a sledovat registraci vláken.
- Vestavěné DLL jsou nyní načítány pouze v případě, že na disku existuje odpovídající soubor ve formátu PE, bez ohledu na to, zda se jedná o skutečnou knihovnu či zástupce. Toto změna umožňuje aplikaci vždy vidět správné provázání s PE soubory. Pro deaktivaci tohoto chování lze použít proměnnou prostředí WINEBOOTSTRAPMODE.
- WoW64
- Byla realizována architektura WoW64 (64-bit Windows-on-Windows), která umožňuje spouštět 32bitové Windows aplikace v 64bitových Unix procesech. Podpora byla zajištěna prostřednictvím připojení mezičlánku, který převádí 32bitové systémové volání NT na 64bitové volání k NTDLL.
- Mezivrstva WoW64 byla připravena pro většinu Unix knihoven a umožňuje 32bitovým modulům ve formátu PE přistupovat k 64bitovým Unix knihovnám. Po dokončení převodu všech modulů do formátu PE se objeví možnost spouštění 32bitových Windows aplikací bez nutnosti instalace 32bitových Unix knihoven.
- Témata
- Byla zavedena podpora vzhledových témat. Jsou zahrnuta témata „Světle“, „Modře“ a „Klasická Modrá“, která lze vybrat pomocí konfigurátoru WineCfg.
- Byla přidána možnost nastavení vzhledu všech prvků ovládání rozhraní pomocí vzhledových témat. Zajištěno automatické aktualizování vzhledu prvků po změně tématu.
- Do všech zabudovaných aplikací Wine byla přidána podpora vzhledových témat. Byla provedena adaptace aplikací pro obrazovky s vysokou hustotou pixelů (High DPI).
- Grafický subsystém
- Byla přidána nová knihovna Win32u, do které byly přesunuty části knihoven GDI32 a USER32, související se zpracováním grafiky a správou oken na úrovni jádra. V budoucnu začne práce na přesunu komponent driverů, jako jsou winex11.drv a winemac.drv, do Win32u.
- V driveru Vulkan byla implementována podpora specifikace grafického API Vulkan 1.2.201.
- Byla poskytnuta podpora pro výstup přes API Direct2D pro stínované geometrické objekty, s možností kontrolování výsledků kliknutí (hit-test).
- V API Direct2D byla zavedena počáteční podpora vizuálních efektů, aplikovaných pomocí rozhraní ID2D1Effect.
- Do API Direct2D bylo přidáno rozhraní ID2D1MultiThread, které se používá pro organizaci exkluzivního přístupu k prostředkům v multithreadových aplikacích.
- V sadě knihoven WindowsCodecs byla zavedena podpora dekódování obrázků ve formátu WMP (Windows Media Photo) a kódování obrázků do formátu DDS (DirectDraw Surface). Podpora pro kódování obrázků ve formátu ICNS (pro macOS), který není ve Windows podporován, byla ukončena.
- Direct3D
- Nový renderovací engine byl výrazně vylepšen a provádí překlad volání Direct3D do grafického API Vulkan. V drtivé většině situací byla úroveň podpory Direct3D 10 a 11 v enginu založeném na Vulkanu přivedena na paritu se starým enginem založeným na OpenGL. Pro aktivaci renderovacího enginu pomocí Vulkanu je třeba nastavit registr Direct3D proměnné „renderer“ na hodnotu „vulkan“.
- Byla implementována řada funkcí Direct3D 10 a 11, včetně odložených kontextů (Deferred Contexts), které pracují v kontextu zařízení, objektů stavu, stálých posunů v bufech, čištění neuspořádaných zobrazení textur, kopírování dat mezi prostředky v beztypuových formátech (DXGI_FORMAT_BC3_TYPELESS, DXGI_FORMAT_R32G32B32A32_TYPELESS) a další.
- Byla přidána podpora pro vícemonitorová uspořádání, která umožňuje vybrat monitor pro zobrazení aplikace Direct3D v režimu celé obrazovky.
- V API DXGI byla implementována funkce gamma korekce obrazu, která může být aplikována aplikacemi založenými na Direct3D 10 a 11 pro změnu jasnosti displeje. Bylo zajištěno získávání počitadla virtuálních framebufferů (SwapChain).
- Ve Direct3D 12 byla přidána podpora pro kořenové podpisy verze 1.1.
- V kódu vykreslování přes API Vulkan byla zvýšena efektivita zpracování požadavků při podpoře rozšíření VK_EXT_host_query_reset v systému.
- Byla přidána možnost vykreslování virtuálních framebufferů (SwapChain) přes GDI, pokud není možné použít OpenGL nebo Vulkan, například při výstupu do okna z různých procesů, jako jsou aplikace založené na rámci CEF (Chromium Embedded Framework).
- Při použití backendu pro shadery GLSL byla zajištěna aplikace modifikátoru 'precise' pro shaderové instrukce.
- V API DirectDraw byla přidána podpora 3D vykreslování do systémové paměti pomocí softwarových zařízení, jako jsou 'RGB', 'MMX' a 'Ramp'.
- Do databáze grafických karet Direct3D byly přidány 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 registru HKEY_CURRENT_USER\Software\Wine\Direct3D byl odstraněn klíč 'UseGLSL', místo něhož je od verze Wine 5.0 třeba použít 'shader_backend'.
- Pro podporu Direct3D 12 je nyní nutné mít knihovnu vkd3d verze alespoň 1.2.
- D3DX
- V implementaci D3DX 10 byla vylepšena podpora vizuálních efektů a přidána podpora formátu obrázků Windows Media Photo (JPEG XR).
- Byly přidány funkce pro vytváření textur poskytované v D3DX10, jako je D3DX10CreateTextureFromMemory().
- Částečně byly realizovány programové rozhraní ID3DX10Sprite a ID3DX10Font.
- Zvuk a video
- Do jednoho společného backendu WineGStreamer byly sloučeny nadstavby GStreamer pro DirectShow a rámec Media Foundation, což by mělo usnadnit vývoj nových API pro dekódování obsahu.
- Na základě backendu WineGStreamer byly realizovány objekty Windows Media pro synchronní a asynchronní čtení.
- Byla pokračována vylepšení implementace rámce Media Foundation, přidána podpora funkcionality IMFPMediaPlayer, alokátoru vzorků, vylepšená podpora EVR a výkresových bufferů SAR.
- Knihovna wineqtdecoder, která poskytovala dekodér pro formát QuickTime, byla odstraněna (pro všechny kodeky se nyní používá GStreamer).
- Vstupní zařízení
- Byl výrazně vylepšen zásobník pro vstupní zařízení podporující protokol HID (Human Interface Devices), který implementuje funkce jako analýza HID popisovačů, zpracování HID zpráv a poskytování mini ovladačů HID.
- Ve backendu ovladače winebus.sys byla vylepšena translace popisů zařízení do HID zpráv.
- Byl přidán nový backend DirectInput pro joysticky podporující protokol HID. Byla implementována možnost použití efektů zpětné vazby v joystickech. Vylepšeno ovládací panel interakci s joystickem. Byla optimalizována interakce se zařízeními kompatibilními s XInput. V WinMM byla podpora joysticků převedena na DInput, místo použití backendu evdev v Linuxu a IOHID v macOS. Byla odstraněna stará ovladač joysticků winejoystick.drv.
- Do modulu DInput byly přidány nové testy, které se zakládají na použití virtuálních HID zařízení a nevyžadují fyzické zařízení.
- Text a písma
- Do DirectWrite byl přidán objekt Font Set.
- V RichEdit byl správně implementován rozhraní TextHost.
- Jádro (rozhraní jádra Windows)
- Při spuštění v Wine neidentifikovaného spustitelného souboru (například 'wine foo.msi') se nyní vyvolává start.exe, který volá zpracovatele spojené s typem souboru.
- Byla přidána podpora mechanismů synchronizace NtAlertThreadByThreadId a NtWaitForAlertByThreadId, které jsou blízké futexům v Linuxu.
- Byla přidána podpora ladicích objektů NT, které se používají pro ladění funkcí jádra.
- Byla přidána podpora dynamických klíčů registru pro uchování dat o výkonu.
- C Runtime
- V C runtime byl implementován kompletní soubor matematických funkcí, který byl převážně přenesen z knihovny Musl.
- Pro všechny platformy CPU byla zajištěna správná podpora funkcí pro výpočty s plovoucí desetinnou čárkou.
- Síťové funkce
- Byl vylepšen režim kompatibility s Internet Explorer 11 (IE11), který je nyní používán jako výchozí pro zpracování HTML dokumentů.
- V knihovně mshtml byl implementován JavaScriptový mód ES6 (ECMAScript 2015), který zajišťuje podporu takových funkcí, jako je výraz let a objekt Map.
- Instalace MSI balíčků Wine do pracovního adresáře s doplňky k enginu Gecko se nyní provádí podle potřeby, nikoli během aktualizace Wine.
- Byla přidána podpora protokolu DTLS.
- Byla implementována služba NSI (Network Store Interface), která uchovává a předává jiným službám informace o routování a síťových rozhraních na počítači.
- API zpracovatelé WinSock, jako jsou setsockopt a getsockopt, byly přesunuty do knihovny NTDLL a ovladače afd.sys, aby odpovídaly architektuře Windows.
- Do pracovního adresáře Wine jsou nyní umisťovány vlastní soubory s síťovými databázemi, jako jsou /etc/protocols a /etc/networks, namísto přístupu k obdobným Unix databázím.
- Alternativní platformy
- Byla přidána podpora pro hardware Apple založený na čipech ARM M1 (Apple Silicon).
- Pro podporu funkcí BCrypt a Secur32 na platformě macOS nyní vyžaduje instalaci knihovny GnuTLS.
- 32bitové spustitelné soubory pro platformy ARM jsou nyní kompilovány v režimu Thumb-2, obdobně jako ve Windows. Pro načítání těchto souborů je použit preloader.
- Pro 32bitové platformy ARM byla implementována podpora pro rozmotávání (unwinding) výjimek.
- Pro FreeBSD bylo rozšířeno množství podporovaných dotazů o nízkoúrovňové informace o systému, jako jsou data o stavu paměti a úrovni nabití baterie.
- Vestavěné aplikace a nástroje pro vývoj
- Do nástroje reg.exe byla přidána podpora 32- a 64bitových zobrazení registru. Přidána podpora pro kopírování klíčů registru.
- Do nástroje WineDump byla přidána podpora pro výstup dumpu metadat Windows a zobrazení podrobných informací o záznamech CodeView.
- V ladicí nástroji Wine Debugger (winedbg) byla implementována možnost ladění 32bitových procesů z 64bitového ladicího programu.
- Do překladače IDL (widl) byla přidána možnost načítání knihoven vestavěných v PE souborech, byla zajištěna podpora specifických atributů a struktur pro WinRT a byl realizován vyhledávání knihoven vázaných na platformu.
- Systém sestavení
- V specifických adresářích pro hardwarové architektury jsou nyní knihovny ukládány s názvy odrážejícími architekturu a typ spustitelných souborů, například 'i386-windows' pro formát PE a 'x86_64-unix' pro unixové knihovny, což umožňuje implementaci podpory různých architektur v jedné instalaci Wine a zajišťuje kroskompilaci Winelib.
- Pro nastavení v hlavičkách PE souborů voleb, které řídí přechod na použití nativních DLL knihoven, byla do winebuild přidána volba '--prefer-native option' (zpracování DLL_WINE_PREATTACH v DllMain bylo zastaveno).
- Byla přidána podpora 4. verze formátu ladicích dat Dwarf, který je nyní používán jako výchozí při kompilaci knihoven Wine.
- Byla přidána kompilace volby '--enable-build-id' pro zachování unikátních identifikátorů sestavení v spustitelných souborech.
- Byla přidána podpora použití kompilátoru Clang v režimu kompatibility s MSVC.
- Různé
- Název standardních adresářů v uživatelském rozhraní (Windows Shell) byl přizpůsoben schématu používanému od Windows Vista, tj. místo ‚Mé dokumenty‘ se nyní vytváří adresář ‚Dokumenty‘ a většina dat se ukládá do adresáře ‚AppData‘.
- Do vrstvy pro knihovnu OpenCL byla přidána podpora specifikace OpenCL 1.2.
- Do ovladače WinSpool byla přidána podpora různých variant velikostí stránek při tisku.
- Byla přidána počáteční podpora MSDASQL, poskytovatele Microsoft OLE DB pro ovladače ODBC.
- Engin Wine Mono s implementací platformy .NET byl aktualizován na verzi 7.0.0.
- Údaje Unicode byly aktualizovány na specifikaci Unicode 14.
- Do stromu zdrojových textů byly integrovány knihovny Faudio, GSM, LCMS2, LibJPEG, LibJXR, LibMPG123, LibPng, LibTiff, LibXml2, LibXslt a Zlib, které se kompilují do formátu PE a nevyžadují verzi ve formátu Unix. Tyto knihovny mohou být také importovány ze systému pro použití externích sestavení místo vestavěných PE variant.
Zdroj: opennet.ru
