Стабильный релиз Wine 5.0
21 января 2020 года
После года разработки и 28 экспериментальных версий представлен стабильный релиз открытой реализации Win32 API - Wine 5.0, который вобрал в себя более 7400 изменений. Из ключевых достижений новой версии отмечается поставка встроенных модулей Wine в формате PE, поддержка многомониторных конфигураций, новая реализация звукового API XAudio2 и поддержка графического API Vulkan 1.1.
В Wine подтверждена полноценная работа 4869 (год назад 4737) программ для Windows, еще 4136 (год назад 4045) программ прекрасно работают при дополнительных настройках и внешних DLL. У 3635 программ наблюдаются небольшие проблемы в работе, которые не мешают использованию основных функций приложений.
Ключевые новшества Wine 5.0:
- Модули в формате PE
- При наличии компилятора MinGW большинство модулей Wine теперь собираются в формате исполняемых файлов PE (Portable Executable, применяется в Windows) вместо ELF. Применение PE решает проблемы с поддержкой различных схем защиты от копирования, осуществляющих сверку идентичности системных модулей на диске и в памяти;
- Исполняемые файлы PE теперь копируются в каталог ~/.wine ($WINEPREFIX) вместо применения фиктивных DLL-файлов, что делает начинку более похожей на реальные установки Windows, ценой потребления дополнительного дискового пространства;
- Модули, преобразованные в формат PE, могут использовать штатные wchar Си-функций и константы с юникодом (например, L"abc");
- В Wine C runtime добавлена поддержка связывания с двоичными файлами, собранными в MinGW, которая при сборке DLL используется по умолчанию вместо MinGW runtime;
- Графическая подсистема
- Добавлена поддержка работы с несколькими мониторами и графическими адаптерами, включая возможность динамического изменения настроек;
- Обновлён драйвер для графического API Vulkan, который приведён в соответствие со спецификацией Vulkan 1.1.126;
- В библиотеке WindowsCodecs реализована возможность преобразования дополнительных растровых форматов, включая форматы с индексированной палитрой;
- Direct3D
- При выполнении полноэкранных приложений Direct3D обеспечена блокировка вызова хранителя экрана;
- В DXGI (DirectX Graphics Infrastructure) добавлена поддержка информирования приложения о минимизации его окна, что позволяет приложению снизить выполнение ресурсоёмких операций при сворачивании окна;
- Для приложений, использующих DXGI, реализована возможность переключения между полноэкранным и оконным режимом при помощи комбинации Alt+Enter;
- Расширены возможности реализации Direct3D 12, например, появилась поддержка переключения между полноэкранным и оконным режимом, изменения режимов экрана, вывода с масштабированием и управления интервалом замены буферов отрисовки (swap interval);
- Улучшена обработка различных пограничных ситуаций, таких как применение выходящих за допустимые диапазоны исходных значений для тестов прозрачности и глубины, отрисовка с отражёнными текстурами и буферами, использование некорректных DirectDraw объектов clipper, создание устройств Direct3 для некорректных окон, использование видимых областей, минимальные значения параметров которых равны максимальным и т.п.
- В Direct3D 8 и 9 обеспечено более точное отслеживание "грязных" областей загружаемых текстур;
- Снижен размер необходимого адресного пространства при загрузке 3D-текстур, сжатых методом S3TC (вместо загрузки целиком, текстуры грузятся кусками).
- Реализован интерфейс ID3D11Multithread для защиты критических секций в многопоточных приложениях;
- Для старых приложений DirectDraw внесены различные улучшения и исправления, связанные с расчётом освещения;
- Реализованы дополнительные вызовы для получения информации о шейдерах в API ShaderReflection;
- В wined3d добавлена поддержка блиттера на базе CPU для обработки сжатых ресурсов;
- Расширена БД графических карт, распознаваемых в Direct3D;
- Добавлены новые ключи реестра HKEY_CURRENT_USER\Software\Wine\Direct3D: "shader_backend" (бэкенд для работы с шейдерами: "glsl" для GLSL, "arb" для ARB vertex/fragment и "none" для отключения поддержки шейдеров), "strict_shader_math" (0x1 - включить, 0x0 - отключить преобразование шейдеров Direct3D). Объявлен устаревшим ключ "UseGLSL" (следует использовать "shader_backend");
- D3DX
- Реализована поддержка механизма сжатия 3D-текстур S3TC (S3 Texture Compression);
- Добавлены корректные реализации таких операций, как заливка текстурой и неотражаемые (unmappable) поверхности;
- Внесены различные улучшения и исправления во фреймворк создания визуальных эффектов;
- Ядро (интерфейсы ядра Windows)
- Большинство функций, используемых в Kernel32, перемещены в
KernelBase, следуя изменениям в архитектуре Windows;
- Возможность смешивания 32- и 64-разрядных DLL в каталогах, используемых для загрузки. Обеспечено игнорирование библиотек, не соответствующих текущей разрядности (32/64), на случай если далее в пути удастся найти корректную для текущей разрядности библиотеку;
- Для драйверов устройств улучшена эмуляция объектов ядра;
- Реализованы работающие на уровне ядра объекты синхронизации, такие как spin-блокировки, быстрые мьютексы и прикрепляемые к ресурсу переменные;
- Обеспечено корректное информирование приложений о состоянии аккумулятора;
- Интерфейс пользователя и интеграция с рабочим столом
- Минимизированные окна теперь отображаются с использованием заголовка, а не пиктограммы в стиле Windows 3.1;
- Добавлены новые стили кнопок SplitButton (кнопка с выпадающим списком действий) и Command Links (ссылки в диалоговых окнах, используемых для перехода на следующую стадию);
- Для папок 'Downloads' и 'Templates' созданы символьные ссылки, указывающие на соответствующие каталоги в Unix-системах;
- Устройства ввода
- При запуске обеспечена установка и загрузка необходимых драйверов устройств Plug & Play;
- Улучшена поддержка игровых контроллеров, включая мини-джойстик (hat switch), руль, педали для газа и тормозов.
- Прекращена поддержка старого Linux API взаимодействия с джойстиками, используемого в ядрах Linux до версии 2.2;
- .NET
- Движок Mono обновлён до выпуска 4.9.4 и теперь включает части фреймворка Windows Presentation Foundation (WPF);
- Добавлена возможность установки дополнений с Mono и Gecko в один общий каталог с размещением файлов в иерархии /usr/share/wine вместо копирования в новые префиксы;
- Сетевые возможности
- Браузерный движок Wine Gecko, который используется в библиотеке MSHTML, обновлён до выпуска 2.47.1. Реализована поддержка новых HTML API;
- В MSHTML реализована поддержка элементов SVG;
- Добавлено много новых функций VBScript (например, обработчики ошибок и исключений, функции Hour, Day, Month, String, LBound, RegExp.Replace, РScriptTypeInfo_* и ScriptTypeComp_Bind* и т.п.);
- Обеспечено сохранение состояния кода в VBScript и JScript (script persistence);
- Добавлена начальная реализация сервиса HTTP (WinHTTP) и связанного с ним API (HTTPAPI) для клиентских и серверных приложений, отравляющих и принимающих запросы при помощи протокола HTTP;
- Реализована возможность получения параметров настройки HTTP-прокси через DHCP;
- Добавлена поддержка перенаправления запросов аутентификации через службу Microsoft Passport;
- Криптография
- Реализована поддержка криптографических ключей на основе эллиптических кривых (ECC) при использовании GnuTLS;
- Добавлена возможность импорта ключей и сертификатов из файлов в формате PFX;
- Добавлена поддержка схемы формирования ключа на основе пароля PBKDF2;
- Текст и шрифты
- В реализации API DirectWrite добавлена поддержка возможностей OpenType, связанных с позиционированием глифов, которые включены по умолчанию для начертания Latin, включая кернинг;
- Повышена безопасность обработки шрифтовых данных за счёт проверки корректности различных таблиц данных перед их использованием;
- Интерфейсы DirectWrite приведены в соответствие со свежим SDK;
- Звук и видео
- Предложена новая реализация звукового API XAudio2, построенная на основе проекта FAudio. Использование FAudio в Wine позволяет добиться более высокого качества звука в играх и задействовать такие возможности как смешивание громкости и расширенные звуковые эффекты;
- Добавлено большое число новых вызовов в реализацию фреймворка Media Foundation, включая поддержку встроенных и пользовательских асинхронных очередей, Source Reader API, Media Session и т.п.
- Фильтр захвата видео переведён на использование API v4l2 вместо v4l1 API, что позволило расширить диапазон поддерживаемых камер;
- Удалены встроенные декодировщики AVI, MPEG-I и WAVE, вместо которых теперь используются системные GStreamer или QuickTime;
- Добавлено подмножество конфигурационных API VMR7;
- В звуковые драйверы добавлена поддержка настройки громкости отдельных каналов;
- Интернационализация
- Таблицы Unicode обновлены до версии 12.1.0;
- Реализована поддержка нормализации Unicode;
- Обеспечена автоматическая установка географического региона (HKEY_CURRENT_USER\Control Panel\International\Geo) на основе текущей локали;
- RPC/COM
- В typelib добавлена поддержка сложных структур и массивов;
- Добавлена начальная реализация runtime-библиотеки Windows Script;
- Добавлена начальная реализация библиотеки ADO (Microsoft ActiveX Data Objects);
- Установщики
- Для установщика MSI реализована поддержка поставки патчей (Patch Files);
- В утилите WUSA (Windows Update Standalone Installer) появилась возможность установки обновлений в формате .MSU;
- Платформа ARM
- Для архитектуры ARM64 в ntdll добавлена поддержка раскрутки стека (stack unwinding). Добавлена поддержка подключения внешних библиотек libunwind;
- Для архитектуры ARM64 реализована поддержка бесшовных прокси (stubless proxies) для интерфейсов объектов;
- Инструменты для разработки / Winelib
- Добавлена возможность применения отладчика из Visual Studio для удалённой отладки приложений, запущенных в Wine;
- Частично реализована библиотека DBGENG (Debug Engine);
- Собранные для Windows исполняемые файлы больше не зависят от libwine, что позволяет запускать их в Windows без дополнительных зависимостей;
- В Resource Compiler и IDL Compiler добавлена опция '--sysroot' для определения пути размещения заголовочных файлов;
- В winegcc добавлены опции '--target', '--wine-objdir',
'--winebuild' и '-fuse-ld', упрощающие настройку окружения для кросс-компиляции;
- Встроенные приложения
- Реализована утилита CHCP для настройки кодировки консоли;
- Реализована утилита MSIDB для манипуляции с базами в формате MSI;
- Оптимизация производительности
- Различные функции работы со временем переведены на использование высокопроизводительных системных функций работы с таймером, что позволило снизить накладные расходы в цикле отрисовки многих игр;
- Добавлена возможность использования в ФС Ext4 режима работы без учёта регистра символов;
- Проведена оптимизация производительности обработки большого числа элементов в диалогах вывода списков, работающих в режиме LBS_NODATA;
- Добавлена более быстрая реализация SRW-блокировок (Slim Reader/Writer) для Linux, переведённая на Futex;
- Внешние зависимости
- Для сборки модулей в формате PE задействован кросс-компилятор MinGW-w64;
- Реализация XAudio2 требует наличия библиотеки FAudio;
- Для отслеживания изменений файлов на системах BSD
задействована библиотека Inotify;
- Для обработки исключений на платформе ARM64 необходима библиотека Unwind;
- Вместо Video4Linux1 теперь требуется библиотека Video4Linux2.
Источники
править
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.