Сведения о документе

WINE: среда для запуска win-приложений на платформе Unix

Технология

Благодаря распространённости ОС Windows на сегодняшнем рынке очень многочисленны приложения, разработанные для этой платформы1. Однако зависимость коммерческого приложения от определённой платформы (ОС) может быть не всегда удобной или выгодной. На этот случай существуют средства, позволяющие программам, разработанным для ОС Windows, работать в другой операционной системе. Одним из наиболее развитых среди подобных средств является WINE.

WINE (Wine Is Not Emulator) не является эмулятором операционной системы: то есть он не создаёт изолированной среды для выполнения и не обеспечивает доступ к низкоуровневым системным ресурсам, таким как непосредственный доступ к оборудованию. Функция WINE состоит в том, чтобы, с одной стороны, предоставить win-приложению Win API — стандартный системный интерфейс операционных систем Windows, а с другой стороны, транслировать запросы win-приложения в соответствующие системные вызовы (Unix API). WINE работает на различных Unix-системах, в том числе на Linux. Таким образом, WINE — это своеобразная «прослойка» совместимости между win-приложениями и host-системой2.

Хотелось бы отметить, что процесс WINE всегда выполняется в непривилегированном режиме и не требует никакой модификации ядра операционной системы (в том числе динамически загружаемых модулей). Отсюда следует простой вывод относительно безопасности: любые проблемы, которые могут быть вызваны запуском win-приложений, будут ограничены правами доступа того пользователя, который запустил WINE. В результате win-приложения будут подчиняться политике доступа UNIX-системы и не смогут её нарушать.

У данного ограничения есть и другая практическая сторона: в WINE нет поддержки низкоуровневого обращения к оборудованию (драйверов оборудования, прямой работы с USB-устройствами). Всё периферийное оборудование следует подключать и настраивать в host-системе: для win-приложений эти устройства могут быть доступны стандартным способом через файловую систему или другие стандартные интерфейсы (например, TWAIN для сканеров, который реализован в WINE как обёртка над библиотекой SANE).

Наиболее распространённый способ применения WINE — запуск двоичных win-приложений в Unix-среде. Удобство заключается в том, что при этом не требуется никак изменять приложение — один и тот же вариант годится и для Windows, и для WINE.

Другое, на сегодняшний день пользующееся незаслуженно меньшей популярностью применение — с помощью WINE разработчики ПО могут компилировать свои win-приложения из исходных текстов непосредственно в двоичные исполняемые файлы для Unix. Опять-таки, это те же самые исходные тексты, из которых компилируются двоичные файлы для Windows.

Третий способ использования — WINE позволяет скомпилировать win-приложение из исходных текстов в исполняемый exe-файл, который будет работать на любой Windows-системе.

WINE состоит из нескольких компонент, которые условно можно поделить на три части:

libwine
Библиотека, предоставляющая Win API для win-приложений. По количеству предоставляемых функций её можно сравнить с Qt — столь широк спектр предлагаемых вызовов: от операций с файлами до построения графического интерфейса и обращения к базам данных.
wine
Среда для исполнения двоичных win-приложений, предоставляет программам окружение, неотличимое от Windows. Это окружение помимо Win API включает реестр, стандартные каталоги и файлы. Реестр является единственной изменяемой информацией, необходимой для работы WINE и win-приложений в нём.
утилиты
Утилиты, имитирующие некоторые стандартные win-приложения: текстовый редактор (блокнот), файловый браузер и т. п. Средства компиляции и отладки: имеются заголовочные файлы, которые описывают доступное API, компилятор winegcc, представляющий собой обёртку над gcc, отладчик winedbg и прочие вспомогательные утилиты.

Разработка

WINE — это свободный проект, который был начат в 1993 году. На тот момент распространённой платформой была Win16 (Windows 3.1), на неё и был ориентирован WINE, на сегодняшний день основным русло разработки — Win32. Исходные тексты WINE выпускаются под лицензией LGPL (Lesser GPL), никаких ограничений по доступу к исходным текстам и их модификации не имеется. WINE снабжён достаточно вразумительной документацией, имеется ряд списков рассылки (англоязычных), как для пользователей, так и для разработчиков, где оперативно решаются любые вопросы.

Процесс разработки WINE во многом похож на метод, применяемый при разработке ядра Linux. Все присылаемые (в специальную рассылку) патчи подвергаются рассмотрению разработчиков, которые могут высказывать свои соображения и добавления. Имеется один человек, Александр Джулиард, который принимает решение о том, включать ли патч в CVS, и при необходимости совершает в нём какие-то улучшающие изменения (например, исправляет ошибки в оформлении кода). Ведётся контроль и учёт всех отправляемых патчей и их авторства. Прежде чем патч будет принят, он проходит автоматическое тестирование — WINE компилируется с новым патчем, и выполняется регресс-тестирование: запускается тестовый код, написанный практически для каждого API, с помощью которого можно удостовериться, что добавление патча не нарушает совместимость.

Реализация

Успешность и корректность работы win-приложений в WINE естественно определяется тем, насколько среда WINE неотличима от Windows с точки зрения win-приложения. Иначе говоря, вопрос в том, насколько полно Win API и другие стандартные компоненты и процедуры Windows реализованы в WINE. Текущая оценка полноты реализации конкретных функций публикуется на сайте разработчиков WINE. В WINE реализованы функции практически всех динамических библиотек (DLL), входящих в Windows: начиная от 16-разрядных и заканчивая появляющейся поддержкой 64-битного режима. На хорошем уровне находится поддержка OLE, MSI и DirectX.

Если говорить об общей оценке полноты реализации, то на сегодняшний день разработчики называют цифру 90%. Однако относиться к этой цифре нужно не совсем так, как к обычному процентному соотношению. Дело в том, что с точки зрения успешной разработки WINE Win API должно быть таким, каким его хотят видеть программы. Полных и безошибочных спецификаций Win API в публичном доступе нет (и никогда не было), и это во многом определило характер разработки на платформе Win. Большинство разработчиков win-приложений используют только незначительную часть стандартных функций API, а остальные необходимые функции реализуют самостоятельно и поставляют вместе с программой. В последние годы подмножество широко используемых функций API в широкой массе win-приложений уже стабилизировалось и практически не меняется. Для WINE это означает, что цифра 90% означает стабильную работу большинства win-приложений в WINE даже больше, чем в 90% случаев.

По этой же причине не так существенна опасность отставания от изменений, вносимых в Win API в рамках операционной системы Windows. Единственная особенность — развивающаяся поддержка 64bit, при разработке архитектуры WINE принималась в расчёт возможность расширения в этом направлении. Поэтому как только функции Win64 API получат более широкое распространение, добавление их поддержки в WINE не заставит себя долго ждать.

Настройка локального win-окружения

Прежде чем начинать работать с WINE, каждому пользователю, от имени которого будут запускаться win-приложения, необходимо настроить локальное win-окружение. Настройка окружения выполняется автоматически при первом запуске WINE (достаточно ввести команду wine в командной строке и дождаться завершения её работы).

При первом запуске WINE создаёт необходимую инфраструктуру в домашнем каталоге данного пользователя, для чего выполняет следующие действия:

По умолчанию логические диски WINE будут расположены следующим образом:


C:		$HOME/wine_c
D:		$HOME/Documents
E:		/media/cdrom или /mnt/cdrom

Пример 1. Размещение логических дисков WINE по умолчанию

Если какого-то из нужных каталогов не окажется, то соответствующие ссылки просто не будут созданы. Как минимум один диск — C: будет создан в любом случае. Остальные диски необязательны, даже одного C: будет достаточно для работы в WINE. Правила создания ссылок по умолчанию описаны в файле /etc/wine/map_devices.sh, при необходимости их можно изменить. Изменения в этом файле затронут всех пользователей, которые будут затем выполнять первый запуск WINE.

Каждый пользователь может вручную изменить соответствия логических дисков WINE каталогам host-системы или создать любое количество дополнительных дисков. Все логические диски для WINE представлены обыкновенными символьными ссылками на каталоги в каталоге $HOME/.wine/dosdevices:


[tester@tacit tester]$ ls -l $HOME/.wine/dosdevices 
total 0
lrwxrwxrwx 1 tester tester 13 Nov 25 14:50 a: -> /media/floppy
lrwxrwxrwx 1 tester tester  8 Nov 25 14:50 a:: -> /dev/fd0
lrwxrwxrwx 1 tester tester 26 Nov 25 14:50 c: -> /home/tester/.wine/drive_c
lrwxrwxrwx 1 tester tester 10 Nov 25 14:50 com1 -> /dev/ttyS0
lrwxrwxrwx 1 tester tester 22 Nov 25 14:50 d: -> /home/tester/Documents
lrwxrwxrwx 1 tester tester 12 Nov 25 14:50 e: -> /media/cdrom
lrwxrwxrwx 1 tester tester 10 Nov 25 14:50 e:: -> /dev/cdrom

Пример 2. Логические диски и устройства WINE

Чтобы создать новый логический диск или изменить имеющийся, достаточно создать новую символьную ссылку с нужным именем.


[tester@tacit tester]$ ln -s /var/data/1c ~/.wine/dosdevices/f:
[tester@tacit tester]$ ls -l ~/.wine/dosdevices 
total 0
lrwxrwxrwx 1 tester tester 13 Nov 25 14:50 a: -> /media/floppy
lrwxrwxrwx 1 tester tester  8 Nov 25 14:50 a:: -> /dev/fd0
lrwxrwxrwx 1 tester tester 26 Nov 25 14:50 c: -> /home/tester/.wine/drive_c
lrwxrwxrwx 1 tester tester 10 Nov 25 14:50 com1 -> /dev/ttyS0
lrwxrwxrwx 1 tester tester 22 Nov 25 14:50 d: -> /home/tester/Documents
lrwxrwxrwx 1 tester tester 12 Nov 25 14:50 e: -> /media/cdrom
lrwxrwxrwx 1 tester tester 10 Nov 25 14:50 e:: -> /dev/cdrom
lrwxrwxrwx 1 tester tester 12 Nov 25 14:54 f: -> /var/data/1c

Пример 3. Создание логического диска wine


Создавая логические диски WINE, нужно принимать в расчёт, что права доступа win-приложений к файлам на этих дисках будут определяться правами доступа данного пользователя к реальным файлам host-системы.

Запуск win-приложений

Общее правило для запуска всех win-приложений в WINE — запускаемые файлы должны находиться в области видимости WINE, то есть на одном из логических дисков WINE или в его подкаталогах. Если программа поставляется на компакт-диске, то не забудьте должным образом смонтировать диск3, прежде чем обращаться к нему из WINE. Обратите внимание, что в этом случае у вас должен быть разрешён запуск приложений с компакт-диска. Если приложение распространяется не на диске — не забудьте сначала скопировать его в область видимости WINE.

Для запуска win-приложений проще всего воспользоваться файловым браузером winefile: его можно запустить из командной строки. Здесь достаточно перейти в необходимый каталог и запустить программу двойным щелчком мыши.

Можно запускать win-приложения как обыкновенные исполняемые файлы host-системы (например, из Midnight Commander или из командной строки), для этого должна быть запущена системная служба (service) wine.

Установка и удаление win-приложений

Как и в Windows, перед использованием большую часть приложений сначала потребуется установить. Установка производится обычным для Windows способом — с помощью поставляемой вместе с win-приложением программы установки. Разница в том, что в случае WINE программа будет установлена в локальном win-окружении пользователя.

Для установки win-приложения следует любым удобным способом запустить программу установки (чаще всего setup.exe). Дальше можно действовать по инструкции, предлагаемой поставщиком win-приложения.

Многие win-приложения запрашивают перезагрузку для завершения установки. Естественно, перезагружать host-систему при этом не следует. В локальном win-окружении процедуре загрузки Windows соответствует команда wineboot — её можно вызвать из любой командной строки. Если в этот момент в WINE выполняются другие приложения, то рекомендуется их завершать до перезагрузки.

Для удаления win-приложения, установленного в win-окружении, следует воспользоваться утилитой uninstaller. Эта утилита выводит список установленных в win-окружении приложений (если они зарегистрированы в реестре). Чтобы удалить приложение, выберите его из списка и нажмите кнопку «Uninstall». Если приложения, которое вы хотите удалить, нет в списке, то достаточно просто удалить каталог с приложением (можно воспользоваться для этого программой winefile, а можно — стандартными средствами host-системы).

Безопасность

Советы по соблюдению должного уровня безопасности в WINE могут быть сведены к двум простым соображениям:

Поэтому следует максимально ограничить область видимости WINE, включив туда только те данные, доступ к которым необходим win-приложениям для работы. Можно сформулировать и несколько более конкретных рекомендаций:

Шрифты

Системе WINE доступны те же шрифты, что и другим приложениям в host-системе4. Соответственно, к этим шрифтам получают доступ и win-приложения.

Сделать определённые шрифты доступными win-приложению можно несколькими способами:

Существует базовый набор шрифтов (Corefonts) для систем Windows — многие приложения рассчитывают на наличие в системе шрифтов со стандартными именами из данного набора. Для корректной работы таких приложений, возможно, потребуется установить этот набор шрифтов. Его можно скачать с сайта http://corefonts.sourceforge.net.

Дополнительная информация

Наиболее подробную документацию о WINE для пользователей и разработчиков можно найти на сайте разработчиков WINE. К сожалению, на сегодняшний день эта документация доступна только на английском языке.

На официальном сайте проекта WINE доступна самая свежая информация по WINE, сведения о разработке, включая дальнейшие планы, списки рассылки, исходные тексты WINE, списки работающих win-приложений, поддерживаемых функций WinAPI и множество другой информации. Из русскоязычных ресурсов можно обратиться к проекту «Русский WINE», который позиционируется как ресурс, объединяющий русскоязычных пользователей WINE. Здесь большое внимание уделяется проблемам локализации WINE и запуска специфических приложений, актуальных для русскоязычных пользователей. Многие пользователи могут найти для себя полезным русскоязычный форум, посвящённый WINE.


1Здесь и далее мы будем называть такие приложения win-приложениями.

2ОС Unix/Linux, в которой установлен и выполняется WINE.

3Нужно делать это вручную, или монтирование выполняется автоматически — зависит от вашего дистрибутива и стиля работы.

4Для получения списка доступных шрифтов WINE использует пакет fontconfig, а для отрисовки символов — библиотеку freetype2.

Сведения о документе