Po roku rozwoju i 29 wersjach eksperymentalnych zaprezentowano stabilną wersję otwartej implementacji API Win32 - Wine 10.0, która zawierała ponad 6000 zmian. Do kluczowych osiągnięć nowej wersji zalicza się pełne wsparcie dla architektury ARM64EC, skalowanie na ekranach o dużej gęstości pikseli, domyślne włączenie sterownika Wayland, implementacja paneli umożliwiających personalizację ekranu i joysticka, alternatywny backend multimedialny oparty na FFmpeg, Bluetooth sterownik, obsługa Vulkan 1.4, możliwość emulacji przełączania trybów wideo.
Potwierdzono, że 5372 programów działa poprawnie w Wine Windows (5336 rok temu, 5266 dwa lata temu, 5156 trzy lata temu), kolejne 4435 programów (4397 rok temu, 4370 dwa lata temu, 4312 trzy lata temu) działa poprawnie po wprowadzeniu dodatkowych ustawień i zewnętrznych bibliotek DLL. 4020 programów (3943 rok temu, 3888 dwa lata temu, 3813 trzy lata temu) ma drobne problemy, które nie wpływają na korzystanie z podstawowych funkcji aplikacji.
Kluczowe innowacje w Wine 10.0:
- ARM64
- Zapewnione jest pełne wsparcie dla architektury ARM64EC (kompatybilnej z emulacją ARM64), a poziom wsparcia w Wine osiągnął poziom z architekturą ARM64. Architektura ARM64EC została zaprojektowana w celu uproszczenia przenoszenia aplikacji napisanych oryginalnie dla systemów x64_86 do systemów ARM64 i umożliwia działanie poszczególnych modułów kodu x64_86 w środowisku ARM64 przy użyciu emulatora.
- Zaimplementowano pełną obsługę formatu pliku ARM64X PE, co pozwala na połączenie kodu dla architektur ARM64EC i ARM64 w jednym pliku wykonywalnym. Aby zbudować Wine w formacie ARM64X należy zainstalować LLVM z Git (niezbędna funkcjonalność będzie zawarta w wydaniu LLVM 20) i podczas uruchamiania skryptu „configure” podać opcję „-enable-archs=arm64ec,aarch64” .
- Zaimplementowano interfejs umożliwiający emulację 64-bitowych systemów x86. Podczas korzystania z ARM64EC Wine samo działa tak, jak jest, a emulacja jest stosowana tylko do kodu aplikacji x86-64. Biblioteka z emulatorem nie jest jeszcze zawarta w głównym pakiecie Wine, ale aby uruchomić kod x86-64 w środowisku ARM64, można skorzystać z zewnętrznego emulatora FEX zbudowanego z obsługą ARM64EC.
- Для поддержки ARM64 необходимо использование в системе страниц памяти размером 4КБ, как того требует ABI Windows (запуск в окружениях с ядрами Linux, использующими страницы памяти 16K или 64K пока не поддерживается).
- Podsystem graficzny
- Zaimplementowano dokładniejsze skalowanie na ekranach o dużej gęstości pikseli (High-DPI). Zapewniono obsługę trybu DPI Awareness w celu organizacji wyświetlania aplikacji na ekranach o dużej gęstości pikseli, z uwzględnieniem tego, czy aplikacja obsługuje adaptację do zmian DPI, czy nie (aplikacje nieuwzględniające DPI są skalowane automatycznie). Dodano opcje zastępowania obsługi High-DPI dla poszczególnych aplikacji lub przedrostków Wine.
- Do sterownika graficznego API Vulkan dodano obsługę specyfikacji Vulkan 1.4 (Vulkan 9.0 był obsługiwany w Wine 1.3.272). Dodano obsługę rozszerzeń Vulkan do kodowania i dekodowania wideo.
- Podczas korzystania z backendu X11 zaimplementowano możliwość renderowania okien potomnych Vulkan dla aplikacji korzystających z takich okien do wyświetlania treści 3D (poprzednio taka funkcja była dostępna tylko dla OpenGL).
- Do biblioteki GdiPlus dodano obsługę mechanizmu łączenia czcionek, która pozwala na użycie kilku czcionek podczas wyświetlania tekstu w przypadku braku czcionek, które oddzielnie pokrywałyby wszystkie znaki znalezione w tekście.
- Wayland
- В конфигурации по умолчанию активирован драйвер winewayland.drv, позволяющий использовать Wine в окружениях на базе протокола Wayland без применения XWayland и компонентов X11. Wine запускает приложения по умолчанию на Wayland напрямую только если XWayland недоступен, в противном случае запуск с использованием XWayland остаётся приоритетным. Для принудительного включения Wayland можно использовать переменную окружения DISPLAY, либо добавить ключ в реестр, создав файл file.reg: Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\Software\Wine\Drivers] «Graphics»=»wayland» и применив его командой: $ WINEPREFIX=/путь/до/префикса wine regedit /путь/до/file.reg
- Dodano obsługę OpenGL i buforów pikseli (pBuffer) do sterownika winewayland.drv.
- Rozwiązano problemy z pozycjonowaniem wyskakujących okienek w środowiskach opartych na Wayland.
- Podczas korzystania z Waylanda zaimplementowano obsługę automatycznego powtarzania po naciśnięciu klawiszy.
- Integracja pulpitu
- Dodano eksperymentalny mechanizm emulacji „ustawienia trybu”, 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 tworzona jest poprzez rozszerzanie i skalowanie okien.
- Dodano nowy aplet Panelu Sterowania Pulpitu (desk.cpl) wraz z implementacją interfejsu umożliwiającego zarządzanie ustawieniami wyświetlania (możliwość np. zmiany wirtualnej rozdzielczości pulpitu czy skonfigurowania parametrów emulowanego wyświetlania).
- Dodano możliwość resetowania ustawień ekranu do wartości domyślnych w przypadku braku możliwości przywrócenia stanu po awarii procesu.
- Добавлена поддержка отключения показа пиктограмм в системном лотке (в «HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer» следует указать «NoTrayItemsDisplay=1»).
- Добавлена поддержка отключения оболочек (Shell launcher) в режиме десктопа (в «HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer» следует указать «NoDesktop=1»).
- Direct3D
- Renderowanie w OpenGL wymaga teraz obsługi GLSL 1.20, a także rozszerzeń EXT_framebuffer_object i ARB_texture_non_power_of_two. Zakończono obsługę starego modułu cieniującego ARB i ustawienia OffscreenRenderingMode.
- W przypadku Direct3D 9 i starszych dodano potok graficzny o stałych funkcjach (starszy Direct3D zapewniał tylko predefiniowane operacje graficzne, których nie można było zmienić), zaimplementowany przy użyciu języka modułu cieniującego HLSL i umożliwiający emulację stałych funkcji podczas renderowania za pośrednictwem interfejsu API Vulkan lub OpenGL.
- Renderowanie za pomocą Vulkan wykorzystuje rozszerzenia Vulkan do dynamicznej zmiany stanu potoku graficznego, redukując zacinanie się w grach.
- Dodano alternatywny backend glsl-vkd3d dla shaderów GLSL, używając vkd3d-shader.
- Zapewniono wstępną obsługę kompilacji efektów Direct3D przy użyciu narzędzia vkd3d-shader.
- Biblioteka D3DX9 implementuje możliwość generowania tekstur MIP (MipMap) podczas ładowania tekstur wolumetrycznych. Dodano obsługę formatów reprezentacji kolorów RGBA 64bpp i 48bpp RGB w obrazach PNG, a także formatów X8L8V8U8, A2W10V10U10, A8P8, V16U16 i Q16W16V16U16.
- Dźwięk i wideo
- Jako alternatywę dla backendu opartego na GStreamerze, zaimplementowano nowy backend multimedialny, bazujący na wykorzystaniu FFmpeg i przystosowany do uruchomienia frameworku Media Foundation. Aby włączyć alternatywny backend, należy określić „DisableGstByteStreamHandler=1” w sekcji rejestru „HKCU\Software\Wine\MediaFoundation”.
- Implementacja interfejsu API Media Foundation została ulepszona, aby lepiej dostosować się do aplikacji zależnych od komponentów demultipleksowania i dekodowania.
- Interfejs API DirectMusic dodał obsługę ładowania plików MIDI.
- Urządzenia wejściowe
- Dodano wstępną wersję sterownika Bluetooth.
- Dodano aplet Panel sterowania joystickiem (joy.cpl) z implementacją ustawień joysticka.
- Внесены улучшения, связанные с устройствами управления указателем (тачпады, мыши), использующими протокол HID (Human Interface Device). Добавлен драйвер mouhid.sys для HID-устройств. Реализован корректный разбор составных устройств ввода и обеспечена передача информации о них в Windows-приложения, как о раздельных устройствах.
- Dla backendu X11 dodano obsługę ekranów dotykowych i zaimplementowano możliwość korzystania z trybu wielodotyku poprzez przetwarzanie komunikatów WM_POINTER* (WM_POINTERENTER, WM_POINTERLEAVE itp.).
- Zaimplementowano umieszczenie niektórych wewnętrznych struktur biblioteki user32 w pamięci współdzielonej, co zwiększyło wydajność i zmniejszyło obciążenie serwera Wine.
- Winex11 dodał obsługę przetwarzania zdarzeń XInput2 w odniesieniu do poszczególnych okien.
- Zaimplementowano poprawną obsługę klawiatur z układem Dvoraka.
- Jądro (interfejsy jądra Windows)
- Dodano obsługę eskalacji uprawnień procesu (procesowi początkowo działającemu jako standardowy użytkownik można nadać uprawnienia administratora). Podczas tworzenia procesów serwera (serwer akcji msi), a także procesów wywołujących funkcje RtlCreateUserProcess() i CreateProcessInternal(), domyślnie włączony jest ograniczony token administratora.
- Podczas uzyskiwania informacji o etykietach dysków, jeśli to możliwe, korzysta się teraz z dostępu do usług systemowych za pośrednictwem DBus, zamiast próbować bezpośredniego dostępu do urządzenia.
- Однонаправленный механизм межпроцессного взаимодействия (IPC) Mailslots теперь реализован непосредственно в Wine server, что позволило добиться полной поддержки семантики Windows.
- Zaimplementowano oczekiwanie na zdarzenia portu szeregowego w trybie asynchronicznym.
- Dodano pełną obsługę rozszerzeń procesora XSTATE w kontekście wątków, umożliwiając użycie nowych rozszerzeń wektorowych, takich jak AVX-512.
- Aplikacje wbudowane
- Przepisano silnik przetwarzania danych wejściowych używany w interpreterze poleceń cmd.exe. Dodano obsługę operacji „||” do cmd.exe I "&&".
- Narzędzie findstr dodało obsługę wyrażeń regularnych i wyszukiwań bez uwzględniania wielkości liter.
- Do narzędzi regsvr32 i rundll32 dodano możliwość rejestracji modułów ARM64EC.
- Dodane narzędzia: sort do sortowania danych wejściowych, fc do porównywania plików i gdzie do wyszukiwania plików.
- Aplikacja wmic implementuje interaktywny tryb działania.
- Explorer dodał opcjonalną obsługę menu Start i paska narzędzi. Włączono uruchamianie explorer.exe z ograniczonymi prawami dostępu.
- Narzędzia programistyczne
- Dodano opcję „-marm64x” do Winebuild w celu wygenerowania bibliotek hybrydowych ARM64X.
- Dodano opcję „-marm64x” do winegcc, aby umożliwić budowanie dla ARM64X.
- Pliki wygenerowane przy użyciu języka definicji interfejsu (IDL) wykorzystują komponenty, które w pełni obsługują wykonywanie w trybie interpretowanym.
- Do kompilatora IDL (Interface Definition Language) dodano obsługę generowania bibliotek typów (TypeLib) w starym formacie (SLTG).
- Narzędzie winedump dodało obsługę zapisywania zrzutów tabel minizrzutów, informacji o wyjątkach C++ i zasobów typelib.
- Miscellanea
- Ulepszona obsługa protokołu wymiany kluczy Diffie-Hellman (DH). Dodano możliwość konfiguracji i odbioru parametrów DH. Zaimplementowano procedury obsługi służące do tworzenia par kluczy publicznych i prywatnych.
- Zapewnione jest zastosowanie przyrostowego dopełnienia OAEP (Optimal Asymmetric Encryption Padding) wraz z algorytmem RSA.
- Interfejs API DirectPlay obsługuje sesje sieciowe.
- Налажена обработка состояний асинхронного ввода/вывода при работе в режиме WoW64 (64-bit Windows-na-Windows), позволяющем выполнять 32-разрядные Windows-aplikacje w 64-bitowych systemach Unix.
- Добавлена поддержка загрузки ODBC-драйверов к СУБД, собранных для Windows.
- W przypadku platformy ARM zaimplementowano pełną obsługę wyjątków RPC/COM, C++ RTTI (Informacje o typie wykonania) i C++.
- W środowisku wykonawczym C funkcje ANSI implementują obsługę kodowania UTF-8.
- Rozszerzono możliwości silnika MSHTML. Dodano obsługę prototypów i konstruktorów obiektów. Do silnika JavaScript dodano nowy interfejs wiązania obiektów dla MSHTML. Wbudowane funkcje MSHTML zostały przekonwertowane na prawidłowe obiekty JavaScript. Ulepszone zbieranie elementów bezużytecznych JavaScript w celu uwzględnienia wszystkich kontekstów wykonywania skryptów w wątku. Dodano obsługę obiektów JavaScript ArrayBuffer i DataView.
- Do systemu ciągłej integracji opartego na Gitlabie dodano obsługę analizy statycznej z wykorzystaniem raportów z testów Clang i JUnit.
- W pakiecie wbudowana jest biblioteka Capstone 5.0.3, dzięki której w debugerze WineDb realizowany jest demontaż.
- Komponenty zaktualizowane do nowych wersji: 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 i Zlib 1.3.1.
Źródło: opennet.ru
