Stabilna wersja Wine 9.0

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.

Wine potwierdziło pełne działanie 5336 (rok temu 5266, dwa lata temu 5156, trzy lata temu 5049) programów dla Windows, kolejnych 4397 (rok temu 4370, dwa lata temu 4312, trzy lata temu 4227) programów działa doskonale z dodatkowe ustawienia i zewnętrzna biblioteka DLL. 3943 programy (rok temu 3888, dwa lata temu 3813, trzy lata temu 3703) mają drobne problemy w działaniu, które nie zakłócają korzystania z głównych funkcji aplikacji.

Kluczowe innowacje w Wine 9.0:

  • Dodano sterownik winewayland.drv, umożliwiający korzystanie z Wine w środowiskach opartych na protokole Wayland bez użycia komponentów XWayland i X11. Rozwój ma na celu zapewnienie czystego środowiska Wayland ze wsparciem dla uruchamiania aplikacji Windows, które nie wymagają instalacji pakietów związanych z X11, co pozwala na wyższą wydajność i responsywność gier poprzez eliminację zbędnych warstw. Korzystanie z czystego środowiska Wayland dla Wine eliminuje również problemy związane z bezpieczeństwem charakterystyczne dla X11 (na przykład niezaufane gry X11 mogą szpiegować inne aplikacje, ponieważ protokół X11 umożliwia dostęp do wszystkich zdarzeń wejściowych i fałszywe zastępowanie naciśnięć klawiszy).

    Sterownik jest oznaczony jako eksperymentalny i w fazie rozwoju, niemniej jednak obsługuje już wiele funkcji, takich jak zarządzanie oknami, praca z wieloma monitorami, obsługa skalowania wyjścia na ekranach o dużej gęstości pikseli (wysokim DPI), praca z współrzędne względne podczas śledzenia ruchu myszy i obsługa interfejsu API grafiki Vulkan. Domyślnie sterownik jest nieaktywny 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 skonwertowane do interfejsu wywołań systemowych NT, zamiast wykonywać bezpośrednie wywołania pomiędzy warstwami PE i Unix, co oznacza zakończenie wielu lat pracy nad konwersją wszystkich bibliotek DLL do formatu pliku wykonywalnego PE (Portable Executable).
  • Kontynuowano rozwój warstwy WoW64 (64-bitowy Windows-on-Windows), która umożliwia uruchamianie 32-bitowych aplikacji Windows na 64-bitowych systemach Unix. Wszystkie moduły uzyskujące dostęp do bibliotek Uniksa korzystają z wywołań systemowych WoW64, aby umożliwić 32-bitowym modułom w formacie PE dostęp do 64-bitowych bibliotek Uniksa.

    Ulepszono nowy tryb uruchamiania WoW64, który uruchamia 32-bitowy kod w procesie 64-bitowym (w starym trybie WoW64 32-bitowe aplikacje działały w 32-bitowych procesach Uniksa). Dodano obsługę korzystania z nowego trybu WoW64 na platformie macOS. Ponieważ nowy tryb WoW64 ma pewne wady, takie jak brak obsługi trybu 16-bitowego 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ść uruchamiania istniejących plików wykonywalnych Windows w systemach o architekturze ARM64. Zaimplementowano możliwość budowania Wine dla ARM64EC ABI (kompatybilny z emulacją ARM64) oraz obsługę ładowania modułów ARM64EC, co ma na celu uproszczenie przenoszenia aplikacji napisanych oryginalnie dla architektury x64_86 na systemy ARM64 poprzez zapewnienie możliwości wykonywania poszczególnych modułów z x64_86 kodu w środowisku ARM64 przy użyciu emulatora. Dodano obsługę formatu pliku ARM64X PE, który umożliwia ładowanie pojedynczego pliku wykonywalnego w procesach x64/Arm64EC i ARM64. Zaimplementowano interfejs do emulacji 32-bitowych systemów x86, lecz biblioteka z emulatorem nie znajduje się jeszcze w głównym pakiecie Wine (można wykorzystać zewnętrzny emulator FEX do uruchomienia kodu x86 w środowisku ARM64).
  • Podsystem graficzny
    • Sterownik PostScript został przeprojektowany tak, aby obsługiwał pliki buforowe w formacie Windows, w których przechowywane są dane dotyczące zadań drukowania. Wykluczone są bezpośrednie wywołania sterownika ze środowiska Unix.
    • 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 interfejs API DirectMusic i można z niej korzystać.
    • Zaimplementowano obsługę ładowania czcionek dźwiękowych (SoundFont - formaty syntezy opartej na samplach służące do odtwarzania plików MIDI) w formatach DLS1 i DLS2, a także w formacie SF2 używanym w systemie Linux.
    • Dodano możliwość odtwarzania treści MIDI przy użyciu biblioteki dmsynth, przy użyciu syntezatora programowego FluidSynth i interfejsu API DirectSound dla wyjścia audio.
    • Dodano dekoder wideo w formacie kodeka wideo Indeo IV50.
  • DirectShow
    • Zaimplementowano komponent DMO (DirectX Media Object) z dekoderem formatu WMV (Windows Media Video).
    • Dodano filtr przechwytywania dźwięku (filtr przechwytywania dźwięku DirectShow).
    • Oprócz strumieni audio rozdzielacz strumieni MPEG-1 (DirectShow MPEG-1 Stream Splitter) obsługuje teraz strumienie wideo i strumienie usług.
    • Zaimplementowano filtr do dekodowania wideo w formacie MPEG-1 (DirectShow MPEG-1 Video Decoder).
  • Urządzenia wejściowe
    • Funkcja DirectInput obsługuje mapowanie akcji, które umożliwia powiązanie przycisków kontrolera gier z określonymi działaniami 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
    • Rozszerzona obsługa edytora IME (edytorów metod wprowadzania). Włożono wiele pracy, aby zapewnić zgodność z natywnymi implementacjami edytora IME systemu Windows i poprawić integrację z edytorem IME systemu Linux
    • 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 systemu Windows)
    • Domyślna wersja systemu Windows, która została wydana, to 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.
    • Prawidłowe odwijanie stosu jest zapewnione 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.
    • Zaimplementowano pakiet Negotiate, zapewniający warstwę umożliwiającą wykorzystanie interfejsu SSPI (Security Support Provider Interface) w celu uzyskania dostępu do dostawców SSP (Security Support Provider).
  • Aplikacje wbudowane
    • Wine Debugger (winedbg) wykorzystuje bibliotekę Zydis do deasemblacji instrukcji maszynowych X86.
    • Do interfejsu WineCfg dodano możliwość udostępniania starszych wersji systemu Windows (pre-XP) na platformach 64-bitowych, co umożliwia uruchamianie starszych aplikacji w trybie 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 Management Instrumentation).
    • Dodano aplikację klist do wyświetlania biletów Kerberos.
    • Aplikacja taskkill implementuje możliwość wymuszenia zakończenia procesów potomnych.
    • Dodano opcję „/machine” do narzędzia startowego, aby wybrać architekturę używaną podczas uruchamiania hybrydowych plików wykonywalnych obsługujących x86 i ARM.
    • Zaimplementowano większość funkcjonalności programu list zadań.
    • Dodano podstawową implementację aplikacji findstr.
  • Narzędzia programistyczne
    • Narzędzie WineDump umożliwia wyświetlenie zawartości plików rejestru systemu Windows (format REGF), a także wyświetlenie danych dla wszystkich architektur (x86/ARM64) obsługiwanych w hybrydowych plikach PE.
    • Kompilator IDL dodał obsługę atrybutów „composable”, „default_overload”, „deprecated” i „protected”.
    • Usunięto bibliotekę libwine.so, która była przestarzała w Wine 6.0 i od dawna nie jest już używana w Wine. Programy w formacie ELF wbudowane w starsze wersje Wine (5.0 i starsze) z libwine.so wymagają przebudowania, aby mogły działać w Wine 9.0.
  • Wbudowane biblioteki i zależności zewnętrzne
    • Biblioteki FluidSynth 2.3.3, Musl 1.2.3 (tylko funkcje matematyczne) i Zydis 4.0.0 są zintegrowane z pakietem.
    • Komponenty 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 zostały zaktualizowane do nowych wersji. 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 wykorzystywana jest zewnętrzna biblioteka PCSClite (w systemie 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

Dodaj komentarz