Stabilna wersja Wine 7.0

Po roku rozwoju i 30 wersjach eksperymentalnych zaprezentowano stabilną wersję otwartej implementacji API Win32 - Wine 7.0, która zawierała ponad 9100 zmian. Do kluczowych osiągnięć nowej wersji należy zaliczyć tłumaczenie większości modułów Wine na format PE, obsługę motywów, rozbudowę stosu o joysticki i urządzenia wejściowe o interfejs HID oraz implementację architektury WoW64 do uruchamiania programów 32-bitowych w środowisku Środowisko 64-bitowe.

Wine potwierdziło pełne działanie 5156 (rok temu 5049) programów dla Windows, kolejnych 4312 (rok temu 4227) programów doskonale współpracuje z dodatkowymi ustawieniami i zewnętrznymi bibliotekami DLL. 3813 programów (3703 lata temu) ma drobne problemy operacyjne, które nie zakłócają korzystania z głównych funkcji aplikacji.

Kluczowe innowacje w Wine 7.0:

  • Moduły w formacie PE
    • Prawie wszystkie biblioteki DLL zostały przekonwertowane tak, aby korzystały z formatu pliku wykonywalnego PE (Portable Executable, używanego w systemie Windows) zamiast ELF. Zastosowanie PE rozwiązuje problemy z obsługą różnych schematów ochrony przed kopiowaniem, które weryfikują tożsamość modułów systemu na dysku i w pamięci.
    • Zaimplementowano możliwość interakcji modułów PE z bibliotekami Uniksa przy użyciu standardowego wywołania systemowego jądra NT, co pozwala ukryć dostęp do kodu Uniksa przed debugerami Windows i monitorować rejestrację wątków.
    • Wbudowane biblioteki DLL są teraz ładowane tylko wtedy, gdy na dysku znajduje się odpowiedni plik PE, niezależnie od tego, czy jest to prawdziwa biblioteka, czy kod pośredniczący. Ta zmiana pozwala aplikacji zawsze widzieć prawidłowe powiązanie z plikami PE. Aby wyłączyć to zachowanie, możesz użyć zmiennej środowiskowej WINEBOOTSTRAPMODE.
  • WoW64
    • Zaimplementowano architekturę WoW64 (64-bitowy Windows-on-Windows), która umożliwia uruchamianie 32-bitowych aplikacji Windows w 64-bitowych procesach Uniksa. Obsługa jest realizowana poprzez połączenie warstwy, która tłumaczy 32-bitowe wywołania systemowe NT na 64-bitowe wywołania NTDLL.
    • Warstwy WoW64 są przygotowane dla większości bibliotek Unixowych i umożliwiają 32-bitowym modułom PE dostęp do 64-bitowych bibliotek Unixowych. Po przekonwertowaniu wszystkich modułów do formatu PE możliwe będzie uruchamianie 32-bitowych aplikacji Windows bez konieczności instalowania 32-bitowych bibliotek Unix.
  • Motywy
    • Wprowadzono obsługę motywów. Dostępne są motywy projektowe „Light”, „Blue” i „Classic Blue”, które można wybrać za pomocą konfiguratora WineCfg.
    • Dodano możliwość dostosowania wyglądu wszystkich elementów sterujących interfejsu za pomocą motywów. Wygląd elementów jest automatycznie aktualizowany po zmianie motywu projektu.
    • Do wszystkich wbudowanych aplikacji Wine dodano obsługę motywów. Aplikacje zostały dostosowane do ekranów o dużej gęstości pikseli (High DPI).
  • Podsystem graficzny
    • Dodano nową bibliotekę Win32u, która zawiera części bibliotek GDI32 i USER32 związane z przetwarzaniem grafiki i zarządzaniem oknami na poziomie jądra. W przyszłości rozpoczną się prace nad przeniesieniem komponentów sterowników, takich jak winex32.drv i winemac.drv, na Win11u.
    • Sterownik Vulkan obsługuje specyfikację API grafiki Vulkan 1.2.201.
    • Zapewniono obsługę wyprowadzania zakreskowanych obiektów geometrycznych za pośrednictwem interfejsu API Direct2D, z możliwością sprawdzenia, czy kliknięcie zostało trafione (test trafień).
    • Interfejs API Direct2D zapewnia wstępną obsługę efektów wizualnych stosowanych za pomocą interfejsu ID2D1Effect.
    • W API Direct2D dodano obsługę interfejsu ID2D1MultiThread, który służy do organizowania wyłącznego dostępu do zasobów w aplikacjach wielowątkowych.
    • Zestaw bibliotek WindowsCodecs zapewnia obsługę dekodowania obrazów w formacie WMP (Windows Media Photo) i kodowania obrazów w formacie DDS (DirectDraw Surface). Nie obsługujemy już kodowania obrazów w formacie ICNS (dla systemu macOS), który nie jest obsługiwany w systemie Windows.
  • Direct3D
    • Nowy silnik renderujący został znacznie ulepszony, tłumacząc wywołania Direct3D na API graficzne Vulkan. W większości sytuacji poziom obsługi Direct3D 10 i 11 w silniku opartym na Vulkan został zrównany ze starszym silnikiem opartym na OpenGL. Aby włączyć silnik renderujący Vulkan, ustaw zmienną rejestru Direct3D „renderer” na „vulkan”.
    • Zaimplementowano wiele funkcji Direct3D 10 i 11, w tym odroczone konteksty, obiekty stanu działające w kontekście urządzenia, trwałe przesunięcia w buforach, czyszczenie widoków tekstur w niewłaściwej kolejności, kopiowanie danych między zasobami w formatach bez typu (DXGI_FORMAT_BC3_TYPELESS, DXGI_FORMAT_R32G32B32A32_TYPELESS) itp. .
    • Dodano obsługę konfiguracji z wieloma monitorami, umożliwiając wybór monitora do wyświetlania aplikacji Direct3D w trybie pełnoekranowym.
    • Interfejs API DXGI zapewnia korekcję gamma ekranu, której mogą używać aplikacje oparte na Direct3D 10 i 11 do zmiany jasności ekranu. Włączono pobieranie liczników wirtualnych buforów ramki (SwapChain).
    • Direct3D 12 dodaje obsługę podpisów głównych w wersji 1.1.
    • W kodzie renderującym poprzez Vulkan API poprawiono wydajność przetwarzania zapytań, gdy system obsługuje rozszerzenie VK_EXT_host_query_reset.
    • Dodano możliwość wyprowadzania wirtualnych buforów ramki (SwapChain) przez GDI, jeśli do wyświetlania nie można użyć OpenGL lub Vulkan, na przykład podczas wyprowadzania do okna z różnych procesów, na przykład w programach opartych na frameworku CEF (Chromium Embedded Framework).
    • Podczas korzystania z modułu cieniującego GLSL, zapewniony jest „precyzyjny” modyfikator dla instrukcji modułu cieniującego.
    • Interfejs API DirectDraw dodaje obsługę renderowania 3D do pamięci systemowej przy użyciu urządzeń programowych, takich jak „RGB”, „MMX” i „Ramp”.
    • Do bazy danych kart graficznych Direct3D dodano karty AMD Radeon RX 5500M, AMD Radeon RX 6800/6800 XT/6900 XT, AMD Van Gogh, Intel UHD Graphics 630 i NVIDIA GT 1030.
    • Z rejestru HKEY_CURRENT_USER\Software\Wine\Direct3D usunięto klucz „UseGLSL” i zamiast niego, począwszy od Wine 5.0, należy użyć „shader_backend”.
    • Aby obsługiwać Direct3D 12, potrzebujesz teraz co najmniej wersji 3 biblioteki vkd1.2d.
  • D3DX
    • Implementacja D3DX 10 poprawiła obsługę struktury efektów wizualnych i dodała obsługę formatu obrazu Windows Media Photo (JPEG XR)
    • Dodano funkcje tworzenia tekstur dostępne w D3DX10, takie jak D3DX10CreateTextureFromMemory().
    • Częściowo zaimplementowano interfejsy oprogramowania ID3DX10Sprite i ID3DX10Font.
  • Dźwięk i wideo
    • Dodatki GStreamer dla DirectShow i framework Media Foundation zostały połączone w jeden wspólny backend WineGStreamer, co powinno uprościć rozwój nowych interfejsów API dekodowania treści.
    • W oparciu o backend WineGStreamer zaimplementowano obiekty Windows Media do odczytu synchronicznego i asynchronicznego.
    • Udoskonalono implementację frameworku Media Foundation, dodano obsługę funkcjonalności IMFPMediaPlayer i alokatora próbek, a także poprawiono obsługę buforów renderowania EVR i SAR.
    • Biblioteka wineqtdecoder, która udostępnia dekoder dla formatu QuickTime, została usunięta (wszystkie kodeki korzystają teraz z GStreamera).
  • Urządzenia wejściowe
    • Stos urządzeń wejściowych obsługujących protokół HID (Human Interface Devices) został znacznie ulepszony, zapewniając takie możliwości, jak analizowanie deskryptorów HID, przetwarzanie komunikatów HID i dostarczanie sterowników mini-HID.
    • W backendach sterownika winebus.sys poprawiono tłumaczenie opisów urządzeń na komunikaty HID.
    • Dodano nowy backend DirectInput dla joysticków obsługujących protokół HID. Zaimplementowano możliwość wykorzystania efektów sprzężenia zwrotnego w joystickach. Ulepszony panel sterowania z joystickiem. Zoptymalizowana interakcja z urządzeniami kompatybilnymi z XInput. W WinMM obsługa joysticka została przeniesiona do DInput, zamiast korzystać z zaplecza evdev w systemie Linux i IOHID w systemie macOS IOHID. Stary sterownik joysticka winejoystick.drv został usunięty.
    • Do modułu DInput dodano nowe testy, oparte na wykorzystaniu wirtualnych urządzeń HID i niewymagające urządzenia fizycznego.
  • Tekst i czcionki
    • Dodano obiekt zestawu czcionek do DirectWrite.
    • RichEdit poprawnie implementuje interfejs TextHost.
  • Jądro (interfejsy jądra systemu Windows)
    • Podczas uruchamiania niezidentyfikowanego pliku wykonywalnego (takiego jak „wine foo.msi”) w Wine wywoływany jest teraz start.exe, który wywołuje procedury obsługi powiązane z typem pliku.
    • Dodano obsługę mechanizmów synchronizacji NtAlertThreadByThreadId i NtWaitForAlertByThreadId, podobnych do futeksów w systemie Linux.
    • Dodano obsługę obiektów debugowania NT używanych do debugowania funkcji jądra.
    • Dodano obsługę dynamicznych kluczy rejestru w celu zapisywania danych dotyczących wydajności.
  • Czas wykonania C
    • Środowisko wykonawcze C implementuje pełny zestaw funkcji matematycznych, które są głównie przeniesione z biblioteki Musl.
    • Wszystkie platformy procesorów zapewniają poprawną obsługę funkcji zmiennoprzecinkowych.
  • Funkcje sieciowe
    • Ulepszony tryb zgodności z przeglądarką Internet Explorer 11 (IE11), która jest teraz domyślnie używana do przetwarzania dokumentów HTML.
    • Biblioteka mshtml implementuje tryb JavaScript ES6 (ECMAScript 2015), który zapewnia obsługę takich funkcji, jak wyrażenie let i obiekt Map.
    • Instalacja pakietów MSI z dodatkami do silnika Gecko w katalogu roboczym Wine odbywa się teraz w razie potrzeby, a nie podczas aktualizacji Wine.
    • Dodano obsługę protokołu DTLS.
    • Wdrożono usługę NSI (Network Store Interface), przechowującą i przesyłającą informacje o routingu i interfejsach sieciowych na komputerze do innych usług.
    • Programy obsługi API WinSock, takie jak setsockopt i getsockopt, zostały przeniesione do biblioteki NTDLL i sterownika afd.sys, aby zapewnić zgodność z architekturą systemu Windows.
    • Pliki sieciowych baz danych Wine, takie jak /etc/protocols i /etc/networks, są teraz instalowane w katalogu roboczym Wine, zamiast uzyskiwać dostęp do podobnych baz danych Uniksa.
  • Alternatywne platformy
    • Dodano obsługę sprzętu Apple opartego na chipach M1 ARM (Apple Silicon).
    • Obsługa funkcji BCrypt i Secur32 w systemie macOS wymaga teraz instalacji biblioteki GnuTLS.
    • 32-bitowe pliki wykonywalne dla platform ARM są teraz budowane w trybie Thumb-2, podobnie jak w systemie Windows. Do ładowania takich plików służy moduł wstępnego ładowania.
    • Dla 32-bitowych platform ARM zaimplementowano obsługę wyjątków odwijania.
    • W przypadku FreeBSD zwiększono liczbę obsługiwanych zapytań o informacje systemowe niskiego poziomu, takie jak stan pamięci i poziom naładowania baterii.
  • Wbudowane aplikacje i narzędzia programistyczne
    • Narzędzie reg.exe dodało obsługę widoków rejestru 32- i 64-bitowego. Dodano obsługę kopiowania kluczy rejestru.
    • Narzędzie WineDump dodało obsługę zrzutu metadanych systemu Windows i wyświetlania szczegółowych informacji o wpisach CodeView.
    • Debuger Wine (winedbg) umożliwia debugowanie procesów 32-bitowych z poziomu debugera 64-bitowego.
    • Do kompilatora IDL (widl) dodano możliwość ładowania bibliotek wbudowanych w pliki PE, zapewniono obsługę atrybutów i konstrukcji specyficznych dla WinRT oraz zaimplementowano wyszukiwanie bibliotek specyficzne dla platformy.
  • System montażu
    • W katalogach specyficznych dla architektury biblioteki są teraz zapisywane z nazwami odzwierciedlającymi architekturę i typ pliku wykonywalnego, np. „i386-windows” dla formatu PE i „x86_64-unix” dla bibliotek unixowych, co pozwala na obsługę różnych architektur w jednym Wine instalację i zapewnić kompilację krzyżową Winelib.
    • Aby ustawić opcję w nagłówkach plików PE, która kontroluje przejście do korzystania z natywnych bibliotek DLL, do winebuilda dodano flagę „--prefer-native” (przetwarzanie DLL_WINE_PREATTACH w DllMain zostało zatrzymane).
    • Dodano obsługę wersji 4 formatu danych debugowania Dwarf, który jest teraz domyślnie używany podczas budowania bibliotek Wine.
    • Dodano opcję kompilacji „—enable-build-id”, aby zapisać unikalne identyfikatory kompilacji w plikach wykonywalnych.
    • Dodano obsługę używania kompilatora Clang w trybie zgodności z MSVC.
  • Miscellanea
    • Nazwy typowych katalogów w powłoce użytkownika (Windows Shell) nadawane są schematowi stosowanemu począwszy od Windows Vista, tj. Zamiast „Moje dokumenty” tworzony jest teraz katalog „Dokumenty”, a większość danych jest zapisywana w katalogu „AppData”.
    • Do warstwy biblioteki OpenCL dodano obsługę specyfikacji OpenCL 1.2.
    • Sterownik WinSpool dodał obsługę różnych rozmiarów stron podczas drukowania.
    • Dodano wstępną obsługę MSDASQL, dostawcy Microsoft OLE DB dla sterowników ODBC.
    • Silnik Wine Mono z implementacją platformy .NET został zaktualizowany do wersji 7.0.0.
    • Dane Unicode zostały zaktualizowane do specyfikacji Unicode 14.
    • Drzewo źródłowe obejmuje biblioteki Faudio, GSM, LCMS2, LibJPEG, LibJXR, LibMPG123, LibPng, LibTiff, LibXml2, LibXslt i Zlib, które są skompilowane w formacie PE i nie wymagają wersji w formacie Unix. Jednocześnie biblioteki te można również importować z systemu, aby korzystać z zewnętrznych zespołów zamiast wbudowanych opcji PE.

Źródło: opennet.ru

Dodaj komentarz