ROS and Wine
Содержание
ReactOS и Wine
В основном, из проекта Wine ReactOS берет реализацию библиотек пользовательского режима. Где-то разработчики Wine предоставляют свои патчи, где-то наоборот - разработчики ReactOS отправляют наработки в Wine. Тем не менее, из-за архитектурных различий, возникающих из-того, что Wine ориентирован на Linux, некоторые из DLL-библиотек не могут быть использованы в ReactOS без предварительных модификаций.
Например, 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 из-за ошибок и недоработок в ядре системы.