После года разработки и 29 экспериментальных версий представлен стабильный релиз открытой реализации Win32 API — Wine 6.0, который вобрал в себя более 8300 изменений. Из ключевых достижений новой версии отмечается поставка базовых модулей Wine в формате PE, бэкенд на основе графического API Vulkan для WineD3D, новая реализация текстовой консоли, поддержка DirectShow и фреймворка Media Foundation.

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

Ключевые новшества Wine 6.0:

  • Модули в формате PE
    • Базовые DLL-библиотеки, включая NTDLL, KERNEL32, GDI32 и USER32, переведены на использование формата исполняемых файлов PE (Portable Executable, применяется в Windows) вместо ELF. Применение PE решает проблемы с поддержкой различных схем защиты от копирования, осуществляющих сверку идентичности системных модулей на диске и в памяти.
    • Предложен новый механизм прикрепления Unix-библиотек к PE-модулям для организации обращения к Unix-библиотекам из PE-файлов при необходимости вызова функций, которые не могут быть обработаны через API Win32. Дополнительные Unix-библиотеки определяются по наличию файла с расширением «so» и имени как у PE-модуля (например, ntdll.so для ntdll.dll).
    • Прекращено связывание модулей Winelib с библиотекой libwine.so и отключена загрузка libwine.so во время выполнения. Из-за данного изменения потеряна обратная совместимость, т.е. модули собранные для Wine 6.0 не смогут загружаться в старых выпусках Wine. Библиотека libwine больше не используется в Wine 6.0, но продолжает поставляться для совместимости с модулями, собранными для старых версий Wine.
    • Реализована поддержка сборки PE-модулей с сохранением отладочной информации в отдельном файле, что позволяет сократить размер устанавливаемых файлов.
  • Графическая подсистема
    • Добавлена поддержка отрисовки дуг, эллипсов и скруглённых прямоугольников при помощи API Direct2D.
    • В базовый каталог Wine обеспечена установка стандартного цветового профиля sRGB для приложений, которые пытаются загрузить его напрямую.
    • Реализована возможность использования экранного драйвера null как нормального графического драйвера в условиях, когда можно обойтись без интерфейса пользователя.
    • В WindowsCodecs добавлена поддержка декодирования изображений в форматах DDS (DirectDraw Surface) и JPEG-XR, а также кодирования в формат GIF.
    • В драйвере Vulkan реализована поддержка спецификации графического API Vulkan 1.2.162. Обеспечено создание манифеста JSON и записи в реестре, используемых официальным загрузчиком Vulkan.
    • Улучшена реализация GdiPlus, в том числе появилась поддержка расширяющихся линий, дополнительных стилей штриховки и новых типов записей в meta-файлах.
  • Direct3D
    • Для WineD3D реализован экспериментальный движок отрисовки, осуществляющий трансляцию вызовов Direct3D 12 в графический API Vulkan. Для работы движка необходима библиотека libvkd3d-shader, осуществляющая поддержку трансляции байткода 4 и 5 моделей шейдеров в промежуточное представление SPIR-V. Поддерживаются вершинные, пиксельные, тесселяционные, вычислительные и простые геометрические шейдеры, сериализация и десериализация корневой подписи. Из шейдерных инструкций реализованы арифметические, атомарные и битовые операции, операторы сравнения и управления потоком передачи данных, инструкции sample, gather и load, операции неупорядоченного доступа (UAV, Unordered Access View). Для включения движка отрисовки через API Vulkan следует установить переменную реестра
      Direct3D «renderer» в значение «vulkan».

    • Реализованы новые возможности Direct3D 11, такие как независимые состояния смешивания, смешивание по нескольким источникам, маски для MSAA (Multi-Sample Anti-Aliasing) и дополнительные запросы возможностей.
    • Для Direct3D 9 реализована поддержка режима мультисемплинг-сглаживания с учётом прозрачности (alpha-to-coverage).
    • Добавлена поддержка OpenGL-расширений EXT_framebuffer_multisample_blit_scaled и ARB_buffer_storage.
    • Расширена база данных графических карт для Direct3D.
    • Добавлены новые настройки для ключей реестра HKEY_CURRENT_USER\Software\Wine\Direct3D «renderer» (выбор бэкенда отрисовки «gl», «gdi», «no3d» или «vulkan») и «csmt» (управление многопоточной обработкой команд Direct3D). Удалён ключ «DirectDrawRenderer», вместо которого следует использовать «renderer».
  • D3DX
    • Предоставлена возможность отрисовки текста через интерфейс ID3DXFont.
    • Реализован интерфейс ID3D12ShaderReflection и функции получения параметров изображений, такие как 3DX10GetImageInfoFromMemory().
  • Ядро (интерфейсы ядра Windows)
    • Реализован режим совместимости с разными версиями Windows, позволяющий вернуть приложению требуемый номер версии Windows.
    • Добавлена поддержка отражения (mapping) файлов конфигурации в формате ini (win9x) в соответствующие параметры в реестре (NT).
    • Добавлены новые объекты и функции ядра NT, необходимые для работы систем античита, загружающих драйверы ядра.
    • Реализован драйвер NetIO.sys, который можно использовать для организации доступа к сети драйверов, защищённых от копирования
    • В ntdll добавлена поддержка AVX-регистров x86.
  • Интерфейс пользователя и интеграция с рабочим столом
    • В winex11.drv и обработчик настроек XRandR 1.4 добавлена поддержка режимов дисплея для разных ориентаций экрана.
    • Обеспечено единое представление графических адаптеров в API X11,
      OpenGL и Vulkan.

    • Реализована поддержка свойства _GTK_WORKAREAS для корректной раскладки элементов рабочего стола в многомониторных конфигурациях.
  • Устройства ввода
    • Добавлена поддержка устройств и сообщений RawInput, которые задействованы вместо низкоуровневых обработчиков в реализации DirectInput.
    • Добавлен драйвер ядра Windows для доступа к USB-устройствам, основанный на библиотеке LibUSB.
    • Реализовано сохранение истории изменения позиции мыши, которая необходима для более точного позиционирования в играх.
    • Добавлена возможность настройки маппинга кнопок на игровых контроллерах в SDL при помощи переменной окружения SDL_GAMECONTROLLERCONFIG.
    • Реализованы уведомления о подключении устройств Plug & Play.
  • Сетевые возможности
    • Браузерный движок Gecko обновлён до версии 2.47.2.
    • Реализован API WebSocket.
    • Улучшено информирование о местоположении ошибок при сбоях выполнения кода на JScript и VBScript;
    • Улучшена поддержка сервисов LDAP и Active Directory. Решены проблемы с компиляцией wldap32 на системах без установленной поддержки LDAP.
    • Добавлена начальная реализация сетевого драйвера NDIS.
    • Улучшена реализация механизма идентификации объектов OLE (OLE Moniker). В диалог привязки данных через OLE добавлена возможность настройки ODBC.
  • Криптография
    • В библиотеке BCrypt реализованы дополнительные алгоритмы, включая поддержку ключей DSA и шифра 3DES.
    • Добавлен и активирован по умолчанию криптопровайдер DSSENH, предоставляющий функции для хэширования и создания/проверки цифровых подписей с использованием алгоритмов SHA и DSS (Digital Signature Standard).
  • Текст и шрифты
    • Предложена новая реализация текстовой консоли, которая избавлена от зависимости от библиотеки curses. Обработчик консоли вынесен в отдельный процесс ConHost, а WineConsole переделана в обвязку над ConHost. Новая консоль поддерживает unix-подобные псевдоконсоли ConPTY, escape-последовательности, операций с окнами и возможность создания консольного окна в стиле wineconsole.
    • В DirectWrite для всех начертаний включены средства для работы с формами (shaping). Поддерживаются все типы подстановки глифов GSUB/GPOS.
    • В DirectWrite для увеличения производительности обеспечено прямое чтение из шрифта данных CMAP без обращения к общему кэшу и без создания объектов FreeType.
    • Операции инициализации шрифтов в GDI32 по возможности избавлены от обращения к FreeType для ускорения запуска. Повышена эффективность работы кэша реестра шрифтов.
    • Код для поддержки API Uniscribe в библиотеке USP10 перенесён в GDI32, по аналогии с тем, как это сделано в новых версиях Windows.
    • Предложена начальная версия шрифта Webdings.
  • Звук и видео
    • Существенно доработана реализация фреймворка Media Foundation, в котором появилась начальная поддержка компонентов Media Session, Streaming Audio Renderer (SAR), Video Renderer, EVR mixer, Topology Loader и Media Engine.
    • Предложена более полная реализация библиотеки AMStream (ActiveMovie Multimedia Streaming), в которой доступны полноценные средства для потокового вещания и управления частотой дискретизации.
    • В Video Mixing Renderer добавлена поддержка безоконного режима (windowless) и режима без отрисовки (renderless), возможность автоматической подгонки размера видео под размер окна, аппаратного ускорения преобразования цветового пространства и отображения рамки (letterboxing) вокруг содержимого для достижения корректного соотношения сторон.
    • Для вывода видео вместо GDI по умолчанию задействован компонент Video Mixing Renderer, при наличии соответствующей поддержки в Direct3D.
    • Добавлены фильтры DirectShow File Writer и DirectX Media Object (DMO) Wrapper. В фильтре захвата видео расширен вывод информации о форматах видео, размере и частоте кадров.
    • Добавлены новые функции в API Media Detector.
    • В фильтр-обвязку над GStreamer добавлена поддержка преобразования форматов видео и звука.
    • В Enhanced Video Renderer (EVR) реализована поддержка микширования через API DXVA2.
    • Добавлены звуковые библиотеки XACT3 Engine (Cross-platform Audio Creation Tool, xactengine3_*.dll), реализованные через FAudio.
  • Интернационализация
    • Данные Unicode приведены к соответствию спецификации Unicode 13.
    • Добавлена полная поддержка нормализации Unicode-строк.
    • Улучшена совместимость с Windows таблиц сопоставления символьных кодировок. Задействованы файлы с кодировками из набора Microsoft Open Specification. Удалены кодировки, которые отсутствуют в Windows.
    • Реализована генерация NLS-файлов для таблиц кодировок и добавлена возможность использования внешних таблиц для кодировок Unix.
    • Добавлена поддержка таблиц для сопоставления символов с учётом их лингвистического значения;
    • В компиляторе ресурсов wrc и утилите для управления ресурсами wmc улучшена поддержка UTF-8 и добавлена возможность использования внешних файлов NLS.
    • Улучшена поддержка доменных имён, содержащих символы национальных алфавитов (IDN, Internationalized Domain Names);
  • C Runtime
    • В библиотеках C runtime реализована вся необходимая поддержка программ в формате PE, позволившая исключить MinGW runtime из зависимостей.
    • Встроенные программы и Winegcc переведены на использование нового C runtime UCRTBase.
    • В C runtime добавлена поддержка локалей Windows, использующих кодировку UTF-8.
    • В C runtime добавлена встроенная реализация математических функций,
      основанная на коде из библиотеки Musl.

    • Переделан и избавлен от привязки к системной функции printf код вывода чисел с плавающей запятой.
  • Альтернативные платформы
    • Прекращена поддержка 32-разрядной архитектуры PowerPC, находившаяся в неработоспособном виде.
    • Добавлена поддержка обработки исключений и раскручивания стека на 32- и 64-разрядных системах ARM.
    • Добавлена начальная поддержка ARM64 для macOS на системах с новыми чипами Apple.
    • Для FreeBSD включены оптимизации для игнорирования регистра символов в именах файлов.
  • Инструменты для разработки / Winelib
    • Для совместимости с отладчиками для Windows в Winegcc добавлена поддержка генерации файлов PDB при сборке DLL в формате PE.
    • В Winegcc добавлена возможность генерации библиотеки импорта во время сборки DLL при указании опции ‘-Wl,—out-implib’.
    • Добавлена поддержка использования LLVM-MinGW для кросс-компиляции PE-файлов.
    • Реализована поддержка не привязанных к конкретному каталогу установок Winelib.
    • В компиляторе ресурсов wrc и утилите для управления ресурсами wmc улучшена поддержка UTF-8 и добавлена возможность использования внешних файлов NLS.
    • Улучшена поддержка синтаксиса в компиляторе WIDL (Wine Interface Definition Language), например, добавлена поддержка атрибутов «[hidden]» и «[restricted]».
  • Встроенные приложения
    • Добавлена возможность настройки версии окружения Windows из командной строки (при помощи параметра «/v» в winecfg);
    • Улучшена обработка папок оболочки (Shell Folders, специальные каталоги для размещения определённых типов контента, например, «My Pictures»). В winecfg добавлены новые стандартные папки Downloads и Templates. Устранена проблема со сбросом настроек Shell Folders после каждого обновления wine;
    • Из WineCfg удалён код для автоопределения внешних накопителей,
      вместо которого теперь используется соответствующий интерфейс DBus.

    • В утилиту FSUTIL добавлена команда ‘hardlink’ для создания жёстких ссылок.
    • В утилиту FIND добавлена поддержка поиска сразу нескольких файлов.
    • Реализована утилита WHOAMI для показа имени текущего пользователя.
  • Система сборки
    • Обеспечена генерация нерекурсивных сборочных сценариев (только один makefile на верхнем уровне).
    • Добавлена поддержка использования LLVM-MinGW для кросс-компиляции PE-файлов;
    • Добавлена поддержка сборки с использованием Clang в режиме совместимости с MSVC;
    • В spec-файлах добавлена поддержка флага ‘-syscall’ для генерации таблицы входных точек системных вызовов в стиле NT.
  • Разное
    • Движок Mono обновлён до версии 5.1.1 с поддержкой средств форматирования текста из WPF (Windows Presentation Foundation).
    • Большинство модулей переведено на использование более читаемых строк вида L»abc» вместо массивов.
    • В MSI-установщиках добавлена поддержка кнопок с изображениями и списками.
    • Добавлена начальная поддержка API Print Ticket.