Po roku prac rozwojowych i 25 wersjach eksperymentalnych zaprezentowano stabilną wersję otwartej implementacji Win32 API — Wine 11.0, która zawiera ponad 6300 zmian i 600 poprawek błędów. Do kluczowych osiągnięć nowej wersji należy pełne wsparcie dla NTSYNC, wprowadzenie mechanizmu Reparse Point oraz zastosowanie nowej implementacji architektury WoW64.
W Wine potwierdzono pełne działanie 5419 programów dla Windows (rok temu 5372, dwa lata temu 5336, trzy lata temu 5266), kolejne 4500 programów (rok temu 4435, dwa lata temu 4397, trzy lata temu 4370) działa doskonale z dodatkowymi ustawieniami i zewnętrznymi DLL. U 4086 programów (rok temu 4020, dwa lata temu 3943, trzy lata temu 3888) występują drobne problemy, które nie wpływają na użycie podstawowych funkcji aplikacji.
Kluczowe nowości Wine 11.0:
- Pełne wsparcie dla sterownika ntsync, który znacznie zwiększa wydajność gier Windows uruchamianych przy użyciu Wine. Sterownik jest częścią jądra Linux od wydania 6.14 i implementuje urządzenie symboliczne /dev/ntsync oraz zestaw prymitywów do synchronizacji stosowanych w jądrze Windows NT. Znaczący wzrost wydajności osiągany jest dzięki eliminacji narzutów związanych z używaniem RPC w przestrzeni użytkownika.
- Dodano możliwość dostosowywania priorytetów wątków w systemach Linux i macOS.
- W ntdll dodano API synchronizacji "Synchronization barriers", które pozwala na wstrzymanie wykonywania kilku wątków do osiągnięcia określonego punktu wykonania we wszystkich wątkach (na przykład, oczekiwanie na to, aż wszystkie wątki osiągną określony etap podczas równoległego wykonywania tego samego kodu).
- Nowa implementacja warstwy WoW64 (64-bit Windows-on-Windows) została sklasyfikowana jako w pełni wspierana, umożliwiająca uruchamianie 32-bitowych aplikacji Windows w 64-bitowych systemach Unix. W przeciwieństwie do starej implementacji WoW64, w której 32-bitowe aplikacje uruchamiano w 32-bitowych procesach Unix, nowy WoW64 zapewnia uruchamianie 32-bitowego kodu wewnątrz 64-bitowego procesu. Zrealizowano wsparcie dla uruchamiania aplikacji 16-bitowych w trybie WoW64.
Wszystkie moduły komunikujące się z bibliotekami Unix używają konwerterów wywołań systemowych WoW64 (thunk), które pozwalają 32-bitowym modułom w formacie PE uzyskiwać dostęp do 64-bitowych bibliotek Unix. Dodano możliwość uruchamiania starszych instalacji WoW64 w nowym trybie poprzez ustawienie zmiennej środowiskowej „WINEARCH=wow64”. Prefiksy 32-bitowe, tworzone przy ustawieniu WINEARCH=win32, zostały uznane za przestarzałe i nie są obsługiwane w nowym trybie WoW64. Został usunięty osobny loader wine64, zamiast tego używany jest uniwersalny loader, który rozpoznaje tryb na podstawie architektury uruchamianego pliku.
- Jądro (interfejsy jądra Windows)
- Zrealizowano mechanizm punktów ponownego analizowania, który umożliwia dołączanie do plików i katalogów dodatkowych danych identyfikowanych przez tagi. Obsługiwane są takie typy punktów ponownego analizowania, jak linki symboliczne i punkty montowania.
- Aby zwiększyć wydajność śledzenia operacji zapisu do pamięci, wykorzystano mechanizm UFFD (userfaultfd), który umożliwia tworzenie obsługujących błędy stron w przestrzeni użytkownika (page faults). W przeprowadzonych testach zastosowanie UFFD pozwoliło skrócić czas ładowania poziomów w grze „Streets of Rage 4” z 6-8 sekund do 1,5-2 sekund, co odpowiada wynikom uruchamiania na platformie Windows.
- Wykorzystano numery wywołań systemowych NT, identyczne z najnowszymi wersjami Windows, co jest konieczne do wsparcia aplikacji korzystających z twardo zapisanych numerów wywołań systemowych.
- Na systemach ARM64 wprowadzono możliwość symulacji stron pamięci o rozmiarze 4K w środowiskach z jądrem Linux, które używają większych stron pamięci (16K lub 64K). Symulacja pozwala na uruchamianie prostych aplikacji, natomiast dla bardziej złożonych programów zaleca się użycie jąder Linux z 4-kilobajtowymi stronami pamięci.
- Podsystem graficzny
- Na systemach X11 (winex11) dla OpenGL domyślnie używany jest backend renderujący wykorzystujący EGL. Backend GLX został uznany za przestarzały, ale wciąż pozostaje dostępny jako zapasowy i używany jest w przypadku braku EGL.
- Dodano początkowe wsparcie dla obiektów D3DKMT, które zapewniają niskopoziomowy dostęp do urządzeń graficznych z przestrzeni użytkownika. Zrealizowano rozszerzenia Vulkan VK_KHR_external_memory_win32, VK_KHR_external_semaphore_win32, VK_KHR_external_fence_win32 oraz VK_KHR_win32_keyed_mutex.
- W trybie WoW64 (64-bit Windows-on-Windows) dodano wsparcie dla mapowania pamięci dla OpenGL za pomocą API Vulkan, co pozwala na przyspieszenie działania 32-bitowych aplikacji OpenGL w Wine.
- Wprowadzono emulację bufora wyświetlania (front buffer) dla OpenGL na platformach, które nie mają wbudowanego wsparcia.
- W sterowniku dla API graficznego Vulkan dodano wsparcie dla specyfikacji Vulkan 1.4.335.
- W zestawie bibliotek WindowsCodecs rozszerzono wsparcie dla metadanych w plikach z obrazami oraz wprowadzono wsparcie dla konwersji między całkowitymi formatami reprezentacji kolorów a formatami zmiennoprzecinkowymi.
- Usunięto zależność od biblioteki OSMesa (Off-screen Mesa). Zrealizowano możliwość renderowania bitmap przez OpenGL przy użyciu sprzętowo przyspieszonego runtime OpenGL.
- Integracja z pulpitem
- W sterowniku winewayland.drv, który umożliwia używanie Wine w środowiskach opartych na protokole Wayland bez korzystania z XWayland i komponentów X11, dodano wsparcie dla schowka, metod wprowadzania, okien o nieregularnych kształtach i przezroczystości.
- Ulepszono integrację z X11: zapewniono wysyłanie do menedżera okien żądań aktywacji okien oraz wykorzystano protokół EWMH do synchronizacji stanu aktywnych okien X11 i Win32.
- Dodano wsparcie dla ekskluzywnego trybu pełnoekranowego. Ulepszono wsparcie dla trybu pełnoekranowego w D3D oraz poprawiono działanie starszych gier opartych na DDraw.
- Zwiększono wydajność niektórych funkcji pracy z oknami. Do interakcji między procesami wykorzystano pamięć dzieloną.
- Direct3D
- W Direct3D 11 dodano wsparcie dla sprzętowego przyspieszenia dekodowania wideo w formacie H.264, zrealizowanego przy pomocy API graficznego Vulkan.
- W Direct3D 11 dodano wsparcie dla minmax-filtrowania tekstur, wykorzystując rozszerzenie OpenGL GL_ARB_texture_filter_minmax lub rozszerzenie Vulkan VK_EXT_sampler_filter_minmax.
- W Direct3D 11 wprowadzono funkcje ładowania tekstur.
- Zrealizowano szeroką gamę możliwości Direct3D podczas renderowania przez Vulkan, takich jak mieszanie wierzchołków, płaskie cieniowanie, niestandardowe płaszczyzny przycinania oraz różne formaty zasobów.
- W wbudowanej wersji vkd3d-shader poprawiono obsługę modeli shaderów 1, 2 i 3.
- W metodzie D3DXSaveSurfaceToFileInMemory dodano obsługę obrazów PNG, JPEG i BMP.
- W Direct3D 10 i 11 dodano obsługę kompresji i dekompresji formatów BC4 i BC5, a także generowania poziomów MIP (MipMap) przy ładowaniu tekstur.
- Dodano metody ID3DXEffect::SetRawValue() oraz ID3DXSkinInfo::UpdateSkinnedMesh().
- Urządzenia wejściowe
- Poprawiono kompatybilność z kontrolerami dzięki wykorzystaniu backendu hidraw.
- Poprawiono obsługę efektu wibracji (Force feedback) podczas korzystania z kierownic i kontrolerów.
- Poprawiono obsługę gamepadów w API Windows.Gaming.Input oraz przy wykorzystaniu backendu evdev.
- W aplikacji zarządzania kontrolerami gier dodano zakładkę do konfiguracji API Windows.Gaming.Input.
- Zwiększono kompatybilność DirectInput ze starszymi grami.
- Bluetooth
- W sterowniku Bluetooth dodano możliwość skanowania, konfigurowania wykrywania i parowania urządzeń.
- Dodano wsparcie dla usług Bluetooth Low Energy.
- Aplikacjom umożliwiono tworzenie niskopoziomowych połączeń RFCOMM z urządzeniami zewnętrznymi, korzystając z API Winsock.
- Obsługa skanerów
- Dodano obsługę API TWAIN 2.0, umożliwiającego dostęp do skanerów z aplikacji 64-bitowych.
- Dodano obsługę komponentu DAT_IMAGENATIVEXFER do przesyłania obrazów z skanera do aplikacji.
- Zabezpieczono zapis w rejestrze wybranego skanera oraz ustawień skanera.
- Dodano obsługę skanowania wielostronicowego oraz automatycznego podawania dokumentów.
- Zapewniono brak blokady aplikacji podczas wywoływania interfejsu skanowania.
- Dodano wsparcie dla instalacji natywnych sterowników Windows do skanerów.
- Międzynarodowa lokalizacja
- Zabezpieczono generację bazy danych lokalizacji w formacie locale.nls z bazy danych Unicode CLDR (Unicode Common Locale Data Repository) w wersji 48. Dodano wsparcie dla dodatkowych lokalizacji bua-RU, bqi-IR, cop-EG, ht-HT, kek-GT, lzz-TR, mww-Hmnp-US, oka-CA, pi-Latn-GB, pms-IT, sgs-LT, suz-Deva-NP oraz suz-Sunu-NP.
- Tabele symboli Unicode zaktualizowano do wersji standardu 17.0.0. Zaktualizowano bazę stref czasowych.
- Możliwości sieciowe
- W silniku MSHTML w trybie zgodności ze standardami poprawiono obsługę atrybutów elementów jako pełnoprawnych węzłów DOM. Zrealizowane obiekty DOMParser, XDomainRequest oraz msCrypto.
- W JavaScript dodano obsługę tablic typowanych.
- Dla ICMPv6 zrealizowano polecenie ping.
- Baza danych
- W bibliotece MSADO (ActiveX Data Objects) dodano wsparcie dla wpisywania zmian do bazy danych. Zrealizowano większość funkcji obiektu Recordset.
- W bibliotece odbc32 poprawiono obsługę ANSI win32-driverów, które nie są przystosowane do pracy z Unicode. Wprowadzono funkcje SQLDriverConnectA(), SQLSpecialColumnsW(), SQLGetInfoW(), SQLGetInfoW(), SQLStatisticsW() oraz QLColumnsW().
- Wbudowane aplikacje
- W WineCfg dodano zakładkę do konfiguracji domyślnego urządzenia MIDI.
- W narzędziu cmd wprowadzono autouzupełnianie nazw plików w trybie interaktywnym, dodano obsługę złożonych instrukcji oraz polecenie „mklink /j” do tworzenia punktów Reparse.
- W narzędziu conhost (Console Hosting) dodano obsługę historii za pomocą klawiszy F1 i F3.
- Wprowadzono polecenia timeout, runas i subst.
- W narzędziu find dodano opcje „/c” do wyświetlania liczby wystąpień oraz /i do porównań bez uwzględniania wielkości liter.
- W narzędziu whoami dodano możliwość konfigurowania formatu wyjścia.
- Różne
- W implementacji języka opisu interfejsu WIDL (Wine Interface Definition Language) dodano wsparcie dla generowania metadanych Windows Runtime (WinRT). Zapewniono generowanie i instalację plików WinMD (Windows Metadata) dla API WinRT (Windows Runtime).
- W narzędziu winedump dodano obsługę dumpowania zasobów MUI, numerów wywołań systemowych, wbudowanych modułów NE oraz dużych plików PDB (> 4 GB).
- Przeprowadzono refaktoryzację implementacji Common Control, biblioteka COMCTL32 została podzielona na osobne moduły dla wersji 5 i 6.
- W BCrypt dodano wsparcie dla standardu generowania kluczy PBKDF2.
- Dodano wsparcie dla katalogów UserProgramFiles, AccountPictures i Screenshots.
- W skład zintegrowano biblioteki LLVM Compiler-RT 8.0.1 oraz TomCrypt 1.18.2. Do określenia CPU na platformie FreeBSD wykorzystano bibliotekę HwLoc.
- Zaktualizowane do nowych wersji komponenty Vkd3d 1.18, Faudio 25.12, FluidSynth 2.4.2, LCMS2 2.17, LibMPG123 1.33.0, Libpng 1.6.51, LibTiff 4.7.1, LibXml2 2.12.10, LibXslt 1.1.43.
Źródło: opennet.ru
