WINE как свободная реализация WinAPI: настоящее и будущее
Текст забран для документации и изменению не подлежит.
Отражение доклада на конференции в Обнинске.
Вступление
На сегодня WINE – это единственный способ использовать Windows-программы на рабочих местах без оплачивания лицензий. Другим активно используемым вариантом принести Windows-программу в Linux-систему является подключение по протоколу RDP к Windows, работающему в терминальном режиме.
Что такое WINE
Что такое WINE? Как известно, это не эмулятор, а скорее просто прослойка совместимости между Windows-приложениями и хост-системой (далее рассматривается Linux, но вообще WINE тестируется на различных Unix-системах, в том числе и проприетарных). WINE – свободный проект, выпускаемый под лицензией LGPL.
WINE состоит из нескольких компонент, которые условно можно поделить на три части:
libwine
Библиотека, предоставляющая для Unix-приложений API
Win 32. По количеству предоставляемых функций её можно сравнить с qt – столь широк спектр предлагаемых вызовов – от операций с файлами до построения GUI и обращения к БД.
Если имеется исходный код, программу, написанную для
Win API, можно пересобрать под Linux. Центром libwine является NT-подобная система, работающая со строками только в Unicode, с обвязкой для 8-мибитовых функций.
wine
Среда для исполнения двоичных Windows-программ, предоставляет программам окружение, неотличимое от Windows. Полная имитация, включая реестр, стандартные каталоги и файлы. Части ФС, которые будут дисками в WINE, указываются символическими ссылками в опред. каталоге (dosdevices). Реестр является единственной изменяемой информацией, необходимой для работы WINE и программ в нём.
wine-devel
Средства компиляции и отладки. Имеются заголовочные файлы, которые описывают доступное API, компилятор winegcc, являющийся обёрткой над gcc, отладчик winedbg и прочие вспомогательные утилиты.
Что реализовано
WINE имеет реализацию функций практически всех функций динамических библиотек (DLL), входящий в Windows: начиная от 16-разрядных, заканчивая появляющейся поддержкой 64-битного режима.
Хотелось бы отметить, что WINE всегда выполняется в непривилегированном режиме и не имеет модулей ядра. Проблемы, которые могут быть вызваны запуском Windows-программ, будут носить локальный характер.
Пример реализации одной функции:
нарисовать
user program
Create File
ntdll
Nt Create File
wine_server
open_fd
glibc
open
системный вызов ядро
Чего нет и не будет
Нет поддержки драйверов оборудования (поскольку нет и не может быть доступа к оборудованию в пользовательском режиме), нет поддержки USB. Вся периферия должна подключаться к host-системе, например сканер, будучи настроенным в стандартной для Linux системе поддержки сканеров SANE, будет доступен и в WINE через TWAIN-интерфейс, являющийся обёрткой над SANE.
Процесс разработки Wine
Процесс разработки WINE во многом похож на метод, применяемый при разработке ядра Linux. Все присылаемые (в специальную рассылку) патчи подвергаются рассмотрению разработчиков, которые могут высказывать свои соображения и добавления. Имеется один человек, Александр Джулиард, который принимает решение о том, включать ли патч в CVS, и при необходимости совершает в нём какие-то улучшающие изменения (например, исправляет ошибки в оформлении кода). Ведётся контроль и учёт всех отправляемых патчей и их авторства. Перед тем, как принять патч, он проходит автоматическое тестирование – WINE пересобирается с новым патчем, и выполняется регресс-тестирование: запускается тестовый код, написанный практически для каждого API, с помощью которого можно удостовериться, что добавление патча не ухудшает совместимость.
Что сейчас работает
Перечислю приложения, специфически популярные:
– 1C (MS Visual C++)
– Инфо-Бухгалтер (Delphi)
– КОМПАС (компании Аскон), который планируется включить в грядущий дистрибутив ALT Linux 3.0 Compact, как пример упаковки Windows-приложения в RPM-пакет.
– Карта города
Top Plan (питерской фирмы)
–
Fine Reader
Сборка в RPM
Сборка в RPM-пакет для Windows-программы – это фактически помещение её в своеобразный chroot, доступа на запись к своим файлам программа (и запускаемая среда WINE) не имеет.
См.
Разработчику/RPM.
Что нового
- Отказались от конфигурационного файла. Теперь все настройки совершаются в реестре, специально для этого случая была улучшена программа настройки winecfg.
- Появился прямой доступ к корневой файловой системе хост-машины, но это отключается.
- Улучшена поддержка MSI (Microsoft Installer)
- Сильно развился Direct X (и мы надеемся, что поддержка Direct X вскоре будет совершенна)
Перспективы
- NT-семантика файловой системы (взаимодействие с Samba), что должно правильным образом решить такую важную проблему, как блокировки и режимы разделения файлов (сейчас это решено надстройкой над POSIX-блокировками ).
- Общее с mono. Существует проект по использованию mono в Windows: Mono Windows Integration
- Компанией Code Weavers объявлена программа по увеличению числа устанавливающихся и работающих программ
Резюме
- WINE позволяет использовать бинарные программы, написанные для Windows, без изменений. Программы для удобства могут быть упакованы в RPM-пакет.
- С помощью WINE разработчики ПО могут собирать свой код для Linux-систем.
- Более 80% Win 32 API уже реализовано, причём достаточно корректно, и имеет регресс-тесты. Степень готовности есть на сайте.
- Существует проект Wine X (теперь называется Cedega), распространяемый под несвободной лицензией (нельзя публиковать бинарные коды). Разработчики WINE считают что в своё время был нарушен социальный контракт, код Wine был взят для коммерческого проекта, и отдачи не было, поэтому лицензия на Wine была поменяна на LGPL в начале 2002 года, точнее можно посмотреть в Changelog. Cedega достаточно успешно реализует поддержку Direct X, благодаря чему в нём работают многие современные игры.
- Ещё один интересный проект – React OS. Разработчики поставили перед собой цель создать свободную NT-подобную систему. Система уже имеется и работает. Сетевую поддержку планируется делать вместе с проектом SAMBA, многие функции API (DLL) взяты из проекта WINE. Оригинальный пример свободной Windows-системы – для тех, кто не любит Unix :)
25.07.2005, Виталий Липатов, Обнинск
Ссылок на эту страницу нет