Egy év fejlesztés és 26 kísérleti verzió után bemutatásra került a Win32 API nyílt forráskódú implementációjának stabil kiadása — a Wine 9.0, amely több mint 7000 változást tartalmaz. Az új verzió kulcsfontosságú vívmányai közé tartozik a WoW64 architektúra megvalósítása 32 bites programok futtatásához 64 bites környezetben, a Wayland támogatásához szükséges illesztőprogram integrálása, az ARM64 architektúra támogatása, a DirectMusic API megvalósítása és az okkártyák támogatása.
A Wine alatt a Windows 5336 alkalmazás teljes funkcionalitása igazolt (egy évvel ezelőtt 5266, két évvel ezelőtt 5156, három évvel ezelőtt 5049), további 4397 (egy évvel ezelőtt 4370, két évvel ezelőtt 4312, három évvel ezelőtt 4227) alkalmazás tökéletesen működik kiegészítő beállításokkal és külső DLL-ekkel. 3943 alkalmazás esetében (egy évvel ezelőtt 3888, két évvel ezelőtt 3813, három évvel ezelőtt 3703) kisebb problémák jelentkeznek, amelyek nem zavarják az alkalmazások alapvető funkcióinak használatát.
A Wine 9.0 kulcsfontosságú újításai:
- Hozzáadva a winewayland.drv illesztőprogram, amely lehetővé teszi a Wine használatát Wayland protokoll alapú környezetekben XWayland és X11 komponensek alkalmazása nélkül. A fejlesztés célja, hogy biztosítsa a tiszta Wayland-környezet működését Windows-alkalmazások futtatásának támogatásával, anélkül hogy X11-hez kapcsolódó csomagokat kellene telepíteni, ezzel javítva a teljesítményt és a játékok reakcióképességét a felesleges rétegek kiküszöbölésével. A Wine számára a tiszta Wayland környezet használata szintén lehetővé teszi a X11-hez kapcsolódó biztonsági problémák felszámolását (például, megbízhatatlan X11 játékok kémkedhetnek más alkalmazások után, mivel a X11 protokoll hozzáférést biztosít minden bemeneti eseményhez és hamis billentyűlenyomások beszúrására).
Az illesztőprogram kísérleti és fejlesztés alatt áll, de már most is támogat számos funkciót, például az ablakkezelést, a több monitorral való munkát, a nagy sűrűségű kijelzők (high-DPI) skálázásának támogatását, a relatív koordináták használatát az egérmozgás nyomkövetésekor és a Vulkan grafikus API támogatását. Alapértelmezés szerint az illesztőprogram inaktív, és a bekapcsolásához hozzá kell adni a „wayland” értéket a „HKCU\Software\Wine\Drivers” regisztrációs paraméterhez, valamint biztosítani kell, hogy a DISPLAY környezeti változó ne legyen beállítva: wine reg.exe add HKCU\\Software\\Wine\\Drivers /v Graphics /d x11,wayland
- Minden modul fordítása megtörtént a NT rendszerhívási interfészre, közvetlen hívások helyett a PE és Unix szintek között, ami a PE (Portable Executable) fájlformátumra való áttérés évtizedes munkájának a befejezését jelenti az összes DLL könyvtárban.
- Folytatódott a WoW64 (64-bites Windows-on-Windows) réteg fejlesztése, amely lehetővé teszi 32 bites Windows alkalmazások futtatását 64 bites Unix rendszereken. Minden modulban, amely Unix könyvtárakhoz kapcsolódik, system call átalakítókat (thunk) használnak, lehetővé téve a PE formátumú 32 bites modulok számára a 64 bites Unix könyvtárak elérését.
Fejlesztettük a WoW64 új indítási módját, amelyben a 32 bites kód 64 bites folyamatban fut. A régi WoW64 módban a 32 bites alkalmazások 32 bites Unix folyamatokban indultak. Hozzáadtuk az új WoW64 mód támogatását a macOS platformon. Mivel az új WoW64 módban néhány hiányosság tapasztalható, mint például a 16 bites mód támogatásának hiánya és az OpenGL teljesítményének csökkenése az ARB_buffer_storage bővítmény támogatásának hiánya miatt, ez a beállítás jelenleg nem engedélyezett alapértelmezetten, és a configure scriptben az "--enable-archs=i386,x86_64" opcióval kell összerakni.
- Lehetőség nyílt meglévő Windows végrehajtható fájlok futtatására ARM64 architektúrájú rendszereken. Megvalósítottuk a Wine ARM64EC (ARM64 Emulation Compatible) ABI számára történő összeépítését és ARM64EC modulok betöltését, amelyek megkönnyítik az ARM64 rendszerekre való portolást, eredetileg x86_64 architektúrára írt alkalmazások számára, az x86_64 kódú modulok ARM64 környezetben történő futtatásával emulátor segítségével. Támogatást kaptak az ARM64X PE fájlformátum számára, amely lehetővé teszi egy végrehajtható fájl betöltését x64/ARM64EC és ARM64 folyamatokban. Kidolgoztunk egy interfészt a 32 bites x86 rendszerek emulálásához, de az emulátort tartalmazó könyvtár még nem része a Wine alapcsomagnak (az x86 kód ARM64 környezetben történő futtatásához külső FEX emulátor használható).
- Grafikai alrendszer
- A PostScript illesztőprogram átdolgozásra került, hogy támogassa a Windows formátumú spool fájlokat, amelyek a nyomtatási feladatok adatait tárolják. Kivéve a közvetlen hívásokat a meghajtóból Unix környezetből.
- A WinRT témákban támogatást kaptak a sötét üzemmódhoz. A WineCfg-be új beállítás került, amely lehetővé teszi a sötét felhasználói felület engedélyezését.
- A Vulkan grafikus API illesztőprogramjába bekerült a Vulkan 1.3.272 specifikáció támogatása (a Wine 8.0-ban a 1.3.237 volt támogatott).
- Optimalizálva lett a GdiPlus könyvtár funkciói, amelyek javították a grafika kezelésének teljesítményét.
- Direct3D
- Biztosítva lett a több szálú parancsfolyam elemzésének leállítása, ha nincsenek feldolgozandó rajzolási parancsok, ez lehetővé teszi az energiafogyasztás csökkentését az egy szálú feldolgozás szintjére olyan programok végrehajtása során, amelyek nem használják ki teljesen a parancsfolyam sávszélességét.
- A Direct3D 10-ben további effektek támogatása került megvalósításra.
- Teljesítményoptimalizálások kerültek végrehajtásra a WineD3D kódjában és abban a backendben, amely a Vulkan grafikus API-t használja.
- A Vulkan API alapú rajzoló kódhoz hozzáadva lett a készülék által támogatott lehetőségek ellenőrzése és információk megjelenítése az alkalmazásnak a Direct3D elérhető funkcionális szintjéről.
- Megvalósultak a D3DXFillTextureTX és D3DXFillCubeTextureTX funkciók.
- A klasszikus OpenGL ARB shaderek backendbe bekerült a sziluettek meghatározásának támogatása az ARB_fragment_program_shadow kiterjesztés segítségével.
- A D3DXLoadMeshHierarchyFromX és hasonló funkciókhoz hozzáadva lett a felhasználói adatok betöltésének támogatása az ID3DXLoadUserData interfészen keresztül.
- Hang és video
- Kezdeti megvalósítása javasolt a DirectMusic API-nak. Hozzáadva lett a gyűjtemények, hangszerelmények és SoundFont formátumban lévő hangminták támogatása. Támogatva van a Doppler-effektus. Tesztelési eljárásokat valósítottak meg a dmime szekvenszor és a dmsynth MIDI szintetizátor megfelelő működésének ellenőrzésére.
- Az DirectMusic API számára beépítették a FluidSynth könyvtárat.
- Megvalósítva lett a hangminták (SoundFont – a minták alapú szintézishez használt formátumok, amelyek MIDI-fájlok lejátszására szolgálnak) DLS1, DLS2 és SF2 formátumú betöltésének támogatása, amelyeket Linuxban használnak.
- Lehetővé vált a MIDI-tartalom lejátszása a dmsynth könyvtár használatával a FluidSynth szoftveres szintetizátor és a DirectSound API segítségével.
- Hozzáadva lett egy dekóder az Indeo IV50 videokodek formátumú videókhoz.
- DirectShow
- Megvalósítva lett egy DMO (DirectX Media Object) komponens WMV (Windows Media Video) formátumú dekóderrel.
- Hozzáadva lett egy hangrögzítő szűrő (DirectShow Audio Capture Filter).
- Az MPEG-1 (DirectShow MPEG-1 Stream Splitter) szűrőhöz, a hangfolyamok mellett, hozzáadva lett a videofolyamok és segédfolyamok támogatása is.
- Megvalósítva lett egy szűrő MPEG-1 formátumú videók dekódolásához (DirectShow MPEG-1 Video Decoder).
- Bemeneti eszközök
- A DirectInput támogatja a tevékenységek leképezését (action maps), amely lehetővé teszi a játékvezérlő gombjainak hozzárendelését a játékokban végrehajtandó konkrét tevékenységekhez.
- Asztali integráció
- Biztosítva van az alapfelhasználói környezetbe való exportálás, amely lehetővé teszi a Wine alatt futó alkalmazások protokollkezelőként való indítását URL megnyitásakor (például a spotify.exe indítása a «spotify:user:spotify:playlist:848218482355482821» típusú linkek megnyitásakor).
- Megvalósították az EDID (Extended Display Identification Data) adatok kinyerését, amelyek információt adnak a csatlakoztatott monitor jellemzőiről, mint például a készülék neve és modellje.
- Lehetővé vált a teljes képernyős módban megjelenő asztali ablak bezárása a „Exit desktop” gomb használatával a „Start” menüben.
- Nemzetköziesítés.
- Bővült az IME (Input Method Editors) támogatás. Dolgoztak a Windows natív IME megoldásaival való kompatibilitás biztosításán és a Linux IME integrációjának javításán.
- Megvalósították a nyelvek adatbázisának generálását locale.nls formátumban az Unicode CLDR (Unicode Common Locale Data Repository) 44-es verziójából. További nyelvek támogatása került hozzáadásra: bew-ID, blo-BJ, csw-CA, ie-EE, mic-CA, prg-PL, skr-PK, tyv-RU, vmw-MZ, xnr-IN és za-CN.
- Lezajlott a felhasználói felület grúz nyelvre való fordítása. Teljes fordítások készültek 16 nyelven, míg 31 nyelven részleges fordítások készültek.
- A Unicode karaktertáblák frissítve lettek a 15.1.0 szabvány verziójára. Az időzónák adatbázisát is frissítették.
- Kernel (Windows kernel interfészek)
- Alapértelmezett Windows verzióként a Windows 10 került meghatározásra.
- A PE formátumú végrehajtható fájlok számára megvalósították a címek elérhetőségének véletlenszerűsítését (ASLR), de a betöltési címek teljesen nem randomizáltak a memóriába.
- Megvalósították a gyenge fragmentáltságú heap (LFH, Low Fragmentation Heap) támogatását, ami javította a memóriaallokációs műveletek teljesítményét.
- A virtuális memória allokációs mechanizmusába beépítették a memória fenntartásának (placeholder) támogatását, lehetővé téve a program számára, hogy jövőbeli használatra fenntartson egy meghatározott virtuális memória területet.
- A 64 bites betöltők (loader és preloader) végrehajtható fájlok és könyvtárak PIE (Position-Independent Executables) formátumban lettek összeszerelve, felszabadítva ezzel a 32 bites címzési tér egy részét.
- Biztosítva van a stack unwinding helyes végrehajtása az NT rendszerhívások és a felhasználói callback hívások esetében.
- Hálózati lehetőségek.
- Az MSHTML motorjában megvalósították a „Cycle Collection” szemétgyűjtési mechanizmus támogatását.
- Az MSHTML-ben megvalósították az XMLHttpRequest kérések szinkron kezelésének támogatását.
- A jscript.dll-be integrálták a WeakMap objektum támogatását, amely kulcs/érték pár gyűjteményeihez kapcsolódik, ahol a kulcs egy objektum, amelyhez tetszőleges érték társítható. Megvalósították a WeakMap.get(), WeakMap.delete(), WeakMap.clear() és WeakMap.has() metódusokat.
- A Gecko böngészőmotor frissítve lett a 2.47.4 verzióra.
- Megvalósították a hálózati interfész állapotváltozásaira vonatkozó értesítések támogatását.
- Kriptográfia és biztonság
- A Winscard.dll könyvtárba integrálták az okoskártyák támogatását, amelyet a PCSClite rendszerszintű könyvtáron keresztül valósítottak meg.
- A BCrypt-be integrálták a Diffie-Hellman kulcscsere protokoll támogatását.
- Megvalósították a Negotiate csomagot, amely réteget biztosít az SSPI (Security Support Provider Interface) interfész használatához az SSP (Security Support Provider) szolgáltatók elérésére.
- Beépített alkalmazások
- A Wine Debugger (winedbg) hibakeresőben a X86 gépi utasítások disassembleréhez a Zydis könyvtárat használták.
- A WineCfg interfész lehetőséget kapott arra, hogy 64 bites platformok esetén régi Windows verziókat (XP-ig) beállítson, ami lehetővé teszi elavult alkalmazások futtatását a WoW64 módban.
- Az összes beépített grafikus alkalmazásban megvalósították a hibainformációk külön párbeszédablakban való megjelenítését a konzol helyett.
- A systeminfo programban lehetőség nyílt információk megjelenítésére a WMI (Windows Management Instrumentation) adatbázisból.
- Hozzáadták a klist alkalmazást a Kerberos tiketek megjelenítésére.
- A taskkill alkalmazásba megvalósították a gyermekk folyamatok kényszerített befejezésének lehetőségét.
- A start segédeszközhöz hozzáadták a '/machine' paramétert, amely a hibrid futtatható fájlok indításához használt architektúra kiválasztását teszi lehetővé, amelyek támogatják a x86-ot és az ARM-ot.
- A tasklist program funkcióinak nagy része megvalósításra került.
- Megvalósították az alapvető findstr alkalmazást.
- Fejlesztési eszközök
- A WineDump segédeszközben megvalósították a Windows Registry fájlok (REGF formátum) tartalmának megjelenítését, valamint az összes architektúra (x86/ARM64) adatainak megjelenítését a hibrid PE fájlokban.
- Az IDL fordítóba integrálták a 'composable', 'default_overload', 'deprecated' és 'protected' attribútumok támogatását.
- Eltávolították a libwine.so könyvtárat, amely a Wine 6.0 verzióban elavultnak lett nyilvánítva, és régóta nem használták a Wine-ban. Az ELF formátumban készült programok, amelyeket régi Wine verziókban (5.0 és korábbi) libwine.so-val írtak, a Wine 9.0 futtatásához újra kell fordítani.
- Beépített könyvtárak és külső függőségek
- A FluidSynth 2.3.3, Musl 1.2.3 (csak matematikai funkciók) és a Zydis 4.0.0 könyvtárak integrálva lettek.
- Frissítve lettek az új verziók 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 és Zlib 1.3 komponenseire. A Wine Mono motort a .NET platform megvalósításával 8.1.0 verzióra frissítették.
- A winewayland.drv meghajtóban külső függőségként használták a Wayland kliens könyvtárat, valamint az xkbcommon és xkbregistry könyvtárakat.
- Okos kártyák támogatásához külső könyvtár, a PCSClite használatos (macOS-en — PCSC).
- PE-fájlok összeállításához most már szükséges a cross-compiler a nem i386 platformokon, amely támogatja a „.seh” direktívákat a kivételek kezeléséhez.
Forrás: opennet.ru
