ARWINSS — различия между версиями
Fog (обсуждение | вклад) (→Подробное описание:) |
Fog (обсуждение | вклад) (→Критика существующей Win32-подсистемы ReactOS) |
||
Строка 14: | Строка 14: | ||
== Подробное описание: == | == Подробное описание: == | ||
− | == Критика существующей Win32-подсистемы ReactOS == | + | ==== Критика существующей Win32-подсистемы ReactOS ==== |
Основная Win32-подсистема в ReactOS берёт своё начало в 1999 году. Была проделана большая работа по созданию различных её частей, в работе принимали участие многие разработчики Wine. Совместима по системным вызовам win32k.sys, и только местами очень отдалённо напоминает архитектуру Win32-подсистемы Windows XP. Единственная хорошая часть – это графический код в win32k.sys, всё остальное – сочетание старого Wine и собственного кода. Над этой подсистемой работали более 30 человек, большая часть работы – это синхронизация старого кода с Wine’ом. Т.е. фактически пустая работа. Ещё один минус в том, что архитектура Win32-подсистемы в Windows по «красоте» очень далека от совершенства архитектуры ядра NT, и поэтому нет смысла полностью его копировать. | Основная Win32-подсистема в ReactOS берёт своё начало в 1999 году. Была проделана большая работа по созданию различных её частей, в работе принимали участие многие разработчики Wine. Совместима по системным вызовам win32k.sys, и только местами очень отдалённо напоминает архитектуру Win32-подсистемы Windows XP. Единственная хорошая часть – это графический код в win32k.sys, всё остальное – сочетание старого Wine и собственного кода. Над этой подсистемой работали более 30 человек, большая часть работы – это синхронизация старого кода с Wine’ом. Т.е. фактически пустая работа. Ещё один минус в том, что архитектура Win32-подсистемы в Windows по «красоте» очень далека от совершенства архитектуры ядра NT, и поэтому нет смысла полностью его копировать. | ||
Версия 18:58, 3 марта 2014
Содержание
[убрать]Что такое ARWINSS?
ARWINSS (Another Realization of WIN32 SubSystem) представляет собой альтернативную реализацию подсистемы win32, предназначенную для упрощенного переноса WINE на платформы, отличные от unix. Ключевое изменение - переработка архитектуры в сторону модульности. В первую очередь, речь идет о "подменяемости" графического вывода.
В настоящее время в Wine использует промежуточный "слой совместимости" с графической подсистемой конкретной платформы, на которой он работает. В linux/*nix этот слой представляет собой "драйвер" winex11.drv, перенаправляющий графический вывод Wine на X Windows System. В ARWINSS, удалось сделать замену этому "драйверу", под названием winent.drv, использующую графические возможности соответствующей ему части ядра ReactOS/Windows, и получив фактически работающие в ReactOS библиотеки user32 и gdi32 из Wine.
Так как код user32/gdi32 в Wine является протестированным и относительно надёжным, предполагается, что ARWINSS обеспечит большую совместимость с приложениями, чем нынешняя реализация win32 в ReactOS, содержащаяя "кашу" из разных версий Wine с вкраплениями собственного кода ReactOS той или иной степени актуальности. Кроме того, ARWINSS позволит обмениваться с проектом Wine гораздо большим количеством кода, а также использовать "дешевые" (не требующие значительного времени разработчиков) синхронизации с Wine библиотек user32 и gdi32.
Таким образом, ARWINSS должна (по крайней мере, теоретически) обеспечить работоспособность в ReactOS как минимум всех тех программ, которые работают в последних версиях Wine.
Подробное описание:
Критика существующей Win32-подсистемы ReactOS
Основная Win32-подсистема в ReactOS берёт своё начало в 1999 году. Была проделана большая работа по созданию различных её частей, в работе принимали участие многие разработчики Wine. Совместима по системным вызовам win32k.sys, и только местами очень отдалённо напоминает архитектуру Win32-подсистемы Windows XP. Единственная хорошая часть – это графический код в win32k.sys, всё остальное – сочетание старого Wine и собственного кода. Над этой подсистемой работали более 30 человек, большая часть работы – это синхронизация старого кода с Wine’ом. Т.е. фактически пустая работа. Ещё один минус в том, что архитектура Win32-подсистемы в Windows по «красоте» очень далека от совершенства архитектуры ядра NT, и поэтому нет смысла полностью его копировать.
Решение проблемы – Win32-подсистема, версия 2.0.
Возникло естественное желание – сделать лучше, свести затраты на обслуживание на минимум, использовать существующий код по-максимуму. Попытки сделать это предпринимались в ReactOS неоднократно, но все заканчивались полной неудачей. Кроме одной, под названием Arwinss. В её основу легло очень простое решение: Если Wine работает настолько хорошо, и если код Wine всё-равно используется сейчас (но приходится тратить кучу времени на то, чтобы найти куски этого кода, разобраться, синхронизировать этот код с новым Wine, найти то, что от него зависит и ломается, и всё это время потраченное зазря), то почему бы не сделать новую Win32-подсистему именно на основе Wine.
Описание Win32-подиситемы в Windows
Картинка с сайта Microsoft:
Описание с сайта Microsoft:
- Как мы видим, подсистема Win32 включает в себя Win32 API, в виде библиотек, таких как KERNEL32.DLL, GDI32.DLL, и USER32.DLL. Интересно отметить, что начиная с Windows NT 4.0, Microsoft переместила часть подсистемы Win32 из пользовательского режима в режим ядра. В частности, драйвер устройства режима ядра Win32k.sys управляет отображением окон, выводом на экран, ввод с клавиатуры и мышки, и передачей сообщений. Он также содержит библиотеку интерфейса графического устройства (GDI.DLL), что используется для отображения графических изображений и текста.