Po roku prac rozwojowych i 29 wersjach beta zaprezentowano stabilną wersję otwartej implementacji Win32 API — Wine 10.0, która zawiera ponad 6000 zmian. Do kluczowych osiągnięć nowej wersji należy pełne wsparcie dla architektury ARM64EC, skalowanie na ekranach o wysokiej gęstości pikseli, domyślne włączenie sterownika Wayland, wdrożenie paneli do konfiguracji ekranu i joysticka, alternatywne wielomiedialne zaplecze oparte na FFmpeg, sterownik Bluetooth, wsparcie dla Vulkan 1.4 oraz możliwość emulacji przełączania trybów wideo.
W Wine potwierdzono pełną funkcjonalność 5372 programów dla systemu Windows (rok temu 5336, dwa lata temu 5266, trzy lata temu 5156), a dodatkowe 4435 programów (rok temu 4397, dwa lata temu 4370, trzy lata temu 4312) działa doskonale przy dodatkowych konfiguracjach i zewnętrznych bibliotekach DLL. W przypadku 4020 programów (rok temu 3943, dwa lata temu 3888, trzy lata temu 3813) występują drobne problemy w działaniu, które nie przeszkadzają w korzystaniu z podstawowych funkcji aplikacji.
Kluczowe nowości Wine 10.0:
- ARM64
- Zapewniono pełne wsparcie dla architektury ARM64EC (ARM64 Emulation Compatible), gdzie poziom wsparcia w Wine osiągnął parytet z architekturą ARM64. Architektura ARM64EC została zaprojektowana w celu uproszczenia portowania aplikacji na systemy ARM64, które były początkowo napisane dla systemów x86_64 i pozwala na uruchamianie w środowisku ARM64 oddzielnych modułów z kodem x86_64 za pomocą emulatora.
- Zrealizowano pełne wsparcie dla formatu plików PE ARM64X, który pozwala na łączenie kodu dla architektur ARM64EC i ARM64 w jednym pliku wykonywalnym. Do zbudowania Wine w formacie ARM64X należy zainstalować LLVM z Gita (potrzebna funkcjonalność zostanie włączona do wydania LLVM 20) i podczas uruchamiania skryptu „configure” wskazać opcję „—enable-archs=arm64ec,aarch64”.
- Wdrożono interfejs do emulacji 64-bitowych systemów x86. Przy korzystaniu z ARM64EC samo Wine działa tak jak jest, a emulacja stosowana jest tylko dla kodu aplikacji x86-64. Biblioteka z emulatorem nie jest jeszcze włączona do głównego składu Wine, ale dla uruchamiania kodu x86-64 w środowisku ARM64 można użyć zewnętrznego emulatora FEX, skompilowanego z obsługą ARM64EC.
- Aby wspierać ARM64, konieczne jest użycie w systemie stron pamięci o wielkości 4KB, zgodnie z wymaganiami ABI Windows (uruchamianie w środowiskach z jądrami Linux, które używają stron pamięci 16K lub 64K, na razie nie jest wspierane).
- Podsystem graficzny
- Wprowadzono dokładniejsze skalowanie na ekranach o wysokiej gęstości pikseli (High-DPI). Zapewniono wsparcie dla trybu DPI Awareness, aby organizować wyświetlanie aplikacji na ekranach o wysokiej gęstości pikseli, z uwzględnieniem tego, czy aplikacja wspiera dostosowanie do zmiany DPI (aplikacje, które nie uwzględniają DPI, skalują się automatycznie). Dodano opcje do nadpisywania wsparcia High-DPI w odniesieniu do poszczególnych aplikacji lub prefiksów Wine.
- Do sterownika dla API graficznego Vulkan dodano wsparcie dla specyfikacji Vulkan 1.4 (w Wine 9.0 wspierano Vulkan 1.3.272). Dodano wsparcie dla rozszerzeń Vulkan do kodowania i dekodowania wideo.
- Przy użyciu backendu X11 wprowadzono możliwość rysowania podrzędnych okien Vulkan dla aplikacji, które wykorzystują takie okna do wyświetlania treści 3D (wcześniej taka możliwość była dostępna tylko dla OpenGL).
- Do biblioteki GdiPlus dodano wsparcie mechanizmu łączenia czcionek („Font Linking”), umożliwiającego wykorzystanie kilku czcionek podczas wyświetlania tekstu, jeśli brakuje czcionek w pojedynkę obejmujących wszystkie występujące w tekście znaki.
- Wayland
- W konfiguracji domyślnej aktywowano sterownik winewayland.drv, umożliwiający używanie Wine w środowiskach opartych na protokole Wayland bez użycia XWayland oraz komponentów X11. Wine uruchamia aplikacje domyślnie na Wayland bezpośrednio tylko gdy XWayland jest niedostępny, w przeciwnym razie uruchomienie przy użyciu XWayland pozostaje priorytetowe. Aby wymusić uruchomienie na Wayland, można użyć zmiennej środowiskowej DISPLAY lub dodać klucz do rejestru, tworząc plik file.reg: Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\Software\Wine\Drivers] „Graphics”=„wayland” i zastosować go komendą: $ WINEPREFIX=\/ścieżka\/do\/prefiksu wine regedit \/ścieżka\/do\/file.reg
- W sterowniku winewayland.drv dodano wsparcie OpenGL oraz buforów pikseli (pBuffer).
- Rozwiązano problemy z pozycjonowaniem okien podręcznych w środowiskach opartych na Wayland.
- Przy użyciu Wayland wprowadzono wsparcie dla automatycznego powtarzania naciśnięcia przy przytrzymaniu klawiszy.
- Integracja z pulpitem
- Dodano eksperymentalny mechanizm emulacji „modesetting”, który umożliwia emulację przełączania trybów wideo bez faktycznej zmiany ustawień ekranu. Widoczność zmiany rozdzielczości ekranu bez przełączania trybu wideo jest osiągana poprzez rozszerzenie oraz skalowanie okien.
- Dodano nową aplikację Desktop Control Panel (desk.cpl) z realizacją interfejsu zarządzania ustawieniami wyświetlacza (na przykład, można zmieniać wirtualną rozdzielczość pulpitu lub konfigurować emulowane parametry wyświetlacza).
- Dodano możliwość resetowania ustawień ekranu do wartości domyślnych w przypadku braku możliwości przywrócenia stanu po awaryjnym zakończeniu procesu.
- Dodano wsparcie dla wyłączenia wyświetlania ikon w zasobniku systemowym (w «HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer» należy podać «NoTrayItemsDisplay=1»).
- Dodano wsparcie dla wyłączenia powłok (Shell launcher) w trybie pulpitu (w «HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer» należy podać «NoDesktop=1»).
- Direct3D
- Do renderowania przy użyciu OpenGL teraz wymagana jest obsługa GLSL 1.20 oraz rozszerzeń EXT_framebuffer_object i ARB_texture_non_power_of_two. Obsługa starego backendu ARB shader i ustawienia OffscreenRenderingMode została zakończona.
- Dla Direct3D 9 i starszych wersji dodano graficzny potok funkcji stałych (w starszych Direct3D dostępne były tylko predefiniowane operacje graficzne, których nie można było modyfikować), zrealizowany za pomocą języka shaderów HLSL, pozwalający emulować funkcje stałe podczas renderowania przez API Vulkan lub OpenGL.
- Podczas renderowania przy użyciu Vulkan używane są rozszerzenia Vulkan do dynamicznej zmiany stanu graficznego potoku, co pozwala na skrócenie zawieszeń w grach.
- Dodano alternatywny backend glsl-vkd3d dla shaderów GLSL, wykorzystujący vkd3d-shader.
- Zaoferowano wstępne wsparcie dla kompilacji efektów Direct3D przy użyciu vkd3d-shader.
- W bibliotece D3DX9 zrealizowano możliwość generowania MIP-tekstur (MipMap) przy ładowaniu tekstur trójwymiarowych. Dodano wsparcie dla formatów reprezentacji koloru 64bpp RGBA i 48bpp RGB w obrazach PNG, a także formatów X8L8V8U8, A2W10V10U10, A8P8, V16U16 i Q16W16V16U16.
- Dźwięk i wideo
- Jako alternatywa dla backendu opartego na GStreamer zrealizowano nowy backend multimedialny oparty na użyciu FFmpeg, który jest odpowiedni do zapewnienia działania frameworka Media Foundation. Aby włączyć alternatywny backend w sekcji rejestru «HKCU\Software\Wine\MediaFoundation», należy podać «DisableGstByteStreamHandler=1».
- Ulepszono realizację API Media Foundation, które teraz lepiej współpracuje z aplikacjami zależnymi od komponentów demultiplexing i dekodowania.
- W API DirectMusic dodano wsparcie dla ładowania plików MIDI.
- Urządzenia wejściowe
- Dodano początkową wersję sterownika Bluetooth.
- Dodano aplet Panel sterowania joysticków (joy.cpl) z implementacją ustawień dla joysticka.
- Wprowadzono ulepszenia związane z urządzeniami wskazującymi (touchpady, myszki) wykorzystującymi protokół HID (Human Interface Device). Dodano sterownik mouhid.sys dla urządzeń HID. Zrealizowano poprawne przetwarzanie złożonych urządzeń wejściowych i zapewniono przesyłanie informacji o nich do aplikacji Windows jako o odrębnych urządzeniach.
- Dla backendu X11 dodano wsparcie dla ekranów dotykowych i zrealizowano możliwość używania trybu multi-touch poprzez przetwarzanie komunikatów WM_POINTER* (WM_POINTERENTER, WM_POINTERLEAVE itp.).
- Zrealizowano umieszczanie niektórych wewnętrznych struktur biblioteki user32 w pamięci dzielonej, co poprawiło wydajność i zmniejszyło obciążenie serwera Wine.
- W winex11 dodano wsparcie dla przetwarzania zdarzeń XInput2 powiązanych z pojedynczymi oknami.
- Zrealizowano poprawne wsparcie dla klawiatur z układem Dvoraka.
- Jądro (interfejsy jądra Windows)
- Dodano wsparcie dla podnoszenia uprawnień procesów (procesowi, który został pierwotnie uruchomiony jako zwykły użytkownik, mogą być przyznawane uprawnienia administratora). Przy tworzeniu procesów serwerowych (msi action server) oraz procesów wywołujących funkcje RtlCreateUserProcess() i CreateProcessInternal() domyślnie wykorzystany jest ograniczony token administratora.
- Przy pobieraniu informacji o etykietach dysków wykorzystuje się teraz, gdzie to możliwe, dostęp do usług systemowych przez DBus, zamiast próby bezpośredniego dostępu do urządzenia.
- Jednokierunkowy mechanizm komunikacji międzyprocesowej (IPC) Mailslots jest teraz zrealizowany bezpośrednio w serwerze Wine, co pozwoliło uzyskać pełne wsparcie dla semantyki Windows.
- Zrealizowano asynchroniczne oczekiwanie na zdarzenia portu szeregowego.
- Dodano pełne wsparcie dla rozszerzeń procesora XSTATE w kontekstach wątku, co umożliwiło użycie nowych rozszerzeń wektorowych, takich jak AVX-512.
- Wbudowane aplikacje
- Przepisano silnik przetwarzania danych wejściowych używany w interpreterze poleceń cmd.exe. W cmd.exe dodano wsparcie dla operacji „||” i „&&”.
- Do narzędzia findstr dodano wsparcie dla wyrażeń regularnych i wyszukiwania bez uwzględniania wielkości liter.
- Do narzędzi regsvr32 i rundll32 dodano możliwość rejestracji modułów ARM64EC.
- Dodano narzędzia: sort do sortowania danych wejściowych, fc do porównywania plików i where do wyszukiwania plików.
- W aplikacji wmic wprowadzono interaktywny tryb pracy.
- W Eksploratorze dodano opcjonalne wsparcie dla menu startowego i paska narzędzi. Umożliwiono uruchamianie explorer.exe z ograniczonymi uprawnieniami.
- Narzędzia do разработки
- W winebuild dodano opcję „-marm64x” do generowania hybrydowych bibliotek ARM64X.
- W winegcc dodano opcję „-marm64x”, umożliwiającą kompilację dla ARM64X.
- W plikach generowanych przy użyciu języka opisu interfejsu IDL (Interface Definition Language) wykorzystano komponenty, które w pełni wspierają wykonanie w trybie interpretacji.
- W kompilatorze języka opisu interfejsu IDL (Interface Definition Language) dodano wsparcie dla generowania bibliotek typów (TypeLib) w starym formacie (SLTG).
- W narzędziu winedump dodano wsparcie dla zapisywania zrzutów tabeli minidump, informacji o wyjątkach C++ i zasobów typelib.
- Różne
- Zaktualizowano wsparcie dla protokołu wymiany kluczy Diffie-Hellmana (DH). Dodano możliwość konfiguracji i pobierania parametrów DH. Zaimplementowano funkcje do tworzenia par z klucza publicznego i prywatnego.
- Umożliwiono użycie dodatkowego wypełnienia OAEP (Optimal Asymmetric Encryption Padding) wraz z algorytmem RSA.
- W API DirectPlay zrealizowano wsparcie dla sesji sieciowych.
- Umożliwiono przetwarzanie stanów asynchronicznego wejścia/wyjścia w trybie WoW64 (Windows-on-Windows 64-bit), pozwalającym na uruchamianie aplikacji Windows 32-bitowych w systemach Unix 64-bitowych.
- Dodano wsparcie dla ładowania sterowników ODBC do baz danych, skompilowanych dla systemu Windows.
- Dla platformy ARM zrealizowano pełne wsparcie RPC/COM, C++ RTTI (Run-Time Type Information) oraz wyjątków C++.
- W runtime C w funkcjach ANSI wprowadzono wsparcie dla kodowania UTF-8.
- Rozszerzono możliwości silnika MSHTML. Dodano wsparcie dla prototypów i konstruktorów obiektów. W silniku JavaScript dodano nowy interfejs do wiązania obiektów dla MSHTML. Wbudowane funkcje MSHTML przekształcono w poprawne obiekty JavaScript. Udoskonalono zbieracz odpadów dla JavaScript, który teraz obejmuje wszystkie konteksty wykonania skryptów w wątku. Dodano wsparcie dla obiektów JavaScript: ArrayBuffer i DataView.
- W systemie ciągłej integracji opartym na Gitlabie dodano wsparcie dla analizy statycznej przy użyciu Clang oraz raportów z przeprowadzonych testów JUnit.
- Wbudowano bibliotekę Capstone 5.0.3, przez którą zrealizowano disassemblację w debuggerze WineDb.
- Zaktualizowano do nowych wersji komponenty: Vkd3d 1.14, Faudio 24.10, FluidSynth 2.4.0, LDAP 2.5.18, LCMS2 2.16, LibJpeg 9f, LibMPG123 1.32.9, LibPng 1.6.44, LibTiff 4.7.0, LibXml2 2.12.8, LibXslt 1.1.42 oraz Zlib 1.3.1.
Źródło: opennet.ru
