Після року розробки та 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