Стабильный релиз 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) и кодирования изображений в формат 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-вариантов.
Источник: http://www.opennet.ru/opennews/art.shtml? num=56539
© OpenNet