Введение
Программное обеспечение для совместимости с Windows
Wine — это бесплатный и открытый уровень совместимости, позволяющий приложениям и компьютерным играм, разработанным для Microsoft Windows, работать в Unix-подобных операционных системах. Разработчики могут компилировать приложения Windows с использованием WineLib, чтобы облегчить их портирование на Unix-подобные системы. Wine в основном разрабатывается методом обратной инженерии на основе чёрного ящика, чтобы избежать проблем с авторскими правами. Эмуляция кода или виртуализация не используются. Wine в первую очередь предназначен для Linux и macOS. В опросе 2007 года, проведённом desktoplinux.com среди 38 500 пользователей Linux, 31,5% респондентов сообщили об использовании Wine для запуска приложений Windows. Это было больше, чем суммарная доля всех программ виртуализации x86, и больше, чем 27,9% тех, кто сообщил, что не запускает приложения Windows.
История
Боб Амштадт, первоначальный руководитель проекта, и Эрик Янгдейл начали проект Wine в 1993 году как способ запуска приложений Windows на Linux. Он был вдохновлён двумя продуктами Sun Microsystems: Wabi для операционной системы Solaris и Public Windows Initiative, представлявшей собой попытку полностью реализовать Windows API в общественном достоянии в качестве стандарта ISO, но отклоненную из-за давления со стороны Microsoft в 1996 году. Изначально Wine был ориентирован на 16-битные приложения для Windows 3.x, но с 2010 года основное внимание уделяется 32-битным и 64-битным версиям, которые стали стандартом для новых операционных систем. Проект возник в ходе дискуссий в Usenet в группе comp.os.linux в июне 1993 года. Александр Джульяр возглавляет проект с 1994 года. Проект оказался трудоёмким и сложным для разработчиков, главным образом из-за неполной и неточной документации API Windows. В то время как Microsoft подробно документирует большинство функций Win32, некоторые области, такие как форматы файлов и протоколы, не имеют публично доступных или полных спецификаций от Microsoft, а Windows также включает в себя недокументированные функции низкого уровня, недокументированное поведение и скрытые ошибки, которые Wine должен точно воспроизводить, чтобы обеспечить корректную работу некоторых приложений. Следовательно, команда Wine провела реверс-инжиниринг многих вызовов функций и форматов файлов в таких областях, как thunking. Первоначально проект Wine распространялся под лицензией MIT, как и X Window System, но из-за опасений, что проприетарные версии Wine не будут передавать свои изменения обратно в основной проект, с марта 2002 года для лицензирования стала использоваться LGPL. Wine официально перешёл в стадию бета-тестирования с версией 0.9, выпущенной 25 октября 2005 года. Версия 1.0 была выпущена 17 июня 2008 года после 15 лет разработки. Версия 1.2 вышла 16 июля 2010 года, версия 1.4 – 7 марта 2012 года, версия 1.6 – 18 июля 2013 года, версия 1.8 – 19 декабря 2015 года и версия 9.0 – 16 января 2024 года. Разрабатываемые версии выпускаются примерно каждые две недели. Wine staging – это независимо поддерживаемый набор экспериментальных патчей, которые разработчики WineHQ пока не готовы включить в основной репозиторий Wine, но всё же считают полезными. Он в основном охватывает экспериментальные функции и исправления ошибок. С января 2017 года патчи из Wine staging начали активно включаться в основную ветку WineHQ, поскольку проект Wine compholio передал его Алистеру Лесли Хьюзу, ключевому разработчику WineHQ. С 2019 года WineHQ также предоставляет предварительно собранные версии Wine staging.
Корпоративная спонсорская поддержка
Основным корпоративным спонсором Wine является CodeWeavers, которая нанимает Джульярда и многих других разработчиков Wine для работы над Wine и CrossOver – поддерживаемой CodeWeavers версией Wine. CrossOver включает в себя некоторые специфические для приложений настройки, которые не считаются подходящими для основной версии, а также некоторые дополнительные проприетарные компоненты. В своё время участие Corel оказывало проекту помощь, главным образом за счёт найма Джульярда и других разработчиков для работы над ним. Corel проявляла интерес к портированию WordPerfect Office, своего офисного пакета, на Linux (особенно Corel Linux). Позже Corel отменила все проекты, связанные с Linux, после крупных инвестиций Microsoft в Corel, что привело к прекращению их работы над Wine. Среди других корпоративных спонсоров – Google, которая наняла CodeWeavers для исправления ошибок в Wine, чтобы Picasa могла быть портирована непосредственно на Linux с использованием того же исполняемого файла, что и в Windows. Google также финансировала улучшения поддержки Wine для Adobe Photoshop CS2. Wine регулярно участвует в программе Google Summer of Code. Valve сотрудничает с CodeWeavers в разработке Proton – слоя совместимости на основе Wine для запуска игр Microsoft Windows на операционных системах Linux. Proton включает в себя ряд патчей, которые не принимаются в основную ветку Wine по различным причинам, например, из-за специфичных для Linux реализаций функций Win32. Участие Valve в разработке Proton (и, как следствие, в улучшении игрового опыта на Linux) способствовало повышению совместимости Wine с играми для Windows.
Дизайн
Цель Wine — реализовать полностью или частично Windows API, необходимые для работы программ, которые пользователи Wine хотят запускать в Unix-подобной системе.
Основная архитектура
Интерфейс программирования Microsoft Windows состоит в основном из динамических библиотек (DLL). Они содержат огромное количество подпрограмм-обёрток для системных вызовов ядра, программы режима ядра NTOS (ntoskrnl.exe). Типичная программа Windows вызывает некоторые DLL Windows, которые, в свою очередь, вызывают библиотеки пользовательского режима gdi/user32, которые, в свою очередь, используют kernel32.dll (подсистема Win32), отвечающую за взаимодействие с ядром посредством системных вызовов. Слой системных вызовов считается закрытым для программистов Microsoft, поскольку документация недоступна публично, а все опубликованные интерфейсы полагаются на подсистемы, работающие поверх ядра. Помимо этого, существует ряд программных интерфейсов, реализованных в виде служб, работающих как отдельные процессы. Приложения взаимодействуют со службами пользовательского режима через RPC. Wine реализует двоичный интерфейс приложений Windows (ABI) полностью в пользовательском пространстве, а не как модуль ядра. Wine в основном повторяет иерархию, при этом службы, обычно предоставляемые ядром в Windows, предоставляются демоном, известным как wineserver, задача которого – реализация базовых функций Windows, а также интеграция с X Window System и преобразование сигналов в собственные исключения Windows. Хотя wineserver реализует некоторые аспекты ядра Windows, использование с ним нативных драйверов Windows невозможно из-за базовой архитектуры Wine.
Пользовательский интерфейс
Wine обычно запускается из командной строки: wine program.exe.
вино
Есть утилита winecfg, которая запускает графический пользовательский интерфейс с элементами управления для настройки основных параметров. Это утилита конфигурации графического интерфейса, поставляемая вместе с Wine. Winecfg облегчает настройку Wine, избавляя от необходимости непосредственного редактирования реестра, хотя при необходимости это можно сделать с помощью встроенного редактора реестра (аналогичного Windows regedit).
Приложения третьих лиц
Некоторые приложения требуют больше настройки, чем просто установка, чтобы работать должным образом, например, ручная настройка Wine для использования определенных DLL-файлов Windows. Проект Wine не включает такие обходные решения в свою кодовую базу, предпочитая сосредоточиться исключительно на улучшении реализации API Windows в Wine. Хотя такой подход направляет разработку Wine на долгосрочную совместимость, он затрудняет запуск приложений, требующих обходных решений. В результате было создано множество сторонних приложений, облегчающих использование тех, которые не работают «из коробки» в Wine. На вики-странице Wine поддерживается список актуальных и устаревших сторонних приложений. Winetricks — это скрипт для установки основных компонентов (обычно DLL-файлов и шрифтов Microsoft) и настройки параметров, необходимых для правильной работы некоторых приложений под Wine. Он может полностью автоматизировать установку ряда приложений и игр, включая применение необходимых обходных решений. Winetricks имеет графический интерфейс. Проект Wine принимает сообщения об ошибках от пользователей Winetricks, в отличие от большинства сторонних приложений. Он поддерживается разработчиком Wine Остином Инглишем. Q4Wine — это графический интерфейс с открытым исходным кодом для расширенной настройки Wine. Wine Doors — это инструмент управления приложениями для рабочего стола GNOME, добавляющий функциональность в Wine. Wine Doors является альтернативой WineTools, которая стремится улучшить функции WineTools и расширить первоначальную идею с использованием более современного подхода к дизайну. IEs4Linux — это утилита для установки всех версий Internet Explorer, включая версии 4–6 и версию 7 (в бета-версии). Wineskin — это утилита для управления версиями Wine и создания оболочек для macOS. PlayOnLinux — это приложение, облегчающее установку приложений Windows (преимущественно игр). Существует также соответствующая версия для Macintosh под названием PlayOnMac. Lutris — это приложение с открытым исходным кодом для простой установки игр Windows на Linux. Bordeaux — это проприетарный менеджер конфигурации Wine GUI, запускающий приложения winelib. Он также поддерживает установку сторонних утилит, установку приложений и игр, а также возможность использования пользовательских конфигураций. В настоящее время Bordeaux работает на Linux, FreeBSD, PC BSD, Solaris, OpenSolaris, OpenIndiana и macOS. Bottles — это графический менеджер префиксов Wine и программ запуска для Wine, основанный на GTK4+Libadwaita. Он предоставляет систему установки зависимостей на основе репозитория и версионирование «бутылок» для восстановления предыдущего состояния. WineGUI — это бесплатный графический интерфейс с открытым исходным кодом для управления Wine. Он позволяет легко создавать «бутылки» Wine и устанавливать приложения или игры Windows.
Функциональность
Разработчики Direct3D-части Wine продолжают внедрять новые функции, такие как пиксельные шейдеры, для расширения поддержки игр. Wine также может использовать нативные DLL напрямую, что увеличивает функциональность, но в этом случае требуется лицензия Windows, если только эти DLL не распространялись вместе с приложением. Wine также включает в себя собственные реализации с открытым исходным кодом нескольких программ Windows, таких как Notepad, WordPad, Панель управления, Internet Explorer и Проводник. Wine Application Database (AppDB) — это онлайн-база данных, поддерживаемая сообществом, содержащая информацию о том, какие программы Windows работают с Wine и насколько хорошо они работают.
Совместимость с другими технологиями
Wine обеспечивает хорошую обратную совместимость с устаревшими приложениями Windows, включая те, что были написаны для Windows 3.1x. Wine способен имитировать различные версии Windows, необходимые для работы некоторых программ, вплоть до Windows 2.0. Однако поддержка Windows 1.x и Windows 2.x была удалена из версии Wine 1.3.12. Если DOSBox установлен в системе (см. ниже раздел о MS DOS), Wine версии 1.3.12 и более поздние, тем не менее, отображают опцию "Windows 2.0" для имитации версии Windows, но Wine всё равно не сможет запустить большинство программ для Windows 2.0, поскольку функции MS DOS и Windows в настоящее время не интегрированы. Обратная совместимость Wine, как правило, выше, чем у Windows, так как новые версии Windows могут вынуждать пользователей обновлять устаревшие приложения, а неподдерживаемое программное обеспечение может перестать работать навсегда из-за отсутствия адаптации к изменениям в операционной системе. Во многих случаях Wine может предложить лучшую поддержку устаревших приложений, чем более новые версии Windows с "режимом совместимости". Wine может запускать 16-битные программы Windows (Win16) на 64-битной операционной системе, использующей 64-битный процессор x86, что недоступно в 64-битных версиях Microsoft Windows. WineVDM позволяет 16-битным приложениям Windows работать на 64-битных версиях Windows. Wine частично поддерживает консольные приложения Windows, предоставляя пользователю возможность выбора бэкенда для управления консолью (варианты включают в себя необработанные потоки, curses и user32). При использовании бэкендов необработанных потоков или curses приложения Windows будут запускаться в терминале Unix.
64-битные приложения
Предварительная поддержка 64-битных приложений Windows была добавлена в Wine 1.1.10 в декабре 2008 года. По состоянию на 2019 год эта поддержка считается стабильной. Две версии Wine собираются отдельно, и в результате только сборка wine64 создает среду, способную запускать исключительно 64-битные приложения x86. Начиная с 2019 года, Wine обеспечивает стабильную поддержку сборки WoW64, позволяющую запускать как 32-битные, так и 64-битные приложения Windows в рамках одного экземпляра Wine. Для выполнения такой сборки необходимо сначала собрать 64-битную версию, а затем 32-битную версию, ссылающуюся на 64-битную. Подобно WoW64 от Microsoft, процесс сборки 32-битной версии добавит компоненты, необходимые для обработки 32-битных программ, в 64-битную сборку.
MS-DOS
Ранние версии Microsoft Windows работают поверх MS-DOS, и программы Windows могут требовать программ MS-DOS для своей работы. Wine не обладает хорошей поддержкой MS-DOS, но начиная с версии для разработчиков 1.3.12, Wine пытается запускать программы MS-DOS в DOSBox, если DOSBox установлен в системе. Однако, из-за ошибки, текущие версии Wine некорректно определяют программы Windows 1.x и Windows 2.x как программы MS-DOS, пытаясь запустить их в DOSBox (что не работает).
Винолиб
Wine предоставляет Winelib, который позволяет использовать реализации Windows API в виде разделяемых объектов как настоящие библиотеки для Unix-программы. Это даёт возможность создавать нативные исполняемые файлы Unix из кода Windows. С октября 2010 года Winelib также работает на платформе ARM.
Архитектуры, не использующие x86
Поддержка Solaris SPARC была прекращена в версии 1.5.26.
ARM, Windows CE и Windows RT
Wine обеспечивает некоторую поддержку процессоров ARM (а также ARM64/AArch64) и версий Windows, работающих на них. Начиная с 2019 года, Wine способен запускать ARM/Win32 приложения, предназначенные для разблокированных устройств Windows RT (но не программы, разработанные непосредственно для Windows RT). Поддержка Windows CE (как x86, так и ARM) отсутствует, однако существует неофициальная, пред-альфа версия, демонстрирующая концепцию под названием WineCE, обеспечивающая частичную поддержку.
Вино для Android
3 февраля 2013 года на выступлении на FOSDEM в Брюсселе Александр Джульяр продемонстрировал ранний прототип Wine, работающий под управлением операционной системы Google Android. Экспериментальные сборки WINE для Android (x86 и ARM) были опубликованы в конце 2017 года. С тех пор они регулярно обновляются официальными разработчиками.
Приложения Microsoft
Wine по умолчанию использует специализированные сборки Windows Gecko и Mono для замены Microsoft Internet Explorer и .NET Framework. В Wine встроены реализации JScript и VBScript. Установщики Microsoft для этих программ можно загрузить и запустить через Winetricks или вручную. Wine не отличается хорошей поддержкой большинства версий Internet Explorer (IE). Из всех относительно новых версий, только Internet Explorer 8 для Windows XP имеет приемлемый рейтинг на AppDB Wine "из коробки". Однако Google Chrome имеет золотой рейтинг (по состоянию на Wine 5.5 staging), а веб-браузер Edge, пришедший на смену IE, известен тем, что основан на этом браузере (после перехода с собственного движка рендеринга Microsoft). Winetricks предлагает автоматическую установку Internet Explorer версий 6–8, поэтому можно ожидать, что эти версии будут работать с использованием встроенных обходных решений. Альтернативным способом прямой установки Internet Explorer является использование устаревшего проекта IEs4Linux. Он несовместим с последними версиями Wine, а разработка IEs4Linux прекращена.
Другие версии Wine
Основная разработка Wine направлена на корректную реализацию всего Windows API и временами отставала в обеспечении совместимости с некоторыми приложениями. Например, Direct3D оставался нереализованным до 1998 года, хотя в более поздних версиях его реализация становилась все более полной.
Пересечение
CodeWeavers продвигает CrossOver специально для запуска Microsoft Office и других основных приложений Windows, включая некоторые игры. CodeWeavers нанимает Александра Джульяра для работы над Wine и вносит большую часть своего кода в проект Wine под лицензией LGPL. 10 января 2007 года CodeWeavers также выпустила новую версию под названием CrossOver Mac для компьютеров Apple Macintosh на базе Intel. В отличие от основной версии Wine, CrossOver способен работать на 64-битных версиях macOS, используя технологию, известную как "wine32on64". По состоянию на 2012 год, CrossOver включает в себя функциональность как CrossOver Games, так и CrossOver Pro, поэтому CrossOver Games и CrossOver Pro больше не доступны как отдельные продукты. CrossOver Games был оптимизирован для запуска видеоигр Windows. В отличие от CrossOver, он не был ориентирован на предоставление наиболее стабильной версии Wine, а вместо этого предлагал экспериментальные функции для поддержки новых игр.
Протон
21 августа 2018 года Valve представила новую версию Wine под названием Proton, разработанную для интеграции с Linux-версией программного обеспечения Steam компании (включая установки Steam, встроенные в их операционную систему SteamOS на основе Linux и компьютеры Steam Machine). Цель Proton – предоставить пользователям Steam на Linux возможность играть в игры, для которых отсутствует нативный Linux-порт (особенно в игры из старого каталога), и в конечном итоге, благодаря интеграции со Steam, а также улучшениям в поддержке игр по сравнению с основной веткой Wine, обеспечить пользователям "такой же простой принцип подключения и игры", как если бы они запускали игру на Linux изначально. В Proton реализованы DXVK, многопоточные улучшения производительности D9VK через esync, улучшена обработка полноэкранных игр и расширена аппаратная поддержка игровых контроллеров с автоматическим определением.
WINE@Etersoft (англ.) русск. (полностью)
Российская компания Etersoft разрабатывает собственную версию Wine с 2006 года. WINE@Etersoft поддерживает популярные российские приложения, такие как 1С:Предприятие от компании 1С.
Прекращено
Cedega / WineX: TransGaming Inc. (теперь Findev Inc. после продажи своих программных активов) разрабатывала проприетарное программное обеспечение Cedega. Ранее известная как WineX, Cedega представляла собой ответвление от последней версии Wine, распространяемой по лицензии MIT, в 2002 году. Подобно CrossOver Games, Cedega от TransGaming была ориентирована на запуск видеоигр для Windows. 7 января 2011 года TransGaming Inc. объявила о продолжении разработки технологии Cedega в рамках программы GameTree Developer Program. TransGaming Inc. разрешила участникам использовать свои идентификаторы и пароли Cedega до 28 февраля 2011 года. Cider: TransGaming также разработала Cider – библиотеку для Macintosh с архитектурой Apple–Intel. В отличие от продукта для конечного пользователя, Cider (как и Winelib) является оберткой, позволяющей разработчикам адаптировать свои игры для запуска на Intel Mac без внесения изменений в исходный код. Darwine: порт библиотек Wine в Darwin и Mac OS X для архитектур PowerPC и Intel x86 (32-бит), созданный командой OpenDarwin в 2004 году. Его версия для PowerPC использовала QEMU. Darwine была вновь включена в Wine в 2009 году. E/OS LX: проект, целью которого является запуск любой программы, разработанной для любой операционной системы, без необходимости установки другой операционной системы. Pipelight: специализированная версия Wine (wine compholio), выступающая в качестве обертки для плагинов Windows NPAPI в браузерах Linux. Этот инструмент позволяет пользователям Linux запускать Microsoft Silverlight – аналог Adobe Flash от Microsoft – и веб-плагин Unity, а также различные другие плагины NPAPI. Проект предоставляет обширный набор патчей для основного проекта Wine, некоторые из которых были одобрены и добавлены в него. Pipelight устарел, поскольку современные браузеры больше не поддерживают плагины NPAPI, а Microsoft прекратила поддержку Silverlight.
Прием
За эти годы проект Wine вызвал ряд технических и философских претензий и опасений.
Безопасность
Из-за способности Wine запускать исполняемый код Windows, возникли опасения, что вредоносные программы, разработанные для Windows, могут повлиять на Unix-подобные операционные системы, поскольку Wine способен запускать ограниченное вредоносное ПО, предназначенное для Windows. Анализ безопасности, проведенный в 2018 году, показал, что 5 из 30 образцов вредоносных программ успешно запустились через Wine, что является относительно низким показателем, однако всё же представляет угрозу безопасности. По этой причине разработчики Wine не рекомендуют запускать его от имени суперпользователя. Программное обеспечение для анализа вредоносных программ, такое как ZeroWine, запускает Wine на Linux в виртуальной машине, чтобы полностью изолировать вредоносное ПО от основной системы. Альтернативным способом повышения безопасности без снижения производительности, связанного с использованием виртуальной машины, является запуск Wine в контейнере LXC, как это делает программное обеспечение Anbox по умолчанию с Android. Еще одной проблемой безопасности является плохое проектирование реализованных спецификаций, которое может привести к уязвимостям. Поскольку Wine реализует эти спецификации, он также, вероятно, будет реализовывать любые содержащиеся в них уязвимости безопасности. Одним из примеров этой проблемы стала уязвимость Windows Metafile 2006 года, при которой Wine реализовал уязвимую функцию SETABORTPROC.
Майкрософт
До 2020 года Microsoft не делала никаких публичных заявлений о Wine. Однако онлайн-сервис Windows Update будет блокировать обновления приложений Microsoft, работающих в Wine. 16 февраля 2005 года Иван Лео Пуоти обнаружил, что Microsoft начала проверять реестр Windows на наличие ключа конфигурации Wine и блокировать обновления Windows для любого компонента. Как отметил Пуоти: "Это также первый случай, когда Microsoft признала существование Wine". В январе 2020 года Microsoft упомянула Wine как положительное следствие возможности повторной реализации API в своей позиции в качестве amicus curiae по делу Google LLC против Oracle America, Inc.