Вышел Wine 5.0

c014eef5ba0fcd4b7e826ed745558ee9.png21 января 2020 года состоялся официальный релиз стабильной версии Wine 5.0 — свободного инструмента для запуска нативных Windows-программ в UNIX-среде. Это альтернативная, свободная реализация Windows API. Рекурсивный акроним WINE означает «Wine Is Not an Emulator».

За этой версией — около года разработки и более 7400 отдельных изменений. Ведущий разработчик Александр Джуллиард (Alexandre Julliard) выделяет четыре:

  • Поддержка модулей в формате PE. Это решает проблемы с разными схемами защиты от копирования, которые проводят сверку системных модулей на диске и в памяти.
  • Поддержка нескольких мониторов и нескольких GPU, включая динамическое изменение настроек.
  • Реимплементация XAudio2 на базе проекта FAudio, открытой реализации звуковых библиотек DirectX. Переход на FAudio позволяет добиться более высокого качества звука в играх, задействовать смешивание громкости, расширенные звуковые эффекты и др.
  • Поддержка Vulkan 1.1.


Более подробно о ключевых нововведениях.

Модули PE


При наличии компилятора MinGW большинство модулей Wine теперь собираются в формате исполняемых файлов PE (Portable Executable, бинарный формат Windows) вместо ELF.

Исполняемые файлы PE теперь копируются в каталог ~/.wine вместо применения фиктивных DLL-файлов, что делает приложения более похожими на реальные установки Windows.

Пока в формат PE конвертированы не все модули. Работа продолжается.

Графическая подсистема


Как уже было сказано выше, добавлена поддержка работы с несколькими мониторами и графическими адаптерами.

Драйвер Vulkan обновлён до спецификаций Vulkan 1.1.126.

Кроме того, библиотека WindowsCodecs теперь поддерживает дополнительные растровые форматы, включая форматы с индексированной палитрой.

Direct3D


Полноэкранные приложения Direct3D теперь блокируют вызов скринсейвера.

Для приложений DXGI реализована возможность переключения между полноэкранным и оконным режимом при помощи стандартной комбинации Alt+Enter.

Расширены возможности Direct3D 12: поддержка переключения между полноэкранным и оконным режимом, изменения режимов экрана, представления с масштабированием и интервалы замены буферов отрисовки (swap interval). Все эти функции уже были реализованы для предыдущих версий Direct3D API.

Участники проекта тщательно поработали и устранили буквально сотни багов, так что улучшена обработка Wine различных пограничных ситуаций. Среди них сэмплинг ресурсов 2D в сэмплерах 3D и наоборот, применение выходящих за допустимые диапазоны исходных значений для тестов прозрачности и глубины, отрисовка с отражёнными текстурами и буферами, использование некорректных клиперов (объект DirectDraw) и многое другое.

Снижен размер необходимого адресного пространства при загрузке 3D-текстур, сжатых методом S3TC (вместо загрузки целиком, текстуры грузятся кусками).

Для старых приложений DirectDraw внесены различные улучшения и исправления, связанные с расчётом освещения.

Расширена база графических карт, распознаваемых в Direct3D.

Сеть и криптография


Движок Gecko обновлён до версии 2.47.1 для поддержки современных инструментов. Реализован ряд новых HTML API.

В MSHTML реализована поддержка элементов SVG.

Добавлено много новых функций VBScript (например, обработчики ошибок и исключений).

Реализована возможность получения параметров настройки HTTP-прокси чрез DHCP.

В криптографической части реализована поддержка криптографических ключей на основе эллиптических кривых (ECC) через GnuTLS, добавлена возможность импорта ключей и сертификатов из файлов в формате PFX, добавлена поддержка схемы формирования ключа на основе пароля PBKDF2.

2lkui3adndkv4-qbpvkyteijrha.png
Adobe Photoshop CS6 под Wine

Другие существенные нововведения


  • Поддержка спинлоков ядра NT.
  • Благодаря истечению патента на компрессию текстур DXTn и S3 стало возможно включить их в дефолтную реализацию.
  • Поддержка установки драйверов plug-and-play.
  • Различные улучшения DirectWrite.
  • Улучшенная поддержка Windows Media Foundation API.
  • Лучшая синхронизация примитивов благодаря реализации на фьютексах.
  • Совместное использование Wine-Mono для экономии места вместо опенсорсной реализации .NET на каждый ~/.wine.
  • Поддержка Unicode 12.0 и 12.1.
  • Реализация начального HTTP-сервиса (HTTP.sys) в качестве замены Winsock API и IIS, в результате чего производительность стала выше, чем у Windows Sockets API.
  • Лучшая совместимость с отладчиками Windows.
  • Лучшая поддержка LLVM MinGW и улучшения кросс-компиляции WineGCC.


Можно ещё упомянуть улучшения в пользовательском интерфейсе. Например, свёрнутые окна теперь отображаются с помощью строки заголовка, а не пиктограммами в стиле Windows 3.1. Улучшена поддержка игровых контроллеров, включая hat switch, руль и педали.

Из Wine удалены встроенные декодеры AVI, MPEG-I и WAVE, вместо которых теперь используются системные GStreamer или QuickTime.

Добавлена возможность применения отладчика из Visual Studio для удалённой отладки приложений, запущенных в Wine, частично реализована библиотека DBGENG (Debug Engine), из собираемых для Windows файлов удалена зависимость от libwine.

Для оптимизации производительности различные функции работы со временем переведены на использование высокопроизводительных системных функций работы с таймером, что позволило снизить накладные расходы в цикле отрисовки многих игр. Сделаны и другие оптимизации производительности.

Полный список изменений см. здесь.

Исходный код Wine 5.0, зеркало
Бинарники для различных дистрибутивов
Документация

На сайте AppDB ведётся база Windows-приложений, совместимых с Wine. Вот лидеры по количеству голосов:

  1. Final Fantasy XI
  2. Adobe Photoshop CS6 (13.0)
  3. World of Warcraft 8.3.0
  4. EVE Online Current
  5. Magic: The Gathering Online 4.x


Можно предположить, что эти приложения в Wine запускают чаще всего.

Примечание. Релиз Wine 5.0 посвящён памяти Юзефа Кучи (Józef Kucia), который трагически скончался в августе 2019 года в возрасте 30 лет, исследуя пещеру на юге Польши. Юзеф был важным участником разработке Direct3D Wine, а также ведущим автором проекта vkd3d. За время работы над Wine он внёс более 2500 патчей.

7f2198010813669e8e88c7a29cf1b2bf.jpg

© Habrahabr.ru