С момента выхода Wine 5.0 прошел целый год, и разработчики представили стабильный релиз Wine 6.0. Обновлений много, всего в новой версии Wine более 8300 изменений. Главное, что стоит отметить, — поставка базовых модулей Wine в формате PE, бэкенд на основе графического API Vulkan для WineD3D, обновленная текстовая консоль, появление поддержки DirectShow и фреймворка Media Foundation.
На данный момент официально подтверждена нормальная работа 5049 Windows-приложений. С дополнительной настройкой Wine 6.0 позволяет запускать еще 4227 приложений. Работа некоторых из них нестабильна, но, в целом, под Wine работает гораздо больше 10 тысяч Windows-программ.
Так что же нового?
Появление модулей в формате РE
- Основные DLL-библиотеки, которые обеспечивают работу Windows-приложений, переведены на использование формата PE вместо ELF. В число этих библиотек вошли NTDLL, KERNEL32, GDI32 и USER32. Это сделано для того, чтобы решить проблемы с поддержкой разных схем защиты от копирования, которые обычно сверяют идентичность системных модулей как на диске, так и в памяти.
- Разработчики предложили новый способ прикрепления Unix-библиотек к PE-модулям для организации обращения к Unix-библиотекам из РЕ-файлов. Речь идет о необходимости вызова функций, не обрабатываемых через API Win32 по какой-либо причине. Дополнительные Unix-библиотеки определяются по «so»-файлу и имени как у PE-модулей.
- Разработчики отказались от связывания модулей Winelib с библиотекой libwine.so, также отключена загрузка libwine.so во время выполнения. Модули, которые собраны для новой версии, не работают в предыдущих версиях. А вот собранные ранее модули без проблем будут работать в Wine 6.0, поскольку библиотека libwine включена в состав нового релиза.
- Появилась поддержка сборки PE-модулей с сохранением отладочных данных в отдельном файле. Это дает возможность снизить размер устанавливаемых файлов.
Графика
- Появилась поддержка отрисовки дуг, эллипсов и скругленных прямоугольников. Для этого используется API Direct2D.
- В базовый каталог Wine устанавливается стандартный цветовой профиль sRGB для тех приложений, которым он нужен.
- Если есть возможность обойтись без интерфейса пользователя, используется экранный драйвер null в качестве нормального графического драйвера.
- Добавлена поддержка декодирования изображений в форматах DDS DDS (DirectDraw Surface) и JPEG-XR. Есть и кодирование в формате GIF.
- В драйвере Vulkan добавлена поддержка спецификации графического API Vulkan 1.2.162. Обеспечено создание манифеста JSON и записи в реестре, используемых официальным загрузчиком Vulkan.
- Плюс разработчики добавили поддержку расширяющихся линий, дополнительных стилей штриховки и новых типов записей в meta-файлах.
Direct3D
- Для того, чтобы все работало, в новом релизе появился экспериментальный движок отрисовки. Он реализует трансляцию вызовов Direct3D 12 в графический API Vulkan. Для его нормальной работы требуется библиотека libvkd3d-shader, осуществляющая поддержку трансляции байткода 4 и 5 моделей шейдеров в промежуточное представление SPIR-V. Благодаря всему этому поддерживаются вершинные, пиксельные, тесселяционные, вычислительные и простые геометрические шейдеры, сериализация и десериализация корневой подписи.
- Добавлены новые возможности Direct3D 11, включая независимые состояния смешивания, смешивание по нескольким источникам, маски для MSAA (Multi-Sample Anti-Aliasing) и дополнительные запросы возможностей.
- Direct3D 9 получил поддержку режима мультисемплинг-сглаживания с учетом прозрачности (alpha-to-coverage).
- Все хорошо с OpenGL-расширениями, включая поддержку EXT_framebuffer_multisample_blit_scaled и ARB_buffer_storage.
- Расширен спектр поддерживаемых моделей видеокарт.
- Что касается D3DX, то появилась возможность отрисовки текста через интерфейс ID3DXFont, плюс реализован интерфейс ID3D12ShaderReflection и функции получения параметров изображений, такие как 3DX10GetImageInfoFromMemory().
Ядро
- У разработчиков получилось добавить режим совместимости с разными версиями Windows, благодаря чему приложение получает нужный ему номер версии ОС.
- Добавлена поддержка файлов конфигурации для win9x.
- Появились новые объекты и функции ядра NT, которые нужны для работы систем античит.
- Добавлен драйвер NetlO.sys, который используется для организации доступа к сети драйверов, защищенных от копирования.
- В ntdll добавлена поддержка AVX-регистров x86.
Рабочий стол и интерфейс пользователя
- В winex11.drv и обработчик настроек XRandR 1.4 добавлена поддержка режимов дисплея для разных ориентаций экрана.
- В API X11, OpenGL и Vulkan обеспечивается единое представление графических адаптеров.
- Добавлена поддержка свойства _GTK_WORKAREAS для корректной раскладки элементов рабочего стола в многомониторных конфигурациях.
Ввод информации
- В новом релизе появилась поддержка устройств и сообщений Rawinput.
- Добавлен драйвер ядра Windows для доступа к USB-устройствам, который основан на библиотеке LibUSB.
- Для более точного позиционирования в играх реализовано сохранение истории позиции мыши.
- Добавлен маппинг кнопок на игровых контроллерах.
- Появились уведомления о подключении новых устройств Plug&Play.
Сеть
- Обновлена версия движка Gecko до версии 2.47.2.
- Добавлен API WebSocket.
- Оптимизирована поддержка сервисов LDAP и Active Directory.
Звук и видео
- В Wine кардинально переработана реализация фреймворка 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) вокруг содержимого для достижения корректного соотношения сторон.
- Добавлены новые фильтры DirectShow File Writer и DirectX Media Object (DMO) Wrapper.
- А еще добавлены звуковые библиотеки XACT3 Engine (Cross-platform Audio Creation Tool, xactengine3_*.dll), реализованные через FAudio.
C Runtime
- В библиотеках реализована полная поддержка программ в формате PE, позволившая исключить MinGW runtime из зависимостей.
- Все встроенные программы и Winegcc переведены на использование C runtime UCRTBase.
- В C runtime добавлена еще и поддержка локалей Windows c использованием кодировки UTF-8.
Разработка
- Для обеспечения совместимости с отладчиками для Windows в Winegcc добавлена поддержка генерации файлов PDB при сборке DLL в формате PE.
- Добавлена возможность генерации библиотеки импорта во время сборки DLL при указании опции '-Wl,--out-implib'.
- Добавлена поддержка LLVM-MinGW для кросс-компиляции PE-файлов.
- Появилась поддержка не привязанных к конкретному каталогу установок WineLib.
Встроенные приложения
- Появилась возможность настройки версии окружения Windows напрямую из командной строки.
- Улучшена обработка папок оболочки. Появились стандартные папки Downloads и Templates.
- Для подключения внешних накопителей используется интерфейс Dbus.
- Реализована утилита WHOAMI для показа имени текущего пользователя.
С полным списком изменений можно ознакомиться на сайте разработчиков.