После года разработки и 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:
В 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.