Stabilne wydanie Wine 5.0

Po roku prac rozwojowych i 28 wersjach eksperymentalnych zaprezentowano stabilne wydanie otwartej implementacji Win32 API — Wine 5.0, 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 został potwierdzony 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 nowości 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 wchar 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. clipper, 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 "brudnych" 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 ID3D11Multithread 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 ShaderReflection;
    • W wined3d dodano wsparcie dla blittera 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 efektów wizualnych;
  • 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;
  • 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 SplitButton (przycisk z rozwijanym menu akcji) oraz Command Links (łą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 pozycjonowaniem glifów, 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 XAudio2, opartą na projekcie FAudio. 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 trybu 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

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster