После года разработки и 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) и кодирования изображений в форматe 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_TYPELESS, DXGI_FORMAT_R32G32B32A32_TYPELESS) и т.п.
- Добавлена поддержка многомониторных конфигураций, позволяющая выбрать монитор для отображения 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_USERSoftwareWineDirect3D удалён ключ “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-вариантов.