Po roku rozwoju i 26 wersjach eksperymentalnych zaprezentowano stabilną wersję otwartej implementacji API Win32 - Wine 9.0, która zawierała ponad 7000 64 zmian. Do kluczowych osiągnięć nowej wersji zalicza się implementację architektury WoW32 do uruchamiania programów 64-bitowych w środowisku 64-bitowym, integrację sterowników do obsługi Wayland, wsparcie dla architektury ARMXNUMX, implementację API DirectMusic oraz obsługę kart inteligentnych.
Potwierdzono, że 5336 (5266 rok temu, 5156 dwa lata temu, 5049 trzy lata temu) programów działa poprawnie w systemie Wine. WindowsKolejnych 4397 programów (4370 rok temu, 4312 dwa lata temu, 4227 trzy lata temu) działa prawidłowo po zastosowaniu dodatkowych ustawień i zewnętrznych bibliotek DLL. W 3943 programach (3888 rok temu, 3813 dwa lata temu, 3703 trzy lata temu) występują drobne problemy, które nie wpływają na podstawową funkcjonalność aplikacji.
Kluczowe innowacje w Wine 9.0:
- Dodano sterownik winewayland.drv, umożliwiający korzystanie z Wine w środowiskach opartych na Waylandzie bez użycia komponentów XWayland lub X11. Celem tego projektu jest zapewnienie czystego środowiska Wayland z obsługą uruchamiania. Windows- aplikacje, które nie wymagają instalacji pakietów powiązanych z X11, co pozwala na wyższą wydajność i responsywność gier poprzez eliminację zbędnych warstw. Użycie czystego środowiska Wayland dla Wine eliminuje również problemy bezpieczeństwa nieodłącznie związane z X11 (na przykład niezaufane gry X11 mogą szpiegować inne aplikacje, ponieważ protokół X11 umożliwia dostęp do wszystkich zdarzeń wejściowych i umożliwia podstawianie naciśnięć klawiszy).
Sterownik jest oznaczony jako eksperymentalny i w fazie rozwoju, ale mimo to obsługuje już wiele funkcji, takich jak zarządzanie oknami, praca z wieloma monitorami, obsługa skalowania wyjścia na ekranach o wysokiej rozdzielczości DPI, praca ze współrzędnymi względnymi podczas śledzenia ruchu myszy i obsługa interfejsu API graficznego Vulkan. Domyślnie sterownik nie jest aktywny i aby go włączyć, należy dodać „wayland” do parametru rejestru „HKCU\Software\Wine\Drivers” i upewnić się, że zmienna środowiskowa DISPLAY nie jest ustawiona: wine reg.exe add HKCU\\Software\\Wine\\Drivers /v Graphics /d x11,wayland
- Wszystkie moduły zostały przekonwertowane na interfejs wywołań systemowych NT, zamiast wykonywać bezpośrednie wywołania między warstwami PE i Unix, co oznacza zakończenie wieloletnich prac nad przekonwertowaniem wszystkich bibliotek DLL do obsługi formatu pliku wykonywalnego PE (Portable Executable).
- Kontynuowano rozwój warstwy WoW64 (64-bitowej) Windows-na-Windows), co pozwala na uruchomienie 32-bitowego Windows- aplikacje w 64-bitowych systemach Unix. Wszystkie moduły uzyskujące dostęp do bibliotek Unix korzystają z translatorów wywołań systemowych WoW64 (thunks), umożliwiając 32-bitowym modułom w formacie PE dostęp do 64-bitowych bibliotek Unix.
Ulepszono nowy tryb uruchamiania WoW64, umożliwiając uruchamianie kodu 32-bitowego w ramach procesu 64-bitowego (w starym trybie WoW64 aplikacje 32-bitowe działały w 32-bitowych procesach Unix). Dodano obsługę nowego trybu WoW64 na platformie. macOSPonieważ nowy tryb WoW64 ma pewne drobne błędy, takie jak brak obsługi 16 bitów i zmniejszona wydajność OpenGL z powodu braku obsługi rozszerzenia ARB_buffer_storage, nie jest on jeszcze domyślnie włączony i wymaga kompilacji z opcją „--enable-archs=i386,x86_64” w skrypcie konfiguracyjnym.
- Dodano możliwość wykonywania istniejących plików wykonywalnych Windows W systemach z architekturą ARM64. Wine można teraz kompilować dla interfejsu ABI ARM64EC (ARM64 Emulation Compatible) i ładować moduły ARM64EC. Moduły te upraszczają przenoszenie aplikacji pierwotnie napisanych dla architektury x86_64 na systemy ARM64 poprzez umożliwienie wykonywania poszczególnych modułów kodu x86_64 w środowisku ARM64 za pomocą emulatora. Dodano obsługę formatu plików ARM64X PE, który umożliwia załadowanie jednego pliku wykonywalnego zarówno w procesach x64/Arm64EC, jak i ARM64. Zaimplementowano interfejs do emulacji 32-bitowych systemów x86, ale biblioteka emulatora nie jest jeszcze zawarta w głównej dystrybucji Wine (zewnętrzny emulator FEX może być używany do uruchamiania kodu x86 w środowisku ARM64).
- Podsystem graficzny
- Sterownik PostScript został przeprojektowany w celu obsługi plików spool w formacie Windows, które przechowują dane o zadaniach drukowania. Bezpośrednie wywołania sterownika ze środowiska Unix są wykluczone.
- Do motywów WinRT dodano obsługę trybu ciemnego. Do WineCfg dodano ustawienie umożliwiające projektowanie ciemnego interfejsu.
- Sterownik graficznego API Vulkan dodał obsługę specyfikacji Vulkan 1.3.272 (8.0 była obsługiwana w Wine 1.3.237).
- Funkcje biblioteki GdiPlus zostały zoptymalizowane, co pozwoliło na zwiększenie wydajności grafiki.
- Direct3D
- Analizowanie strumienia poleceń wielowątkowych jest zawieszane w przypadku braku przetwarzanych poleceń renderowania, co pozwala na zmniejszenie zużycia energii do poziomu przetwarzania jednowątkowego podczas wykonywania programów, które nie zajmują całej przepustowości strumienia poleceń.
- Direct3D 10 zawiera obsługę dodatkowych efektów.
- Dokonano optymalizacji wydajności kodu WineD3D i backendu przy użyciu API grafiki Vulkan.
- Kod renderujący oparty na API Vulkan sprawdza teraz, jakie możliwości obsługuje urządzenie i informuje aplikacji, jaki poziom funkcjonalności Direct3D jest dostępny.
- Zaimplementowano funkcje D3DXFillTextureTX i D3DXFillCubeTextureTX.
- Klasyczny backend modułu cieniującego OpenGL ARB dodał obsługę definiowania cieni przy użyciu rozszerzenia ARB_fragment_program_shadow.
- D3DXLoadMeshHierarchyFromX i podobne funkcje dodały obsługę ładowania danych użytkownika za pomocą interfejsu ID3DXLoadUserData.
- Dźwięk i wideo
- Zaproponowano wstępną implementację interfejsu API DirectMusic. Dodano obsługę kolekcji, instrumentów i próbek dźwiękowych w formacie SoundFont. Dodano obsługę efektu Dopplera. Wdrożono testy w celu sprawdzenia poprawności implementacji podczas obsługi sekwencera dmime i syntezatora MIDI dmsynth.
- Biblioteka FluidSynth jest wbudowana w API DirectMusic.
- Wprowadzono obsługę ładowania czcionek dźwiękowych (SoundFont - formaty syntezy opartej na próbkach, używane do odtwarzania plików MIDI) w formatach DLS1 i DLS2, a także w formacie SF2 używanym w Linux.
- Dodano możliwość odtwarzania zawartości MIDI za pomocą biblioteki dmsynth, używając syntezatora programowego FluidSynth i API DirectSound do wyjścia audio.
- Dodano dekoder wideo w formacie kodeka wideo Indeo IV50.
- DirectShow
- Zaimplementowano komponent DMO (DirectX Media Object) z dekoderem formatu WMV (Windows Wideo multimedialne).
- Dodano filtr przechwytywania dźwięku (filtr przechwytywania dźwięku DirectShow).
- Oprócz strumieni audio, DirectShow MPEG-1 Stream Splitter obsługuje teraz również strumienie wideo i usług.
- Zaimplementowano filtr do dekodowania wideo w formacie MPEG-1 (DirectShow MPEG-1 Video Decoder).
- Urządzenia wejściowe
- DirectInput obsługuje mapowanie akcji, co pozwala na przypisanie przycisków na kontrolerze gier do określonych akcji w grach.
- Integracja pulpitu
- Powiązania zostały wyeksportowane do głównego środowiska użytkownika, dzięki czemu aplikacje działające pod Wine mogą być wywoływane jako procedury obsługi protokołu podczas otwierania adresu URL (na przykład uruchamianie spotify.exe podczas otwierania linków typu „spotify:user:spotify:playlist:848218482355482821”).
- Zaimplementowano ekstrakcję danych EDID (Extended Display Identification Data) z informacjami o parametrach podłączonego monitora, takimi jak nazwa i model urządzenia.
- Istnieje możliwość zamknięcia okna pulpitu uruchomionego w trybie pełnoekranowym za pomocą przycisku „Wyjdź z pulpitu” w menu „Start”.
- Umiędzynarodowienie
- Rozszerzono obsługę edytorów IME (Input Method Editors). Przeprowadzono prace nad zapewnieniem zgodności z natywnymi Windows Implementacje IME i ulepszona integracja z Linux IME
- Zapewniono generowanie baz danych locale w formacie locale.nls z bazy danych Unicode CLDR (Unicode Common Locale Data Repository) w wersji 44. Wsparcie dla dodatkowych locale bew-ID, blo-BJ, csw-CA, tj.-EE, mic-CA , dodano prg-PL , skr-PK, tyv-RU, vmw-MZ, xnr-IN i za-CN.
- Interfejs został przetłumaczony na język gruziński. Dostępne są tłumaczenia pełne na 16 języków i tłumaczenia częściowe na 31 języków.
- Tabele znaków Unicode zostały zaktualizowane do standardowej wersji 15.1.0. Baza danych stref czasowych została zaktualizowana.
- Jądro (interfejsy jądra Windows)
- Zgodnie z wydaną wersją Windows zdefiniowane domyślnie Windows 10.
- W przypadku plików wykonywalnych w formacie PE zaimplementowano obsługę randomizacji przestrzeni adresowej (ASLR), ale adresy służące do ładowania kodu do pamięci nie są jeszcze całkowicie losowe.
- Zaimplementowano obsługę słabo pofragmentowanej sterty (LFH, Low Fragmentation Heap), co zwiększyło wydajność operacji alokacji pamięci.
- Do mechanizmu alokacji pamięci wirtualnej dodano obsługę rezerwacji pamięci (placeholder), umożliwiając aplikacji zarezerwowanie określonego obszaru pamięci wirtualnej do wykorzystania w przyszłości.
- 64-bitowe moduły ładujące (program ładujący i moduł wstępnego ładowania) plików wykonywalnych i bibliotek są kompilowane w formacie PIE (pliki wykonywalne niezależne od pozycji), aby zwolnić część 32-bitowej przestrzeni adresowej.
- Zapewniono teraz prawidłowe rozwijanie stosu dla wywołań systemowych NT i wywołań zwrotnych użytkownika.
- Funkcje sieciowe
- Silnik MSHTML obsługuje mechanizm zbierania śmieci „Cycle Collection”.
- MSHTML dodał obsługę synchronicznego przetwarzania żądań XMLHttpRequest.
- Biblioteka jscript.dll dodaje obsługę obiektu WeakMap do pracy z kolekcją par klucz/wartość, w których kluczem jest obiekt, do którego można przypisać dowolną wartość. Zaimplementowano metody WeakMap.get(), WeakMap.delete(), WeakMap.clear() i WeakMap.has().
- Silnik przeglądarki Gecko został zaktualizowany do wersji 2.47.4.
- Zaimplementowano obsługę powiadomień o zmianach stanu interfejsu sieciowego.
- Kryptografia i bezpieczeństwo
- Do biblioteki Winscard.dll dodano obsługę kart inteligentnych, zaimplementowaną poprzez bibliotekę systemową PCSClite.
- BCrypt dodał obsługę protokołu wymiany kluczy Diffie-Hellman.
- Wdrożono pakiet Negotiate, który udostępnia warstwę umożliwiającą korzystanie z interfejsu SSPI (Security Support Provider Interface) w celu uzyskania dostępu do dostawców wsparcia bezpieczeństwa (Security Support Provider, SSP).
- Aplikacje wbudowane
- Wine Debugger (winedbg) wykorzystuje bibliotekę Zydis do deasemblacji instrukcji maszynowych X86.
- Interfejs WineCfg został zaktualizowany w celu zapewnienia obsługi starszych wersji na platformach 64-bitowych. Windows (przed XP), co pozwala na uruchamianie starszych aplikacji przy użyciu trybu WoW64.
- Wszystkie wbudowane aplikacje graficzne wyświetlają teraz informacje o błędach w osobnym oknie dialogowym, zamiast wyświetlać je w konsoli.
- Program systeminfo umożliwia wyświetlanie informacji z bazy danych WMI (Windows Instrumenty zarządzania).
- Dodano aplikację klist do wyświetlania biletów Kerberos.
- Aplikacja taskkill implementuje możliwość wymuszenia zakończenia procesów potomnych.
- Narzędzie startowe ma teraz opcję „/machine” umożliwiającą wybór architektury używanej podczas uruchamiania plików wykonywalnych hybrydowych obsługujących procesory x86 i ARM.
- Większość funkcjonalności programu listy zadań została zaimplementowana.
- Dodano podstawową implementację aplikacji findstr.
- Narzędzia programistyczne
- Narzędzie WineDump umożliwia wyświetlanie zawartości plików rejestru. Windows (format REGF), a także wyświetlanie danych dla wszystkich architektur (x86/ARM64) obsługiwanych w hybrydowych plikach PE.
- Kompilator IDL obsługuje teraz atrybuty „composable”, „default_overload”, „deprecated” i „protected”.
- Usunięto bibliotekę libwine.so, która została uznana za przestarzałą w Wine 6.0 i nie jest już używana w Wine. Programy ELF zbudowane w starszych wersjach Wine (5.0 i nowszych) z libwine.so wymagają przebudowania, aby działać w Wine 9.0.
- Wbudowane biblioteki i zależności zewnętrzne
- W pakiecie zintegrowano biblioteki FluidSynth 2.3.3, Musl 1.2.3 (tylko funkcje matematyczne) i Zydis 4.0.0.
- Następujące komponenty zostały zaktualizowane do nowych wersji: 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 i Zlib 1.3. Silnik Wine Mono z implementacją platformy .NET został zaktualizowany do wersji 8.1.0.
- Sterownik winewayland.drv wykorzystuje bibliotekę klienta Wayland jako zależności zewnętrzne, a także biblioteki xkbcommon i xkbregistry.
- Do obsługi kart inteligentnych używana jest zewnętrzna biblioteka PCSClite (w macOS — PCSC).
- Tworzenie plików PE na platformach innych niż i386 wymaga teraz kompilatora krzyżowego obsługującego dyrektywy „.seh” w celu obsługi wyjątków.
Źródło: opennet.ru
