Стабільний реліз Wine 7.0

Після року розробки та 30 експериментальних версій представлений стабільний реліз відкритої реалізації Win32 API — Wine 7.0, який увібрав у себе понад 9100 змін. З ключових досягнень нової версії відзначається переклад більшості модулів Wine у ​​форматі PE, підтримка тем оформлення, розширення стека для джойстиків та пристроїв введення з інтерфейсом HID, реалізація архітектури WoW64 для запуску 32-розрядних програм у 64-розрядному оточенні.

У Wine підтверджена повноцінна робота 5156 (рік тому 5049) програм для Windows, ще 4312 (рік тому 4227) програм чудово працюють при додаткових налаштуваннях та зовнішніх DLL. У 3813 програм (року тому 3703) спостерігаються невеликі проблеми в роботі, які не заважають використанню основних функцій додатків.

Ключові нововведення Wine 7.0:

  • Модулі у форматі PE
    • Майже всі DLL-бібліотеки перекладені використання формату виконуваних файлів PE (Portable Executable, застосовується у Windows) замість ELF. Застосування PE вирішує проблеми з підтримкою різних схем захисту від копіювання, що здійснюють звіряння ідентичності системних модулів на диску та пам'яті.
    • Реалізовано можливість взаємодії PE-модулів з Unix-бібліотеками з використанням штатного системного виклику ядра NT, що дозволяє приховати звернення до Unix-коду від налагоджувачів Windows та відстежувати реєстрацію потоків.
    • Вбудовані DLL тепер завантажуються лише за наявності на диску відповідного їм файлу у форматі PE, незалежно від цього справжня це бібліотека чи заглушка. Ця зміна дозволяє застосунку завжди бачити коректну прив'язку до PE-файлів. Для вимкнення цієї поведінки можна використовувати змінну оточення WINEBOOTSTRAPMODE.
  • WoW64
    • Реалізовано архітектуру WoW64 (64-bit Windows-on-Windows), що дозволяє запускати 32-розрядні Windows-програми в 64-розрядних Unix-процесах. Підтримка реалізована через підключення прошарку, що транслює 32-розрядні системні виклики NT в 64-розрядні звернення до NTDLL.
    • Прошароки WoW64 підготовлені для більшості Unix-бібліотек та дозволяють 32-розрядним модулям у форматі PE звертатися до 64-розрядних Unix-бібліотеків. Після завершення переведення всіх модулів у формат PE з'явиться можливість виконання 32-розрядних Windows-програм без встановлення 32-розрядних Unix-бібліотек.
  • Теми оформлення
    • Реалізовано підтримку тем оформлення. До складу включені теми оформлення «Light», «Blue» та «Classic Blue», які можна вибрати через конфігуратор WineCfg.
    • Додано можливість налаштування зовнішнього вигляду всіх елементів керування інтерфейсу через теми оформлення. Забезпечено автоматичне оновлення виду елементів після зміни теми оформлення.
    • До всіх вбудованих програм Wine додана підтримка тем оформлення. Проведено адаптацію додатків до екранів з високою щільністю пікселів (High DPI).
  • графічна підсистема
    • Додано нову бібліотеку Win32u, до якої винесені частини бібліотек GDI32 та USER32, пов'язані з обробкою графіки та керуванням вікнами на рівні ядра. Надалі почнеться робота з перенесення у Win32u компонентів драйверів, таких як winex11.drv та winemac.drv.
    • У драйвері Vulkan реалізовано підтримку специфікації графічного API Vulkan 1.2.201.
    • Надано підтримку виведення через API Direct2D штрихованих геометричних об'єктів, з можливістю перевірки попадання кліка (hit-test).
    • В API Direct2D реалізовано початкову підтримку візуальних ефектів, що застосовуються з використанням інтерфейсу ID2D1Effect.
    • В API Direct2D API додано підтримку інтерфейсу ID2D1MultiThread, що використовується для організації ексклюзивного доступу до ресурсів у багатопотокових додатках.
    • У наборі бібліотек WindowsCodecs реалізовано підтримку декодування зображень у форматі WMP (Windows Media Photo) та кодування зображень у форматі DDS (DirectDraw Surface). Припинено підтримку кодування зображень у форматі ICNS (для macOS), який не підтримується у Windows.
  • Direct3D
    • Значно покращено новий двигун малювання, що здійснює трансляцію викликів Direct3D в графічний API Vulkan. У більшості ситуацій рівень підтримки Direct3D 10 і 11 у двигуні на базі Vulkan доведений до паритету зі старим двигуном на основі OpenGL. Для включення движка малювання через Vulkan слід встановити змінну реєстру Direct3D "renderer" у значення "vulkan".
    • Реалізовано багато можливостей Direct3D 10 і 11, включаючи відкладені контексти (Deferred Contexts), об'єкти стану, що працюють у контексті пристроїв, постійні зміщення в буферах, чищення неупорядкованих уявлень текстур, копіювання даних між ресурсами в бестипових форматах (DXGI_FORMAT_BC3_TYPELESS32B32 .п.
    • Додано підтримку багатомоніторних конфігурацій, що дозволяє вибрати монітор для відображення програми Direct3D в повноекранному режимі.
    • В API DXGI реалізована можливість гамма-корекції екрану, що може застосовуватися додатками на базі Direct3D 10 та 11 для зміни яскравості екрану. Забезпечено вилучення лічильників віртуальних фреймбуферів (SwapChain).
    • У Direct3D 12 додано підтримку кореневих сигнатур версії 1.1.
    • У коді відтворення через API Vulkan підвищено ефективність обробки запитів за наявності в системі підтримки розширення VK_EXT_host_query_reset.
    • Додано можливість виводу віртуальних фреймбуферів (SwapChain) через GDI, якщо для відображення не можуть використовуватися OpenGL або Vulkan, наприклад, при виведенні у вікно з різних процесів, наприклад, у програмах на базі фреймворку CEF (Chromium Embedded Framework).
    • При використанні бекенду для шейдерів GLSL для шейдерних інструкцій забезпечено застосування модифікатора «precise».
    • В API DirectDraw додана підтримка 3D-рендерінгу в системну пам'ять, використовуючи програмні пристрої, такі як RGB, MMX і Ramp.
    • У базу графічних карток Direct3D додані карти AMD Radeon RX 5500M, AMD Radeon RX 6800/6800 XT/6900 XT, AMD Van Gogh, Intel UHD Graphics 630 та NVIDIA GT 1030.
    • З реєстру HKEY_CURRENT_USER\Software\Wine\Direct3D видалено ключ "UseGLSL", замість якого починаючи з Wine 5.0 потрібно використовувати "shader_backend".
    • Для підтримки Direct3D 12 тепер потрібна наявність бібліотеки vkd3d як мінімум версії 1.2.
  • D3DX
    • У реалізації D3DX 10 покращено підтримку фреймворку візуальних ефектів та додано підтримку формату зображень Windows Media Photo (JPEG XR)
    • Додані функції створення текстур, що надаються в D3DX10, такі як D3DX10CreateTextureFromMemory().
    • Частково реалізовані програмні інтерфейси ID3DX10Sprite та ID3DX10Font.
  • Звук та відео
    • В один спільний бекенд WineGStreamer об'єднані GStreamer-надбудови для DirectShow та фреймворку Media Foundation, що має спростити розробку нових API декодування контенту.
    • На базі бекенда WineGStreamer реалізовані об'єкти Windows Media для синхронного та асинхронного читання.
    • Продовжено доопрацювання реалізації фреймворку Media Foundation, додано підтримку функціональності IMFPMediaPlayer, розподільника семплів (sample allocator), покращено підтримку EVR та буферів малювання SAR.
    • Видалена бібліотека wineqtdecoder, що надає декодувальник для QuickTime (для всіх кодеків тепер використовується GStreamer).
  • Пристрої введення
    • Значно покращено стек для пристроїв введення, що підтримують протокол HID (Human Interface Devices), в якому реалізовані такі можливості як розбір HID-дескрипторів, обробка HID-повідомлень та надання міні-драйверів HID.
    • У бекендах драйвера winebus.sys покращено трансляцію описів пристроїв у HID-повідомленні.
    • Додано новий бекенд DirectInput для джойстиків, які підтримують протокол HID. Реалізовано можливість використання ефектів зворотного зв'язку у джойстиках. Поліпшено панель керування джойстиками. Оптимізовано взаємодію з пристроями, сумісними з XInput. У WinMM підтримка джойстиків перекладена DINput, замість використання бекенда evdev в Linux і IOHID в macOS IOHID. Видалено старий драйвер джойстиків winejoystick.drv.
    • До модуль DInput додано нові тести, що базуються на застосуванні віртуальних HID-пристроїв і не потребують наявності фізичного пристрою.
  • Текст і шрифти
    • У DirectWrite додано об'єкт Font Set.
    • У RichEdit коректно реалізовано інтерфейс TextHost.
  • Ядро (інтерфейси ядра Windows)
    • При запуску у Wine невідомого виконуваного файлу (наприклад, 'wine foo.msi') тепер викликається start.exe, який викликає обробники, пов'язані з типом файлу.
    • Додана підтримка механізмів синхронізації NtAlertThreadByThreadId та NtWaitForAlertByThreadId, близьких до ф'ютексу в Linux.
    • Додано підтримку налагоджувальних об'єктів NT, що застосовуються для налагодження функцій ядра.
    • Додано підтримку динамічних ключів реєстру для збереження даних про продуктивність.
  • C Runtime
    • У C runtime реалізовано повний набір математичних функцій, який переважно перенесений з бібліотеки Musl.
    • Для всіх платформ CPU забезпечено коректну підтримку функцій для обчислень з плаваючою комою.
  • Мережеві можливості
    • Удосконалено режим сумісності з Internet Explorer 11 (IE11), який тепер використовується за замовчуванням для обробки HTML-документів.
    • У бібліотеці mshtml реалізовано JavaScript-режим ES6 (ECMAScript 2015), в якому забезпечено підтримку таких можливостей, як вираження let та об'єкт Map.
    • Встановлення в робочий каталог Wine MSI-пакетів з доповненнями до двигуна Gecko тепер проводиться за необхідності, а не під час оновлення Wine.
    • Додано підтримку протоколу DTLS.
    • Реалізовано сервіс NSI (Network Store Interface), що зберігає та передає іншим сервісам інформацію про маршрутизацію та мережеві інтерфейси на комп'ютері.
    • Обробники API WinSock, такі як setsockopt і getsockopt, перенесені в бібліотеку NTDLL і драйвер afd.sys для відповідності архітектурі Windows.
    • У робочий каталог Wine тепер встановлюються власні файли з мережевими БД, такі як /etc/protocols та /etc/networks замість звернення до аналогічних Unix БД.
  • Альтернативні платформи
    • Додано підтримку обладнання Apple на базі ARM-чіпів M1 (Apple Silicon).
    • Для підтримки функцій BCrypt та Secur32 на платформі macOS тепер потрібна установка бібліотеки GnuTLS.
    • 32-розрядні файли для платоформ ARM тепер збираються в режимі Thumb-2, за аналогією з Windows. Для завантаження таких файлів задіяний preloader.
    • Для 32-розрядних платформ ARM реалізовано підтримку розмотування (unwinding) винятків.
    • Для FreeBSD розширено кількість підтримуваних запитів низькорівневої інформації про систему, таких як дані про стан пам'яті та рівень заряду акумулятора.
  • Вбудовані програми та інструменти для розробки
    • В утиліту reg.exe додано підтримку 32- і 64-розрядних подань реєстру. Додано підтримку копіювання ключів реєстру.
    • В утиліту WineDump додано підтримку виведення дампа метаданих Windows та показу детальної інформації про записи CodeView.
    • У налагоджувачі Wine Debugger (winedbg) реалізована можливість налагодження 32-розрядних процесів із 64-розрядного наладчика.
    • У компілятор IDL (widl) додано можливість завантаження бібліотек, вбудованих у PE-файли, забезпечено підтримку специфічних для WinRT атрибутів і конструкцій, а також реалізовано пошук бібліотек у прив'язці до платформи.
  • Система складання
    • У специфічних для апаратних архітектур каталогах бібліотеки тепер зберігаються з іменами, що відображають архітектуру і тип файлів, що виконуються, наприклад, 'i386-windows' для формату PE і 'x86_64-unix' для unix-бібліотек, що дозволяє реалізувати підтримку різних архітектур в одній установці Wine та забезпечити кроскомпіляцію Winelib.
    • Для встановлення в заголовки PE-файлів опції, що управляє переходом на використання рідних DLL-бібліотек, у winebuild додано прапор '—prefer-native option' (обробка DLL_WINE_PREATTACH в DllMain припинена).
    • Додано підтримку 4 версії формату налагоджувальних даних Dwarf, який тепер використовується за умовчанням при складанні бібліотек Wine.
    • Додана збірна опція '—enable-build-id' для збереження у виконуваних файлах унікальних ідентифікаторів збирання.
    • Додано підтримку використання компілятора Clang у режимі сумісності з MSVC.
  • Різне
    • Найменування типових каталогів у оболонці (Windows Shell) наведено до схеми, застосовуваної починаючи з Windows Vista, тобто. замість 'My Documents' тепер створюється каталог 'Documents', а більшість даних зберігається в каталог 'AppData'.
    • У прошарку для бібліотеки OpenCL додано підтримку специфікації OpenCL 1.2.
    • У драйвер WinSpool додано підтримку різних варіантів розмірів сторінок при виведенні на друк.
    • Додано початкову підтримку MSDASQL, провайдера Microsoft OLE DB для драйверів ODBC.
    • Двигун Wine Mono з реалізацією платформи .NET оновлено до випуску 7.0.0.
    • Дані Unicode оновлено до специфікації Unicode 14.
    • У дерево вихідних текстів вбудовані бібліотеки Faudio, GSM, LCMS2, LibJPEG, LibJXR, LibMPG123, LibPng, LibTiff, LibXml2, LibXslt та Zlib, які збираються у форматі PE та не вимагають наявності варіанта в Unix-форматі. При цьому дані бібліотеки також можуть бути імпортовані із системи для використання зовнішніх зборок замість вбудованих PE-варіантів.

Джерело: opennet.ru

Додати коментар або відгук