ROS and Wine

Материал из Русский WINE
Перейти к: навигация, поиск

ReactOS и Wine

В основном, из проекта Wine ReactOS берет реализацию библиотек пользовательского режима. Где-то разработчики Wine предоставляют свои патчи, где-то наоборот - разработчики ReactOS отправляют наработки в Wine. Тем не менее, из-за архитектурных различий, возникающих из-того, что Wine ориентирован на Linux, некоторые из DLL-библиотек не могут быть использованы в ReactOS без предварительных модификаций.

Wine-ROS.png

Например, kernel32.dll и Gdi32.dll должны быть разделены, так как ReactOS перенаправляет их вызовы к своему NT-подобному ядру, а версии Wine к ядру Linux и X-серверу соответственно.

В ноябре 2009 были предприняты усилия для доведения архитектуры ReactOS ближе к Wine для того, чтобы больше их кода могло быть использовано без изменений. Это делается в рамках проекта ARWINSS.

Синхронизация с Wine

В ReactOS периодически проводятся синхронизации с кодовой базой Wine. Сейчас используется код Wine 2.16. Текущая версия Wine 2.*.

Wine и хаки

Для работы многих программ разработчики Wine используют хаки.

Непостоянные разделы в реестре

В конце ноября-декабре 2016 года при реализации поддержки Word 2010 Hermes Belusca выявил один из них.

Код реализации реестра Wine позволяет любому создавать прямые непостоянные подразделы (которые не хранятся в файле) в HKEY_USERS (это запрещено в реальной реализации NT, или в ReactOS, поскольку HKEY_USERS представляет собой виртуальный ключ реестра, в соответствии с которым загружаются ключи реального реестра). Как следствие, когда установщик Word 2010 пытается создать/открыть раздел под HKEY_USERS\S-1-5-20, который не существует, этот ключ создается на лету, позволяя инсталятору продолжить работу и в конечном итоге добиться успеха. Тем не менее, как только программа установки Word 2010 завершается (и выходит из Wine server), эти ключи реестра удаляются. Этот факт был подтвержден Sylvain Petreolle. Это может показаться приемлемым для Wine, но этот хак не приемлем для ReactOS: вместо этого будет реализован необходимый функционал.

Единая реализация GDI для серверных и настольных версий

29 августа 2021 года разработчик andrew.boyarshin обратил внимание на следующий хак:

"Похоже, разработчики Wine решили, что поддержка частичного дублирования кода между сервером и клиентом реализации GDI слишком сложна и дает им мало пользы, поскольку код GDI в Wine выполняется внутри процесса в пользовательском пространстве. Они объединяют обе реализации в один NtGdi, при этом «пользовательская» реализация отправляется в METADC или реализацию NtGdi, поэтому они отбрасывают оптимизацию клиента (например, сохранение многих свойств на стороне клиента). ReactOS же работает в режиме ядра, и новый подход Wine потребует множества дополнительных переходов между режимами при каждой синхронизации. Это также означает, что Wine отличается от Windows и вводит несовместимые команды GDI (например, NtGdiGetAndSetDCDword), что будет означать, что подсистема Win32 не может быть частично Франкенштейновской (только либо полностью Win2003, либо полностью Wine). Просто хочется указать на недостатки использования последней версии кода Wine."

ReactOS и ядро

Так же некоторые программы могут не работать в ReactOS из-за ошибок и недоработок в ядре системы.

ReactOS
Search.png
Доклады
О ReactOS • ARWINSS • ЧеЗа
Информация Новости Выпуски новостей • Переводы блогов • Новости проекта • Видео • ReactOS на Хабре • USB от Вадима Галянта
Разработка Руководство по программированию • Отсутствующая функциональность • Ветви разработки • Компоненты системы • ReactOS и Wine • План работ • Roadmap ядра by Vgal • Разработчики • Совместимость с dll Windows • Наиболее значимые изменения за год • Используемые проекты • Google Summer of Code • Известные проблемы
Порты AMD64 • ARM • Xbox • PowerPC
Компоненты Файловые системы • Режим совместимости • Отчеты об ошибках • Печать • USB • Ядро
Загрузчик Восстановление MBR • Загрузка из GRUB • Параметры загрузки
Прочее ARWINSS • Приложения в ReactOS • Оформление ReactOS • Координаторы • "Пасхальные яйца" • Монетизация
Другое Типы ядер • FreeWin95
Помощь
RAM-диск ReactOS по PXE • с жесткого диска
Разработка Стиль написания кода • Стандарты RC-файлов • Работа с документацией • Венгерская нотация • GNU Indent • [ Subversion : ветви • слияние • использование TortoiseSVN ] • Основы перевода • Отправка патчей
Репорты Отладка в VirtualBox • Отладка на экран • Добавление программы в менеджер приложений • Отправка отчетов
Отладка Com0com • GDB • Kdbg • Rossym.gdb • Roswin.gdb • WinDBG • Руководство по WinDBG • Включение трассировки ядра • Коды DPRINT • Удалённый отладчик ReactOS
Сборка CMake • RBuild • Файлы RBuild • Автоматическое копирование файлов • Сборка MINGW-w64 • Сборка модулей • Среда сборки
Тестирование VirtualBox • VMware • QEMU • Hyper-V • Необходимый объём диска • Перенос файлов на виртуальный диск • Установка ReactOS • Установка драйверов
Сеть Общие папки • Samba • NFS
Игры Установка DirectPlay
Обновление ReactOS • Загрузочная флешка • Чем можно помочь проекту • Создание нового пользователя • Звук и сеть в VirtualBox • Съемка и публикация видео • IRC-канал • Сторонние компоненты • FAQ • ReactOS как рабочая станция • ReactOS и UEFI
Обзоры Оболочка • NTVDM • WOW • Community Edition • История сайта • ReactOS Server • Криптография • ПО времен XP