ARWINSS — различия между версиями

Материал из Русский WINE
Перейти к: навигация, поиск
(Описание Win32-подиситемы в Windows)
(Описание Win32-подиситемы в Windows)
Строка 26: Строка 26:
  
 
Как все работает в Windows NT. Приведу очень упрощенную картину. Есть ядро и компания. Есть файл win32k.sys который грубо говоря находится в ядре и отвечает за обмен информацией между видеокартой(как видно из описания выше не только видеокартой, но упростим для понимания) через драйвер той же видеокарты с пользовательским режимом. Для чего это нужно? Чтоб информация полученая win32k.sys от видеокарты была через загрузчик библиотек ntdll.dll передана в режим пользователя, где она будет принята подсистемой Win32. Тоесть информация от видеокарты в конечном итоге надходит к библиотекам (читать файлам) GDI32.DLL, и USER32.DLL, которые отвечают за прорисовку окон и их составляющих а также вывод графических изображений и текста.
 
Как все работает в Windows NT. Приведу очень упрощенную картину. Есть ядро и компания. Есть файл win32k.sys который грубо говоря находится в ядре и отвечает за обмен информацией между видеокартой(как видно из описания выше не только видеокартой, но упростим для понимания) через драйвер той же видеокарты с пользовательским режимом. Для чего это нужно? Чтоб информация полученая win32k.sys от видеокарты была через загрузчик библиотек ntdll.dll передана в режим пользователя, где она будет принята подсистемой Win32. Тоесть информация от видеокарты в конечном итоге надходит к библиотекам (читать файлам) GDI32.DLL, и USER32.DLL, которые отвечают за прорисовку окон и их составляющих а также вывод графических изображений и текста.
 +
 +
 +
 +
==== Текущее состояние ====
 +
Подсистема работоспособна, но есть ряд ошибок, которые специфичны именно для Arwinss. Т.е. их нет в Wine, их нет в ReactOS, но есть в Arwinss. Подсистема основана на уже достаточно старом релизе Wine.

Версия 20:30, 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

Winarc.gif
Картинка и описание с сайта Microsoft:
Как мы видим, подсистема Win32 включает в себя Win32 API, в виде библиотек, таких как KERNEL32.DLL, GDI32.DLL, и USER32.DLL. Интересно отметить, что начиная с Windows NT 4.0, Microsoft переместила часть подсистемы Win32 из пользовательского режима в режим ядра. В частности, драйвер устройства режима ядра Win32k.sys управляет отображением окон, выводом на экран, ввод с клавиатуры и мышки, и передачей сообщений. Он также содержит библиотеку интерфейса графического устройства (GDI.DLL), что используется для отображения графических изображений и текста.


Как все работает в Windows NT. Приведу очень упрощенную картину. Есть ядро и компания. Есть файл win32k.sys который грубо говоря находится в ядре и отвечает за обмен информацией между видеокартой(как видно из описания выше не только видеокартой, но упростим для понимания) через драйвер той же видеокарты с пользовательским режимом. Для чего это нужно? Чтоб информация полученая win32k.sys от видеокарты была через загрузчик библиотек ntdll.dll передана в режим пользователя, где она будет принята подсистемой Win32. Тоесть информация от видеокарты в конечном итоге надходит к библиотекам (читать файлам) GDI32.DLL, и USER32.DLL, которые отвечают за прорисовку окон и их составляющих а также вывод графических изображений и текста.


Текущее состояние

Подсистема работоспособна, но есть ряд ошибок, которые специфичны именно для Arwinss. Т.е. их нет в Wine, их нет в ReactOS, но есть в Arwinss. Подсистема основана на уже достаточно старом релизе Wine.