Po roku prac rozwojowych i 28 wersjach eksperymentalnych stabilne wydanie otwartej implementacji Win32 API — , które zawiera ponad 7400 zmian. Wśród kluczowych osiągnięć nowej wersji wyróżnia się dostarczenie wbudowanych modułów Wine w formacie PE, wsparcie dla konfiguracji wielomonitorowych, nowa implementacja dźwiękowego API XAudio2 i wsparcie dla graficznego API Vulkan 1.1.
W Wine pełna obsługa 4869 (rok temu 4737) programów dla Windows, a 4136 (rok temu 4045) programów działa świetnie przy dodatkowych ustawieniach i zewnętrznych DLL. W 3635 programach występują drobne problemy, które nie utrudniają korzystania z podstawowych funkcji aplikacji.
Kluczowe Wine 5.0:
- Moduły w formacie PE
- Przy obecności kompilatora MinGW, większość modułów Wine jest teraz kompilowana w formacie plików wykonywalnych PE (Portable Executable, stosowany w Windows) zamiast ELF. Zastosowanie PE rozwiązuje problemy z obsługą różnych mechanizmów ochrony przed kopiowaniem, które weryfikują tożsamość modułów systemowych na dysku i w pamięci;
- Pliki wykonywalne PE są teraz kopiowane do katalogu ~/.wine ($WINEPREFIX) zamiast używać fikcyjnych plików DLL, co sprawia, że struktura jest bardziej podobna do rzeczywistych instalacji Windows, kosztem dodatkowej przestrzeni dyskowej;
- Moduły przekształcone do formatu PE mogą korzystać z wbudowanych Funkcji C i stałych Unicode (na przykład, L"abc");
- W czasie działania Wine dodano wsparcie dla wiązania z plikami binarnymi skompilowanymi w MinGW, które przy kompilacji DLL jest domyślnie używane zamiast MinGW runtime;
- Podsystem graficzny
- Dodano wsparcie dla pracy z wieloma monitorami i adapterami graficznymi, w tym możliwość dynamicznej zmiany ustawień;
- Zaktualizowano sterownik dla graficznego API Vulkan, który został dostosowany do specyfikacji Vulkan 1.1.126;
- W bibliotece WindowsCodecs wdrożono możliwość konwersji dodatkowych formatów rastrowych, w tym formatów z indeksowaną paletą;
- Direct3D
- Podczas uruchamiania aplikacji w trybie pełnoekranowym zapewniono blokadę wywołania ochrony ekranu;
- W DXGI (DirectX Graphics Infrastructure) dodano wsparcie informowania aplikacji o minimalizacji jej okna, co pozwala aplikacji zmniejszyć wykonywanie zasobożernych operacji podczas minimalizacji okna;
- Dla aplikacji korzystających z DXGI, wprowadzono możliwość przełączania między trybem pełnoekranowym a okienkowym za pomocą kombinacji Alt+Enter;
- Rozszerzono możliwości implementacji Direct3D 12, przykładami są wsparcie dla przełączania między trybem pełnoekranowym a okienkowym, zmiany trybów ekranu, wyjście ze skalowaniem oraz kontrola interwału zamiany buforów rysowania (swap interval);
- Ulepszono przetwarzanie różnych sytuacji brzegowych, takich jak użycie wartości wykraczających poza dozwolone zakresy dla testów przezroczystości i głębokości, rysowanie z wykorzystaniem tekstur i buforów odbitych, użycie nieprawidłowych obiektów DirectDraw. , tworzenie urządzeń Direct3 dla nieprawidłowych okien, wykorzystanie widocznych obszarów, których minimalne wartości parametrów równe są wartościom maksymalnym itd.
- W Direct3D 8 i 9 zapewniono dokładniejsze śledzenie "" obszarów ładowanych tekstur;
- Zmniejszono rozmiar wymaganego adresu przestrzeni przy ładowaniu tekstur 3D skompresowanych metodą S3TC (zamiast ładowania w całości, tekstury ładowane są w fragmentach).
- Wprowadzono interfejs do zabezpieczenia sekcji krytycznych w aplikacjach wielowątkowych;
- Dla starszych aplikacji DirectDraw wprowadzono różne ulepszenia i poprawki związane z obliczaniem oświetlenia;
- Wprowadzono dodatkowe wywołania do uzyskiwania informacji o shaderach w API ;
- W wined3d dodano wsparcie dla opartego na CPU do przetwarzania skompresowanych zasobów;
- Rozszerzona baza danych kart graficznych rozpoznawanych w Direct3D;
- Dodano nowe klucze rejestru HKEY_CURRENT_USER\Software\Wine\Direct3D: „shader_backend” (backend do pracy z shaderami: „glsl” dla GLSL, „arb” dla ARB vertex/fragment i „none” dla wyłączenia wsparcia shaderów), „strict_shader_math” (0x1 — włączyć, 0x0 — wyłączyć konwersję shaderów Direct3D). Klucz „UseGLSL” ogłoszono jako przestarzały (zalecane jest użycie „shader_backend”);
- D3DX
- Wprowadzono wsparcie dla mechanizmu kompresji tekstur 3D S3TC (S3 Texture Compression);
- Dodano poprawne implementacje takich operacji, jak wypełnianie teksturą i powierzchnie nieodzwierciedlające (unmappable);
- Wprowadzono różne ulepszenia i poprawki do frameworka do tworzenia ;
- Jądro (interfejsy jądra Windows)
- Większość funkcji używanych w Kernel32 została przeniesiona do
KernelBase, zgodnie ze zmianami w architekturze Windows; - Możliwość mieszania 32- i 64-bitowych DLL w katalogach używanych do ładowania. Zapewnione jest ignorowanie bibliotek, które nie odpowiadają aktualnej architekturze (32/64), w przypadku gdy można znaleźć odpowiadającą architekturze bibliotekę na dalszej ścieżce;
- Dla sterowników urządzeń poprawiono emulację obiektów jądra;
- Zrealizowane obiekty synchronizacji działające na poziomie jądra, takie jak spin-locki, szybkie muteksy oraz zmienne przydzielane do zasobów;
- Zapewnione jest prawidłowe informowanie aplikacji o stanie akumulatora;
- Większość funkcji używanych w Kernel32 została przeniesiona do
- Interfejs użytkownika i integracja z pulpitem
- Zminimalizowane okna są teraz wyświetlane z użyciem nagłówka, a nie ikony w stylu Windows 3.1;
- Dodano nowe style przycisków (przycisk z rozwijanym menu akcji) oraz (łącza w oknach dialogowych używane do przejścia do następnego etapu);
- Dla folderów ‘Downloads’ i ‘Templates’ utworzono dowiązania symboliczne wskazujące na odpowiednie katalogi w systemach Unix;
- Urządzenia wejściowe
- Podczas uruchamiania zapewniona jest instalacja i ładowanie niezbędnych sterowników urządzeń Plug & Play;
- Ulepszono wsparcie dla kontrolerów gier, w tym mini-joysticka (hat switch), kierownicy, pedałów gazu i hamulca.
- Zaprzestano wsparcia dla starego API Linux do interakcji z joystickami używanego w jądrach Linux do wersji 2.2;
- .NET
- Silnik Mono zaktualizowano do wersji 4.9.4 i teraz zawiera części frameworka Windows Presentation Foundation (WPF);
- Dodano możliwość instalacji dodatków Mono i Gecko w jednym wspólnym katalogu z umiejscowieniem plików w hierarchii /usr/share/wine zamiast kopiowania ich do nowych prefiksów;
- Możliwości sieciowe
- Silnik przeglądarki Wine Gecko, który jest używany w bibliotece MSHTML, zaktualizowano do wersji 2.47.1. Wprowadzono wsparcie dla nowych API HTML;
- W MSHTML wprowadzono wsparcie dla elementów SVG;
- Dodano wiele nowych funkcji VBScript (np. obsługa błędów i wyjątków, funkcje Hour, Day, Month, String, LBound, RegExp.Replace, RScriptTypeInfo_* i ScriptTypeComp_Bind* itp.);
- Zapewnione jest zachowanie stanu kodu w VBScript i JScript (persistence script);
- Dodano wstępną implementację usługi HTTP (WinHTTP) oraz powiązanego API (HTTPAPI) dla aplikacji klienckich i serwerowych, które wysyłają i odbierają żądania za pomocą protokołu HTTP;
- Wprowadzono możliwość uzyskiwania parametrów konfiguracji HTTP proxy przez DHCP;
- Dodano wsparcie dla przekierowania żądań uwierzytelniania przez usługę Microsoft Passport;
- Kryptografia
- Wprowadzono wsparcie dla kluczy kryptograficznych opartych na krzywych eliptycznych (ECC) przy użyciu GnuTLS;
- Dodano możliwość importu kluczy i certyfikatów z plików w formacie PFX;
- Dodano wsparcie dla schematu generowania kluczy opartego na haśle PBKDF2;
- Tekst i czcionki
- W realizacji API DirectWrite dodano wsparcie dla funkcji OpenType związanych z , które są włączone domyślnie dla czcionek Latin, w tym kerningu;
- Zwiększono bezpieczeństwo przetwarzania danych czcionek dzięki weryfikacji poprawności różnych tabel danych przed ich użyciem;
- Interfejsy DirectWrite zostały dostosowane do najnowszego SDK;
- Dźwięk i wideo
- Zaproponowano nową realizację API dźwiękowego , opartą na projekcie . Użycie FAudio w Wine pozwala na uzyskanie wyższej jakości dźwięku w grach oraz wykorzystanie takich możliwości jak mieszanie głośności i rozszerzone efekty dźwiękowe;
- Dodano dużą liczbę nowych wywołań do realizacji frameworka Media Foundation, w tym wsparcie dla wbudowanych i niestandardowych asynchronicznych kolejek, API Source Reader, Media Session itd.
- Filtr przechwytywania wideo przestawiono na korzystanie z API v4l2 zamiast v4l1 API, co pozwoliło na poszerzenie zakresu obsługiwanych kamer;
- Usunięto wbudowane dekodery AVI, MPEG-I i WAVE, które teraz zastępowane są przez systemowe GStreamer lub QuickTime;
- Dodano podzestaw konfiguracyjnych API VMR7;
- Dodano wsparcie dla regulacji głośności poszczególnych kanałów w sterownikach dźwięku;
- Międzynarodowa lokalizacja
- Tabele Unicode zaktualizowano do wersji 12.1.0;
- Wprowadzono wsparcie dla normalizacji Unicode;
- Zapewniono automatyczne ustawienie regionu geograficznego (HKEY_CURRENT_USER\Control Panel\International\Geo) na podstawie bieżącej lokalizacji;
- RPC/COM
- W typelib dodano wsparcie dla złożonych struktur i tablic;
- Dodano początkową realizację biblioteki czasów wykonywania Windows Script;
- Dodano początkową realizację biblioteki ADO (Microsoft ActiveX Data Objects);
- Instalatory
- Dla instalatora MSI wprowadzono wsparcie dla dostarczania poprawek (Patch Files);
- W narzędziu WUSA (Windows Update Standalone Installer) dodano możliwość instalacji aktualizacji w formacie .MSU;
- Platforma ARM
- Dla architektury ARM64 w ntdll dodano obsługę odwracania stosu (stack unwinding). Dodano obsługę włączania zewnętrznych bibliotek libunwind;
- Dla architektury ARM64 wprowadzono wsparcie dla bezszwowych proxy (stubless proxies) dla interfejsów obiektów;
- Narzędzia do rozwoju / Winelib
- Dodano wsparcie dla debuggera Visual Studio do zdalnego debugowania aplikacji uruchomionych w Wine;
- Częściowo zaimplementowano bibliotekę DBGENG (Debug Engine);
- Zfiksowane pliki wykonywalne dla Windows nie są już zależne od libwine, co pozwala na ich uruchamianie w Windows bez dodatkowych zależności;
- W kompilatorze zasobów i kompilatorze IDL dodano opcję ‘—sysroot’ do określenia ścieżki do plików nagłówkowych;
- W winegcc dodano opcje ‘—target’, ‘—wine-objdir’,
‘—winebuild’ i ‘-fuse-ld’, ułatwiające konfigurację środowiska do cross-kompilacji;
- Wbudowane aplikacje
- Zaimplementowano narzędzie CHCP do konfiguracji kodowania konsoli;
- Zaimplementowano narzędzie MSIDB do manipulacji bazami danych w formacie MSI;
- Optymalizacja wydajności
- Różne funkcje związane z czasem zostały przeniesione na użycie wysokowydajnych systemowych funkcji związanych z timerami, co pozwoliło na zmniejszenie kosztów w pętli rysowania wielu gier;
- Dodano możliwość używania w systemie plików Ext4 pracy bez uwzględniania wielkości liter;
- Przeprowadzono optymalizację wydajności przetwarzania dużej liczby elementów w oknach dialogowych wyświetlania list, działających w trybie LBS_NODATA;
- Dodano szybszą implementację blokad SRW (Slim Reader/Writer) dla Linux, przetłumaczoną na Futex;
- Zewnętrzne zależności
- Do kompilacji modułów w formacie PE wykorzystano cross-kompilator MinGW-w64;
- Implementacja XAudio2 wymaga biblioteki FAudio;
- Do śledzenia zmian plików w systemach BSD
wykorzystano bibliotekę Inotify; - Do przetwarzania wyjątków na platformie ARM64 wymagana jest biblioteka Unwind;
- Zamiast Video4Linux1 teraz wymagana jest biblioteka Video4Linux2.
Źródło: opennet.ru
