28.02.2024

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

После года разработки и 26 экспериментальных версий представлен стабильный релиз открытой реализации Win32 API — Wine 9.0, который вобрал в себя более 7000 изменений. Из ключевых достижений в новой версии выделяется реализация архитектуры WoW64 для запуска 32-разрядных программ в 64-разрядном окружении, интеграция драйвера для поддержки Wayland, поддержка архитектуры ARM64, реализация API DirectMusic и поддержка смарткарт.

В Wine подтверждена полноценная работа 5336 (год назад 5266, два года назад 5156, три года назад 5049) программ для Windows, ещё 4397 (год назад 4370, два года назад 4312, три года назад 4227) программ прекрасно работают при дополнительных настройках и внешних DLL. У 3943 программ (год назад 3888, два года назад 3813, три года назад 3703) наблюдаются небольшие проблемы в работе, которые не мешают использованию основных функций приложений.

Ключевые новшества Wine 9.0:

  • Добавлен драйвер winewayland.drv, позволяющий использовать Wine в окружениях на базе протокола Wayland без применения XWayland и компонентов X11. Разработка нацелена на обеспечение работы чистого Wayland-окружения c поддержкой запуска Windows-приложений, не требующего установки пакетов, связанных с X11, что позволяет добиться более высокой производительности и отзывчивости игр за счёт исключения лишних прослоек. Использование чистого окружения Wayland для Wine также позволяет избавиться от проблем с безопасностью, свойственных X11 (например, не заслуживающие доверия игры для X11 могут шпионить за другими приложениями так как протокол X11 позволяет получить доступ ко всем событиям ввода и осуществить подстановку фиктивных нажатий клавиш).

    Драйвер отмечен как экспериментальный и находящийся в разработке, но, тем не менее, в нём уже имеется поддержка многих возможностей, таких как управление окнами, работа с несколькими мониторами, поддержка масштабирования вывода на экранах с высокой плотностью пикселей (high-DPI), работа с относительными координатами при отслеживании движения мыши и поддержка графического API Vulkan.
    По умолчанию драйвер не активен и для его включения следует добавить «wayland» в параметр реестра «HKCU\Software\Wine\Drivers» и убедиться в отсутствии выставления переменной окружения DISPLAY:

     wine reg.exe add HKCU\\Software\\Wine\\Drivers /v Graphics /d x11,wayland
    
  • Осуществлён перевод всех модулей на интерфейс системных вызовов NT, вместо осуществления прямых вызовов между уровнями PE и Unix, что ознаменовало завершение многолетней работы по переводу всех DLL-библиотек на использование формата исполняемых файлов PE (Portable Executable).
  • Продолжено развитие прослойки WoW64 (64-bit Windows-on-Windows), позволяющей выполнять 32-разрядные Windows-приложения в 64-разрядных Unix-системах. Во всех модулях, обращающихся к Unix-библиотекам, задействованы преобразователи системных вызовов WoW64 (thunk), позволяющие 32-разрядным модулям в формате PE обращаться к 64-разрядным Unix-библиотекам.

    Усовершенствован новый режим запуска WoW64, в котором 32-разрядный код выполняется внутри 64-разрядного процесса (в старом режиме WoW64 32-разрядные приложения запускались в 32-разрядных Unix-процессах). Добавлена поддержка применения нового режима WoW64 на платформе macOS.
    Так как в новом режиме WoW64 отмечаются отдельные недоработки, такие как отсутствие поддержки 16-разрядного режима и снижение производительности OpenGL из-за отсутствия поддержки расширения ARB_buffer_storage, он пока не включён по умолчанию и требует сборки с опцией «—enable-archs=i386,x86_64» в скрипте configure.

  • Добавлена возможность выполнения существующих исполняемых файлов Windows на системах с архитектурой ARM64. Реализована возможность сборки Wine для ABI ARM64EC (ARM64 Emulation Compatible) и поддержка загрузки модулей ARM64EC, применяемых для упрощения портирования на системы ARM64 приложений, изначально написанных для архитектуры x86_64, через предоставление возможности выполнения в окружении ARM64 отдельных модулей с кодом x86_64 при помощи эмулятора. Добавлена поддержка формата PE-файлов ARM64X, который позволяет загружать один исполняемый файл в процессах x64/Arm64EC и ARM64. Реализован интерфейс для эмуляции 32-разрядных систем x86, но библиотека с эмулятором пока не включена в основной состав Wine (для запуска x86-кода в окружении ARM64 можно использовать внешний эмулятор FEX).
  • Графическая подсистема
    • Драйвер PostScript переработан для поддержки spool-файлов в формате Windows, в которых хранятся данные о заданиях, выводимых на печать. Исключены прямые обращения к драйверу из Unix-окружения.
    • В темы оформления WinRT добавлена поддержка тёмного режима. В WineCfg добавлена настройка для включения тёмного оформления интерфейса.
    • В драйвер для графического API Vulkan добавлена поддержка спецификации Vulkan 1.3.272 (в Wine 8.0 поддерживался 1.3.237).
    • Проведена оптимизация функций библиотеки GdiPlus, позволившая увеличить производительность работы с графикой.
  • Direct3D
    • Обеспечена приостановка разбора многопоточного потока команд в условиях отсутствия обрабатываемых команд отрисовки, что позволяет снизить потребление энергии до уровня однопоточной обработки при выполнении программ, не занимающих всю полосу пропускания потока команд.
    • В Direct3D 10 реализована поддержка дополнительных эффектов.
    • Внесены оптимизации производительности в код WineD3D и бэкенд, использующий графический API Vulkan.
    • В коде отрисовки на базе API Vulkan добавлена проверка возможностей, поддерживаемых устройством, и вывод приложению сведений о доступном уровне функциональности Direct3D.
    • Реализованы функции D3DXFillTextureTX и D3DXFillCubeTextureTX.
    • В классический бэкенд шейдеров OpenGL ARB добавлена поддержка определения теней при помощи расширения ARB_fragment_program_shadow.
    • В D3DXLoadMeshHierarchyFromX и похожие функции добавлена поддержка загрузки пользовательских данных при помощи интерфейса ID3DXLoadUserData.
  • Звук и видео
    • Предложена начальная реализация API DirectMusic. Добавлена поддержка коллекций, инструментов и образцов звуков в формате SoundFont. Добавлена поддержка эффекта Доплера. Реализованы тесты для проверки корректности реализации при работе секвенсора dmime и MIDI-синтезатора dmsynth.
    • Для использования в API DirectMusic встроена библиотека FluidSynth.
    • Реализована поддержка загрузки звуковых шрифтов (SoundFont — форматы для синтеза на основе сэмплов, используемые для воспроизведения MIDI-файлов) в форматах DLS1 и DLS2, а также в формате SF2, применяемом в Linux.
    • Добавлена возможность воспроизведения MIDI-контента при помощи библиотеки dmsynth, используя программный синтезатор FluidSynth и API DirectSound для вывода звука.
    • Добавлен декодеровщик для видео в формате видеокодека Indeo IV50.
  • DirectShow
    • Реализован компонент DMO (DirectX Media Object) с декодировщиком формата WMV (Windows Media Video).
    • Добавлен фильтр захвата звука (DirectShow Audio Capture Filter).
    • В фильтр разделения потоков MPEG‑1 (DirectShow MPEG‑1 Stream Splitter) в дополнение к звуковым потокам добавлена поддержка потоков с видео и служебных потоков.
    • Реализован фильтр для декодирования видео в формате MPEG‑1 (DirectShow MPEG‑1 Video Decoder).
  • Устройства ввода
    • В DirectInput реализована поддержка маппинга действий (action maps), позволяющих привязать кнопки на игровом контроллере к определённым действиям в играх.
  • Интеграция с рабочим столом
    • Обеспечено экспортирование в основное пользовательское окружение привязок, позволяющих вызывать запускаемые под управлением Wine приложения в качестве обработчиков протоколов при открытии URL (например, запуск spotify.exe при открытии ссылок вида «spotify:user:spotify:playlist:848218482355482821»).
    • Реализовано извлечение данных EDID (Extended Display Identification Data) с информацией о параметрах подключённого монитора, таких как название и модель устройства.
    • Предоставлена возможность закрытия окна рабочего стола, развёрнутого в полноэкранном режиме, используя кнопку «Exit desktop» в меню «Start».
  • Интернационализация
    • Расширена поддержка IME (Input Method Editors). Проведена работа по обеспечению совместимости с родными для Windows реализациями IME и улучшению интеграции с Linux IME
    • Обеспечена генерация БД локалей в формате locale.nls из БД Unicode CLDR (Unicode Common Locale Data Repository) версии 44. Добавлена поддержка дополнительных локалей bew-ID, blo-BJ, csw-CA, ie-EE, mic-CA, prg-PL, skr-PK, tyv-RU, vmw-MZ, xnr-IN и za-CN.
    • Выполнен перевод интерфейса на грузинский язык. Обеспечены полные переводы для 16 языков, а частичные для 31 языка.
    • Таблицы символов Unicode обновлены до версии стандарта 15.1.0. Обновлена база часовых поясов.
  • Ядро (интерфейсы ядра Windows)
    • В качестве выдаваемой версии Windows по умолчанию определена Windows 10.
    • Для исполняемых файлов в формате PE реализована поддержка рандомизации адресного пространства (ASLR), но адреса загрузки кода в память пока полностью не рандомизированы.
    • Реализована поддержка слабо фрагментированной кучи (LFH, Low Fragmentation Heap), позволившая увеличить производительность операций выделения памяти.
    • В механизм выделения виртуальной памяти добавлена поддержка резервирования памяти (placeholder), позволяющего приложению зарезервировать определённую область виртуальной памяти для использования в будущем.
    • 64-разрядные загрузчики (loader и preloader) исполняемых файлов и библиотек собраны в формате PIE (Position-Independent Executables) для высвобождения части 32-разрядного адресного пространства.
    • Обеспечена корректная раскрутка стека (stack unwinding) для системных вызовов NT и пользовательских callback-вызовов.
  • Сетевые возможности
    • В движке MSHTML реализована поддержка механизма сборки мусора «Cycle Collection«.
    • В MSHTML добавлена поддержка синхронного режима обработки запросов XMLHttpRequest.
    • В jscript.dll добавлена поддержка объекта WeakMap для работы с коллекцией пар ключ/значение, в которых ключ является объектом, к которому может быть прикреплено произвольное значение. Реализованы методы WeakMap.get(), WeakMap.delete(), WeakMap.clear() и WeakMap.has().
    • Браузерный движок Gecko обновлён до версии 2.47.4.
    • Реализована поддержка уведомлений об изменении состояния сетевого интерфейса.
  • Криптография и безопасность
    • В библиотеке Winscard.dll добавлена поддержка смарткарт, реализованная через системную библиотеку PCSClite.
    • В BCrypt добавлена поддержка протокола обмена ключами Диффи-Хеллмана.
    • Реализован пакет Negotiate, предоставляющий прослойку для использования интерфейса SSPI (Security Support Provider Interface) для обращения к провайдерам SSP (Security Support Provider).
  • Встроенные приложения
    • В отладчике Wine Debugger (winedbg) для дизассемблирвоания машинных инструкций X86 задействована библиотека Zydis.
    • В интерфейс WineCfg добавлена возможность выставления на 64-разрядных платформах старых версий Windows (до XP), что позволяет запускать устаревшие приложения, используя режим WoW64.
    • Во всех встроенных графических приложениях реализован вывод информации об ошибках в отдельном диалоге, вместо их отображения в консоли.
    • В программе systeminfo обеспечен показ сведений из БД WMI (Windows Management Instrumentation).
    • Добавлено приложение klist для отображения тикетов Kerberos.
    • В приложении taskkill реализована возможность принудительного завершения дочерних процессов.
    • В утилиту start добавлен параметр «/machine» для выбора архитектуры, используемой при запуске гибридных исполняемых файлов, поддерживающих x86 и ARM.
    • Реализована большая часть функциональности программы tasklist.
    • Добавлена базовая реализация приложения findstr.
  • Инструменты для разработки
    • В утилите WineDump реализована возможность вывода содержимого файлов реестра Windows (формат REGF), а также показа данных для всех архитектур (x86/ARM64), поддерживаемых в гибридных PE-файлах.
    • В компиляторе IDL добавлена поддержка атрибутов «composable», «default_overload», «deprecated» и «protected».
    • Удалена библиотека libwine.so, которая была объявлена устаревшей в выпуске Wine 6.0 и давно не используется в Wine. Программы в формате ELF, собранные в старых версиях Wine (5.0 и старше) с libwine.so, для выполнения в Wine 9.0 требуют пересборки.
  • Встроенные библиотеки и внешние зависимости
    • В состав интегрированы библиотеки FluidSynth 2.3.3, Musl 1.2.3 (только математические функции) и Zydis 4.0.0.
    • Обновлены до новых версий компоненты Vkd3d 1.10, Faudio 23.12, OpenLDAP 2.5.16, LCMS2 2.15, LibMPG123 1.32.2, LibPng 1.6.40, LibTiff 4.6.0, LibXml2 2.11.5, LibXslt 1.1.38 и Zlib 1.3. Движок Wine Mono с реализацией платформы .NET обновлён до выпуска 8.1.0.
    • В драйвере winewayland.drv в качестве внешних зависимостей задействована клиентская библиотека Wayland, а также библиотеки xkbcommon и xkbregistry.
    • Для поддержки смарткарт задействована внешняя библиотека PCSClite (в macOS — PCSC).
    • Для сборки PE-файлов на платформах, отличных от i386, теперь требуется наличие кросс-компилятора с поддержкой директив «.seh» для обработки исключений.

Источник: https://www.opennet.ru/opennews/art.shtml?num=60446 Источник.