После года разработки и 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.
Стабильный релиз Wine 6.0
Также по теме: