După un an de dezvoltare și 30 de versiuni experimentale, a fost lansată versiunea stabilă a implementării deschise a Win32 API - Wine 7.0, care include peste 9100 de modificări. Printre realizările cheie ale noului versiuni se numără conversia majorității modulelor Wine în format PE, suport pentru teme, extinderea stivei pentru joystick-uri și dispozitive de intrare cu interfața HID, și implementarea arhitecturii WoW64 pentru a rula programe pe 32 de biți în medii pe 64 de biți.
În Wine, este confirmată funcționarea completă a 5156 de programe pentru Windows (față de 5049 cu un an în urmă), iar alte 4312 (față de 4227 anul trecut) funcționează perfect cu setări suplimentare și DLL-uri externe. La 3813 de programe (față de 3703 anul trecut) se observă probleme minore în funcționare, care nu afectează utilizarea funcțiilor principale ale aplicațiilor.
Noutățile cheie din Wine 7.0:
- Module în format PE
- Aproape toate bibliotecile DLL au fost migrate la utilizarea formatului executabil PE (Portable Executable, utilizat în Windows) în loc de ELF. Utilizarea formatului PE rezolvă problemele legate de suportul pentru diferite scheme de protecție împotriva copierii, care verifică identitatea modulelor sistemului atât pe disc, cât și în memorie.
- A fost implementată posibilitatea interacțiunii modulelor PE cu bibliotecile Unix folosind apelul de sistem standard al kernel-ului NT, ceea ce permite ascunderea apelurilor către codul Unix de debugger-ele Windows și urmărirea înregistrării firelor.
- DLL-urile încorporate sunt acum încărcate doar dacă un fișier corespunzător în format PE se află pe disc, indiferent dacă acesta este o bibliotecă reală sau un dummy. Această modificare permite aplicației să vadă întotdeauna o legătură corectă cu fișierele PE. Pentru a dezactiva acest comportament, se poate utiliza variabila de mediu WINEBOOTSTRAPMODE.
- WoW64
- A fost implementată arhitectura WoW64 (Windows-on-Windows pe 64 de biți), care permite rularea aplicațiilor Windows pe 32 de biți în procesele Unix pe 64 de biți. Suportul este realizat prin conectarea unui strat care translatează apelurile de sistem NT pe 32 de biți în apeluri de 64 de biți către NTDLL.
- Straturile WoW64 sunt pregătite pentru majoritatea bibliotecilor Unix și permit modulelor PE pe 32 de biți să acceseze bibliotecile Unix pe 64 de biți. După finalizarea migrării tuturor modulelor în format PE, va fi posibilă executarea aplicațiilor Windows pe 32 de biți fără a instala biblioteci Unix pe 32 de biți.
- Teme
- Suportul temelor de design a fost implementat. Au fost incluse temele „Light”, „Blue” și „Classic Blue”, care pot fi selectate prin configuratorul WineCfg.
- A fost adăugată opțiunea de a personaliza aspectul tuturor elementelor de control din interfață prin teme. S-a asigurat actualizarea automată a aspectului elementelor după schimbarea temei.
- Toate aplicațiile încorporate din Wine au primit suport pentru teme de design. Aplicațiile au fost adaptate la ecranele cu densitate mare de pixeli (High DPI).
- Substanța grafică
- A fost adăugată o nouă bibliotecă Win32u, în care au fost transferate părți din bibliotecile GDI32 și USER32, legate de procesarea grafică și gestionarea ferestrelor la nivel de kernel. În viitor, se va începe lucrul la transferul componentelor driverelor în Win32u, cum ar fi winex11.drv și winemac.drv.
- În driverul Vulkan a fost implementat suportul pentru specificația API-ului grafic Vulkan 1.2.201.
- Suportul pentru generarea obiectelor geometrice umbrite prin API-ul Direct2D a fost efectuat, având posibilitatea de a verifica interacțiunea clicului (hit-test).
- API-ul Direct2D a primit suport inițial pentru efectele vizuale, aplicate prin intermediul interfeței ID2D1Effect.
- API-ul Direct2D a adăugat suportul interfeței ID2D1MultiThread, utilizată pentru a organiza accesul exclusiv la resurse în aplicațiile multi-threaded.
- În setul de biblioteci WindowsCodecs a fost implementat suportul pentru decodarea imaginilor în format WMP (Windows Media Photo) și codificarea imaginilor în format DDS (DirectDraw Surface). Suportul pentru codificarea imaginilor în format ICNS (pentru macOS), care nu este acceptat în Windows, a fost întrerupt.
- Direct3D
- Noul motor de redare a fost semnificativ îmbunătățit, realizând traducerea apelurilor Direct3D în API-ul grafic Vulkan. În majoritatea situațiilor, nivelul de suport Direct3D 10 și 11 în motorul bazat pe Vulkan a fost adus la paritate cu vechiul motor pe bază de OpenGL. Pentru a activa motorul de redare prin Vulkan, trebuie să se seteze variabila de registry Direct3D „renderer” la valoarea „vulkan”.
- Au fost implementate multe funcționalități Direct3D 10 și 11, inclusiv contexte amânate (Deferred Contexts), care funcționează în contextul dispozitivelor obiecte de stare, deplasări constante în buffere, curățarea reprezentărilor neordonate ale texturilor, copierea datelor între resurse în formate fără tip (DXGI_FORMAT_BC3_TYPELESS, DXGI_FORMAT_R32G32B32A32_TYPELESS) etc.
- A fost adăugat suport pentru configurații cu mai multe monitoare, permițând selectarea monitorului pentru afișarea aplicației Direct3D în modul ecran complet.
- API-ul DXGI a implementat posibilitatea corecției gamma a ecranului, care poate fi utilizată de aplicațiile bazate pe Direct3D 10 și 11 pentru a modifica strălucirea ecranului. A fost asigurat extragerea contoarelor pentru cadrele de schimb virtuale (SwapChain).
- În Direct3D 12 a fost adăugat suport pentru semnăturile rădăcină versiunea 1.1.
- În codul de randare prin API-ul Vulkan a fost îmbunătățită eficiența procesării cererilor atunci când sistemul suportă extensia VK_EXT_host_query_reset.
- A fost adăugată posibilitatea de a reda cadrele virtuale (SwapChain) prin GDI, în cazul în care OpenGL sau Vulkan nu pot fi utilizate pentru afișare, de exemplu, la redarea în feron sau din procese diferite, cum ar fi în aplicații bazate pe framework-ul CEF (Chromium Embedded Framework).
- Pentru backend-ul pentru shader-e GLSL, s-a asigurat aplicarea modifier-ului „precise” pentru instrucțiunile shader.
- În API-ul DirectDraw a fost adăugat suport pentru randarea 3D în memorie de sistem, folosind dispozitive software precum „RGB”, „MMX” și „Ramp”.
- În baza de date a plăcilor grafice Direct3D au fost adăugate plăcile AMD Radeon RX 5500M, AMD Radeon RX 6800/6800 XT/6900 XT, AMD Van Gogh, Intel UHD Graphics 630 și NVIDIA GT 1030.
- Din registrul HKEY_CURRENT_USER\Software\Wine\Direct3D a fost eliminată cheia „UseGLSL”, în locul căreia, începând cu Wine 5.0, trebuie utilizată „shader_backend”.
- Pentru a suporta Direct3D 12, acum este necesară prezența bibliotecii vkd3d de cel puțin versiunea 1.2.
- D3DX
- În implementarea D3DX 10 a fost îmbunătățită suportul pentru framework-ul efectelor vizuale și a fost adăugat suport pentru formatul de imagini Windows Media Photo (JPEG XR).
- Funcțiile pentru crearea texturilor furnizate în D3DX10 au fost adăugate, cum ar fi D3DX10CreateTextureFromMemory().
- Interfețele de programare ID3DX10Sprite și ID3DX10Font au fost implementate parțial.
- Sunet și video
- GStreamer-urile de extindere pentru DirectShow și framework-ul Media Foundation au fost unite într-un backend comun WineGStreamer, ceea ce ar trebui să simplifice dezvoltarea de noi API-uri de decodare a conținutului.
- Pe baza backend-ului WineGStreamer, au fost implementate obiectele Windows Media pentru citirea sincronizată și asincronă.
- Continua dezvoltarea implementării framework-ului Media Foundation, a fost adăugat suport pentru funcționalitatea IMFPMediaPlayer, distribuitorul de mostre (sample allocator), și a fost îmbunătățit suportul pentru EVR și cadrele de randare SAR.
- Biblioteca wineqtdecoder, care oferea un decodor pentru formatul QuickTime, a fost eliminată (pentru toate codecurile acum se folosește GStreamer).
- Dispozitive de intrare
- Stiva pentru dispozitivele de intrare care suportă protocolul HID (Dispozitive de Interfață Umană) a fost semnificativ îmbunătățită, implementând funcții precum analizarea descriptorilor HID, procesarea mesajelor HID și furnizarea de mini-driveri HID.
- Îmbunătățită traducerea descrierilor dispozitivelor în mesajele HID în backend-urile driverului winebus.sys.
- A fost adăugat un nou backend DirectInput pentru joystick-uri care suportă protocolul HID. A fost implementată posibilitatea utilizării efectelor de feedback în joystick-uri. Îmbunătățit panoul de control interacțiunea cu dispozitivele compatibile cu XInput. În WinMM, suportul pentru joystick-uri a fost transferat pe DInput, în locul utilizării backend-ului evdev în Linux și IOHID în macOS. Driverul vechi pentru joystick-uri winejoystick.drv a fost eliminat.
- Modul DInput a fost extins cu teste noi, bazate pe utilizarea dispozitivelor HID virtuale și care nu necesită un dispozitiv fizic.
- Text și fonturi
- În DirectWrite a fost adăugat obiectul Font Set.
- În RichEdit, interfața TextHost a fost implementată corect.
- Kernel (interfețe ale kernel-ului Windows)
- Atunci când se pornește un fișier executabil neidentificat (de exemplu, ‘wine foo.msi’), acum este apelat start.exe, care invocă handlerii asociați tipului de fișier.
- A fost adăugată suportul pentru mecanismele de sincronizare NtAlertThreadByThreadId și NtWaitForAlertByThreadId, similare cu futexele din Linux.
- A fost adăugată suportul pentru obiecte de depanare NT, utilizate pentru a depana funcțiile nucleului.
- A fost adăugată suportul pentru chei dinamice în registry pentru a salva date despre performanță.
- C Runtime
- În C runtime a fost implementat un set complet de funcții matematice, care au fost în principal transferate din biblioteca Musl.
- Pentru toate platformele CPU, a fost asigurată suportul corect pentru funcțiile de calcul cu numere în virgulă mobila.
- Funcționalități de rețea
- Modul de compatibilitate cu Internet Explorer 11 (IE11) a fost îmbunătățit, fiind acum utilizat implicit pentru procesarea documentelor HTML.
- În biblioteca mshtml a fost implementat modul JavaScript ES6 (ECMAScript 2015), care asigură suport pentru funcții precum expresia let și obiectul Map.
- Instalarea pachetelor MSI în catalogul de lucru Wine cu extensii pentru motorul Gecko se face acum conform necesității, nu în timpul actualizării Wine.
- A fost adăugată suportul pentru protocolul DTLS.
- A fost implementat serviciul NSI (Network Store Interface), care stochează și transmite altor servicii informații despre rutare și interfețele de rețea de pe computer.
- API WinSock handlers such as setsockopt and getsockopt have been moved to the NTDLL library and the afd.sys driver to comply with Windows architecture.
- Custom files with network databases, such as /etc/protocols and /etc/networks, are now placed in the working directory of Wine instead of accessing similar Unix databases.
- Alternative platforms
- Support for Apple hardware based on M1 ARM chips (Apple Silicon) has been added.
- To support BCrypt and Secur32 functions on the macOS platform, installation of the GnuTLS library is now required.
- 32-bit executable files for ARM platforms are now compiled in Thumb-2 mode, similar to Windows. A preloader has been used for loading such files.
- Support for exception unwinding has been implemented for 32-bit ARM platforms.
- For FreeBSD, the number of supported low-level system information requests, such as memory state and battery charge level data, has been expanded.
- Built-in applications and development tools
- Support for 32-bit and 64-bit representations of the registry has been added to the reg.exe utility. Support for copying registry keys has also been added.
- The WineDump utility now supports outputting Windows metadata dumps and displaying detailed information about CodeView records.
- The Wine Debugger (winedbg) now allows debugging 32-bit processes from a 64-bit debugger.
- The IDL compiler (widl) has added the ability to load libraries embedded in PE files, provided support for WinRT-specific attributes and constructs, and implemented library search in platform binding.
- Sistem de construcție
- In architecture-specific directories, libraries are now saved with names reflecting the architecture and type of executable files, such as 'i386-windows' for PE format and 'x86_64-unix' for Unix libraries, enabling support for different architectures in a single Wine installation and facilitating Winelib cross-compilation.
- To set options in PE files that control the transition to using native DLL libraries, a flag '--prefer-native option' has been added to winebuild (processing of DLL_WINE_PREATTACH in DllMain has been discontinued).
- Support for version 4 of the Dwarf debugging data format, which is now used by default when building Wine libraries, has been added.
- A build option '--enable-build-id' has been added to save unique build identifiers in executable files.
- A fost adăugat suportul pentru utilizarea compilatorului Clang în modul de compatibilitate cu MSVC.
- Diverse
- Denumirea directorilor standard în interfața utilizatorului (Windows Shell) a fost adusă la schema utilizată începând cu Windows Vista, adică în loc de 'My Documents', acum se creează directorul 'Documents', iar cea mai mare parte a datelor este salvată în directorul 'AppData'.
- În stratul pentru biblioteca OpenCL a fost adăugat suportul pentru specificația OpenCL 1.2.
- În driverul WinSpool a fost adăugat suportul pentru diverse variante de dimensiuni ale paginilor la imprimare.
- A fost adăugată suportul inițial pentru MSDASQL, furnizorul Microsoft OLE DB pentru drivere ODBC.
- Motorul Wine Mono cu implementarea platformei .NET a fost actualizat la versiunea 7.0.0.
- Datele Unicode au fost actualizate la specificația Unicode 14.
- În arborele surselor au fost integrate biblioteci precum Faudio, GSM, LCMS2, LibJPEG, LibJXR, LibMPG123, LibPng, LibTiff, LibXml2, LibXslt și Zlib, care sunt compilate în format PE și nu necesită o variantă în format Unix. Aceste biblioteci pot fi, de asemenea, importate din sistem pentru a utiliza compilări externe în locul variantelor PE încorporate.
Sursa: opennet.ro
