29.06.2022

Стабильный релиз Wine 7.0

После года разработки и 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_USER\Software\Wine\Direct3D удалён ключ «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-вариантов.

Источник.