Эта страница посвящена непосредственному портированию Wine в DOS
Краткая справка
Wine - свободное кроссплатформенное программное обеспечение, позволяющее запускать DOS, Win16/32/64 приложения в Unix-подобных системах. Wine расшифровывается как "Wine is not emulator". Это означает, что Wine не является эмулятором аппаратного обеспечения, как, например, Bochs. Wine подменяет системные вызовы WinAPI их аналогами из Unix, что позволяет Windows приложениям выполняться в среде Unix без потери скорости, которая неизбежно происходит при эмуляции.
Раньше разработка WineDOS происходила примерно таким образом. Я определял наиболее важный набор функций, который собирался реализовать. Затем я смотрел в исходный код Wine или ReactOS, изменял его некоторым образом и вставлял в исходники WineDOS. После этого я запускал процесс компиляции (компилятор - Open Watcom). Как правило, возникали ошибки, которые предстояло исправить. Чаще всего это были ошибки вроде необъявленных типов, неизвестных функций. И не всегда эти ошибки возможно было исправить. Из-за этого часть функций не могла быть реализована, и их пришлось оставить заглушками.Зачем портировать Wine?
Wine базируется только на системных вызовах Unix. Это значит, что, если реализовать должным все необходимые системные вызовы Unix, Wine будет работать. Т.е. вместо кучи функций WinAPI можно написать сравнительно мало функций POSIX API.
Как портировать Wine?
Можно подумать, что сделать эмулятор POSIX окружения не легче, чем писать каждую функцию WinAPI по отдельности. Может быть, это действительно так. Однако за меня это уже сделали другие. Существует реализация большого подмножества POSIX API для систем DOS и OS/2. Эта программа называется EMX, Eberhard Mattes Extender. В 1998 году была выпущена версия 0.9d, которой я и пользуюсь. Для EMX существует X сервер - XFree86 версии 3.3.6. С его помощью на OS/2 было портировано множество программ из мира Unix. Входящая в комплект версия GCC 2.8.1 удовлетворяет системным требованиям ранних версий Wine. Поэтому я могу считать, что использовать EMX для запуска Wine под DOS вполне возможно.
Какие утилиты нужны и как всё это делать?Для (попытки) компиляции Wine под DOS вам понадобятся:
- EMX
- Gnu make 3.75
- Flex 2.5.4
- Bison 2.0
- X include files
- CWSDPMI
- Binutils
- Textutils, fileutils
- Wine source code
- длинные имена файлов
Полный комплект необходимых программ (в том числе исходный код альфа-версии Wine) можно скачать здесь.
Установка:
Распакуйте содержимое архива в любое место, например, C:\EMX. Добавьте директорию C:\EMX\BIN в переменную среды PATH.
Установите или отредактируйте следующие переменные:
Для предотвращения конфликта с одноимёнными утилитами Watcom C, Borland C++ утилита make.exe переименована в gmake.exe (Gnu Make).SET EMX=C:\EMX\BIN\emx.exeSET RSX=C:\EMX\BIN\rsx.exeSET HOME=C:\EMX\HOME\1set C_INCLUDE_PATH=C:\EMX\includeset LIBRARY_PATH=C:\EMX\lib
Собственно, компиляция ничем не отличается от таковой в Linux. Адаптированный скрипт configure уже был запущен, так что его запуск не нужен. Используйте gmake для начала компиляции. Предупреждение "emx 0.9d reqiured" можно проигнорировать - у нас и так 0.9d. Напоследок я хочу сделать несколько важных замечаний.
1) Не всегда gmake будет успешно завершать работу. В некоторых случаях возникает ошибка "Makefile: XXX: Ambigious implicit rules", где XXX - число. Иногда компиляция прекращается из-за ошибки, возникшей в результате отсутствия в EMX некоторых функций. Но реализовать их всё же легче, чем писать весь WinAPI с нуля.
2) Имейте в виду, что в DOS длина строки ограничена 128 символами. Иногда из-за этого будут возникать ошибки. Для их исправления я переименовал некоторые файлы (например, environment.c в env.c) и отредактировал Makefile. Но эти ошибки ещё не искоренены.
3) Заголовочные файлы X составляют весь доступный на данный момент кусок X сервера. Проблемам при линковке не удивляйтесь.
Текущие успехи таковы: примерно 60% кода компилируется, 30% линкуется.Заключение
Портирование Wine в DOS даст много преимуществ. Ведь даже ранние версии Wine могут запускать приличное число программ.
Для большей информации читайте файл /documentation/wine_os2.