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

Після року розробки та 26 експериментальних версій представлений стабільний реліз відкритої реалізації Win32 API — Wine 9.0, який увібрав у себе понад 7000 змін. З ключових досягнень у новій версії виділяється реалізація архітектури WoW64 для запуску 32-розрядних програм у 64-розрядному оточенні, інтеграція драйвера для підтримки Wayland, підтримка архітектури ARM64, реалізація API DirectMusic та підтримка смарткарт.

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

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

  • Додано драйвер winewayland.drv, що дозволяє використовувати Wine в оточеннях на базі протоколу Wayland без застосування XWayland та компонентів X11. Розробка націлена на забезпечення роботи чистого Wayland-оточення з підтримкою запуску Windows-додатків, що не вимагає встановлення пакетів, пов'язаних з X11, що дозволяє досягти більш високої продуктивності та чуйності ігор за рахунок виключення зайвих прошарків. Використання чистого оточення Wayland для Wine також дозволяє позбутися проблем з безпекою, властивих X11 (наприклад, ігри для X11, що не заслуговують на довіру, можуть шпигувати за іншими додатками так як протокол X11 дозволяє отримати доступ до всіх подій введення і здійснити підстановку фіктивних натискань клавіш).

    Драйвер відзначений як експериментальний і що знаходиться в розробці, але, в ньому вже є підтримка багатьох можливостей, таких як управління вікнами, робота з кількома моніторами, підтримка масштабування виведення на екранах з високою щільністю пікселів (high-DPI), робота з відносними координатами при відстеженні руху миші та підтримка графічного API Vulkan. За замовчуванням драйвер не активний і для його включення слід додати "wayland" до параметра реєстру "HKCU\Software\Wine\Drivers" і переконатися у відсутності виставлення змінної оточення DISPLAY: wine reg.exe add HKCU\Software\Wine\Drivers /v Graphics /d x11,wayland

  • Здійснено переведення всіх модулів на інтерфейс системних викликів NT замість здійснення прямих викликів між рівнями PE і Unix, що ознаменувало завершення багаторічної роботи з перекладу всіх DLL-бібліотек на використання формату виконуваних файлів PE (Portable Executable).
  • Продовжено розвиток прошарку WoW64 (64-bit Windows-on-Windows), що дозволяє виконувати 32-розрядні Windows-програми в 64-розрядних Unix-системах. У всіх модулях, що звертаються до Unix-бібліотеків, задіяні перетворювачі системних викликів WoW64 (thunk), що дозволяють 32-розрядним модулям у форматі PE звертатися до 64-розрядних Unix-бібліотеків.

    Удосконалено новий режим запуску WoW64, у якому 32-розрядний код виконується всередині 64-розрядного процесу (у старому режимі WoW64 32-розрядні програми запускалися в 32-розрядних Unix-процесах). Додано підтримку застосування нового режиму WoW64 на платформі macOS. Так як у новому режимі WoW64 відзначаються окремі недоробки, такі як відсутність підтримки 16-розрядного режиму та зниження продуктивності OpenGL через відсутність підтримки розширення ARB_buffer_storage, він поки не включений за замовчуванням і вимагає складання з опцією enable-archs=i386,x86 » у скрипті configure.

  • Додана можливість виконання існуючих файлів Windows на системах з архітектурою ARM64. Реалізовано можливість складання Wine для ABI ARM64EC (ARM64 Emulation Compatible) та підтримка завантаження модулів ARM64EC, що застосовуються для спрощення портування на системи ARM64 додатків, що спочатку були написані для архітектури x86_64, через надання можливості виконання в оточенні ARM64 окремих модулів з кодом x86. Додана підтримка формату PE-файлів ARM64X, який дозволяє завантажувати один виконуваний файл у процесах x64/Arm64EC та ARM64. Реалізовано інтерфейс для емуляції 64-розрядних систем x32, але бібліотека з емулятором поки що не включена до основного складу Wine (для запуску x86-коду в оточенні ARM86 можна використовувати зовнішній емулятор FEX).
  • графічна підсистема
    • Драйвер PostScript перероблений для підтримки spool-файлів у форматі Windows, в яких зберігаються дані про завдання, що виводяться на друк. Виключено прямі звернення до драйвера з Unix-оточення.
    • У теми оформлення WinRT додано підтримку темного режиму. У WineCfg додано налаштування для включення темного оформлення інтерфейсу.
    • У драйвер для графічного API Vulkan додано підтримку специфікації Vulkan 1.3.272 (у Wine 8.0 підтримувався 1.3.237).
    • Проведено оптимізацію функцій бібліотеки GdiPlus, що дозволило збільшити продуктивність роботи з графікою.
  • Direct3D
    • Забезпечено припинення аналізу багатопоточного потоку команд в умовах відсутності оброблюваних команд малювання, що дозволяє знизити споживання енергії до рівня однопоточної обробки при виконанні програм, що не займають всю смугу пропускання потоку команд.
    • У Direct3D 10 реалізовано підтримку додаткових ефектів.
    • Внесено оптимізацію продуктивності в код WineD3D та бекенд, що використовує графічний API Vulkan.
    • У коді відтворення на базі API Vulkan додано перевірку можливостей, що підтримуються пристроєм, та виведення додатку відомостей про доступний рівень функціональності Direct3D.
    • Реалізовано функції D3DXFillTextureTX та D3DXFillCubeTextureTX.
    • У класичний бекенд шейдерів OpenGL ARB додано підтримку визначення тіней за допомогою розширення ARB_fragment_program_shadow.
    • У D3DXLoadMeshHierarchyFromX і схожі функції додана підтримка завантаження даних за допомогою інтерфейсу ID3DXLoadUserData.
  • Звук та відео
    • Запропоновано початкову реалізацію API DirectMusic. Додано підтримку колекцій, інструментів та зразків звуків у форматі SoundFont. Додано підтримку ефекту Доплера. Реалізовано тести для перевірки коректності реалізації при роботі секвенсора dmime та MIDI-синтезатора dmsynth.
    • Для використання в API DirectMusic вбудовано бібліотеку FluidSynth.
    • Реалізовано підтримку завантаження звукових шрифтів (SoundFont — формати для синтезу на основі семплів, які використовуються для відтворення MIDI-файлів) у форматах DLS1 та DLS2, а також у форматі SF2, що використовується в Linux.
    • Додано можливість відтворення MIDI-контенту за допомогою бібліотеки dmsynth, використовуючи програмний синтезатор FluidSynth та API DirectSound для виведення звуку.
    • Додано декодерувальник для відео у форматі відеокодека Indeo IV50.
  • DirectShow
    • Реалізовано компонент DMO (DirectX Media Object) із декодувальником формату WMV (Windows Media Video).
    • Додано фільтр захоплення звуку (DirectShow Audio Capture Filter).
    • У фільтр поділу потоків MPEG-1 (DirectShow MPEG-1 Stream Splitter) на додаток до звукових потоків додано підтримку потоків з відео та службових потоків.
    • Реалізовано фільтр для декодування відео у форматі MPEG-1 (DirectShow MPEG-1 Video Decoder).
  • Пристрої введення
    • У DirectInput реалізована підтримка мапінг дій (action maps), що дозволяють прив'язати кнопки на ігровому контролері до певних дій в іграх.
  • Інтеграція з робочим столом
    • Забезпечено експортування в основне користувальницьке оточення прив'язок, що дозволяють викликати програми, що запускаються під керуванням Wine, як обробники протоколів при відкритті URL (наприклад, запуск spotify.exe при відкритті посилань виду «spotify:user:spotify:playlist:848218482355482821»)
    • Реалізовано витяг даних EDID (Extended Display Identification Data) з інформацією про параметри підключеного монітора, такі як назва та модель пристрою.
    • Надано можливість закриття вікна робочого столу, розгорнутого в повноекранному режимі, використовуючи кнопку «Exit desktop» у меню «Start».
  • Інтернаціоналізація
    • Розширено підтримку IME (Input Method Editors). Проведено роботу щодо забезпечення сумісності з рідними для Windows реалізаціями IME та покращення інтеграції з Linux IME
    • Забезпечено генерацію БД локалів у форматі locale.nls з БД Unicode CLDR (Unicode Common Locale Data Repository) версії 44. Додано підтримку додаткових локалів bew-ID, blo-BJ, csw-CA, ie-EE, mic-CA, prg-PL , skr-PK, tyv-RU, vmw-MZ, xnr-IN та za-CN.
    • Виконано переклад інтерфейсу грузинською мовою. Забезпечено повні переклади для 16 мов, а часткові для 31 мови.
    • Таблиці символів Unicode оновлено до стандарту 15.1.0. Оновлено базу часових поясів.
  • Ядро (інтерфейси ядра Windows)
    • В якості версії Windows за замовчуванням визначено Windows 10.
    • Для файлів у форматі PE реалізована підтримка рандомізації адресного простору (ASLR), але адреси завантаження коду в пам'ять поки що повністю не рандомізовані.
    • Реалізовано підтримку слабо фрагментованої купи (LFH, Low Fragmentation Heap), що дозволило збільшити продуктивність операцій виділення пам'яті.
    • У механізм виділення віртуальної пам'яті додано підтримку резервування пам'яті (placeholder), що дозволяє додатку зарезервувати певну область віртуальної пам'яті для використання у майбутньому.
    • 64-розрядні завантажувачі (loader і preloader) виконуваних файлів та бібліотек зібрані у форматі PIE (Position-Independent Executables) для вивільнення частини 32-розрядного адресного простору.
    • Забезпечено коректне розкручування стека (stack unwinding) для системних викликів NT і користувальницьких callback-дзвінків.
  • Мережеві можливості
    • У двигуні MSHTML реалізована підтримка механізму складання сміття «Cycle Collection».
    • У MSHTML додано підтримку синхронного режиму обробки запитів XMLHttpRequest.
    • У jscript.dll додано підтримку об'єкта WeakMap для роботи з колекцією пар ключ/значення, в яких ключ є об'єктом, до якого може бути прикріплено довільне значення. Реалізовано методи WeakMap.get(), WeakMap.delete(), WeakMap.clear() та WeakMap.has().
    • Браузерний двигун Gecko оновлено до версії 2.47.4.
    • Реалізовано підтримку повідомлень про зміну стану мережного інтерфейсу.
  • Криптографія та безпека
    • У бібліотеці Winscard.dll додано підтримку смарткарт, реалізовану через системну бібліотеку PCSClite.
    • У BCrypt додано підтримку протоколу обміну ключами Діффі-Хеллмана.
    • Реалізовано пакет Negotiate, що надає прошарок для використання інтерфейсу Security Support Provider Interface (SSPI) для звернення до провайдерів SSP (Security Support Provider).
  • Вбудовані програми
    • У відладчику Wine Debugger (winedbg) для дизассемблірування машинних інструкцій X86 задіяна бібліотека Zydis.
    • В інтерфейс WineCfg додано можливість виставляти на 64-розрядних платформах старих версій Windows (до XP), що дозволяє запускати застарілі програми, використовуючи режим WoW64.
    • У всіх вбудованих графічних додатках реалізовано виведення інформації про помилки в окремому діалозі, замість відображення їх у консолі.
    • У програмі systeminfo забезпечено показ відомостей із БД WMI (Windows Management Instrumentation).
    • Додано програму klist для відображення тикетів Kerberos.
    • У додатку taskkill реалізовано можливість примусового завершення дочірніх процесів.
    • В утиліту start доданий параметр «/machine» для вибору архітектури, яка використовується при запуску гібридних файлів, що виконуються, підтримують x86 і ARM.
    • Реалізовано більшість функціональності програми tasklist.
    • Додано базову реалізацію програми findstr.
  • Інструменти для розробки
    • В утиліті WineDump реалізовано можливість виводу вмісту файлів реєстру Windows (формат REGF), а також показу даних для всіх архітектур (x86/ARM64), що підтримуються в гібридних PE-файлах.
    • У компіляторі IDL додано підтримку атрибутів "composable", "default_overload", "deprecated" і "protected".
    • Видалено бібліотеку libwine.so, яка була оголошена застарілою у випуску Wine 6.0 і давно не використовується у Wine. Програми у форматі ELF, зібрані у старих версіях Wine (5.0 та старше) з libwine.so, для виконання у Wine 9.0 потребують перескладання.
  • Вбудовані бібліотеки та зовнішні залежності
    • До складу інтегровані бібліотеки FluidSynth 2.3.3, Musl 1.2.3 (тільки математичні функції) та Zydis 4.0.0.
    • Оновлені до нових версій компоненти Vkd3d 1.10, Faudio 23.12, OpenLDAP 2.5.16, LCMS2 2.15, LibMPG123 1.32.2, LibPng 1.6.40, LibTiff 4.6.0, LibXml2. 2.11.5. Двигун Wine Mono з реалізацією платформи .NET оновлено до випуску 1.1.38.
    • У драйвері winewayland.drv як зовнішні залежності задіяна клієнтська бібліотека Wayland, а також бібліотеки xkbcommon і xkbregistry.
    • Для підтримки смарткарт задіяна зовнішня бібліотека PCSClite (macOS — PCSC).
    • Для складання PE-файлів на платформах, відмінних від i386, тепер потрібна наявність крос-компілятора з підтримкою директив ".seh" для обробки винятків.

Джерело: opennet.ru

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