Вышел Wine 5.0
21 января 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.
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. Вот лидеры по количеству голосов:
- Final Fantasy XI
- Adobe Photoshop CS6 (13.0)
- World of Warcraft 8.3.0
- EVE Online Current
- Magic: The Gathering Online 4.x
Можно предположить, что эти приложения в Wine запускают чаще всего.
Примечание. Релиз Wine 5.0 посвящён памяти Юзефа Кучи (Józef Kucia), который трагически скончался в августе 2019 года в возрасте 30 лет, исследуя пещеру на юге Польши. Юзеф был важным участником разработке Direct3D Wine, а также ведущим автором проекта vkd3d. За время работы над Wine он внёс более 2500 патчей.