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
Доклады
О ReactOSARWINSSЧеЗа
Информация Новости Выпуски новостейПереводы блоговНовости проектаВидеоReactOS на ХабреUSB от Вадима Галянта
Разработка Руководство по программированиюОтсутствующая функциональностьВетви разработкиКомпоненты системыReactOS и WineПлан работRoadmap ядра by VgalРазработчикиСовместимость с dll WindowsНаиболее значимые изменения за годИспользуемые проектыGoogle Summer of CodeИзвестные проблемы
Порты AMD64ARMXboxPowerPC
Компоненты Файловые системыРежим совместимостиОтчеты об ошибкахПечатьUSBЯдро
Загрузчик Восстановление MBRЗагрузка из GRUBПараметры загрузки
Прочее ARWINSSПриложения в ReactOSОформление ReactOSКоординаторы"Пасхальные яйца"Монетизация
Другое Типы ядерFreeWin95
Помощь
RAM-диск ReactOS по PXEс жесткого диска
Разработка Стиль написания кодаСтандарты RC-файловРабота с документациейВенгерская нотацияGNU Indent • [ Subversion : ветвислияниеиспользование TortoiseSVN ] • Основы переводаОтправка патчей
Репорты Отладка в VirtualBoxОтладка на экранДобавление программы в менеджер приложенийОтправка отчетов
Отладка Com0comGDBKdbgRossym.gdbRoswin.gdbWinDBGРуководство по WinDBGВключение трассировки ядраКоды DPRINTУдалённый отладчик ReactOS
Сборка CMakeRBuildФайлы RBuildАвтоматическое копирование файловСборка MINGW-w64Сборка модулейСреда сборки
Тестирование VirtualBoxVMwareQEMUHyper-VНеобходимый объём дискаПеренос файлов на виртуальный дискУстановка ReactOSУстановка драйверов
Сеть Общие папкиSambaNFS
Игры Установка DirectPlay
Обновление ReactOSЗагрузочная флешкаЧем можно помочь проектуСоздание нового пользователяЗвук и сеть в VirtualBoxСъемка и публикация видеоIRC-каналСторонние компонентыFAQReactOS как рабочая станцияReactOS и UEFI
Обзоры ОболочкаNTVDMWOWCommunity EditionИстория сайтаReactOS ServerКриптографияПО времен XP