ARWINSS Новая подсистема Windows для ReactOS / Windows

Alexey Bragin, “ARWINSS The new Windows subsystem for ReactOS / Windows”, public translation into Russian from English More about this translation.

Translate into another language.

ARWINSS

Новая подсистема Windows для ReactOS / Windows

Оглавление

• Обзор существующей подсистемы Win32

- История

- Преимущества

- Недостатки и проблемы

• Представляем "Подсистему Win32 версии 2.0"

- Почему новая версия?

- Начало

- Как это было сделано

• Объяснение архитектуры

- Краткий обзор

- Большое изображение

- Отсутствие необходимости в X Windows (X-cервер)

- Роль Wine

• Arwinss и ReactOS

- Почему это так важно?

- Выгода

- Разделение работы

• Будущее Arwinss

- Поддержка композитного оконного менеджера

• Дополнительная информация

• Скриншоты

Подсистема Win32. История.

• Появилась 20-го мая 1999 (win32k), была опубликована Rex, раннюю работу над ней выполняли Эмануэле Алиберти (Emanuele Aliberti), Эрика Коля (Eric Kohl), Дэвида Велча (David Welch), Джейсона Филби (Jason Filby), Каспера Хорнструпа (Casper Hornstrup). В действительности ничего не отображалось на экране, были только самые основы win32k.

• Они проделали большую работу с 1999-го по 2001-й. Были добавлены DC (контексты устройств), оконные станции, рабочие столы, поддержка мыши и т.д.

• GvG присоединился 15-го февраля 2003 и начал работу над поддержкой видеодрайверов VMWare в win32k вместе с Ричардом Кэмпбэлом (Richard Campbell), который работал над оконной подсистемой и прорисовкой, через "хаки" пытаясь заставить их работать.

История подсистемы Win32 (продолжение)

• Гуннар (Gunnar) написал реализацию таймера, используя большое количество кода, написанного GvG и Ричардом Кэмпбэлом (Richard Campbell) в 2003 году.

• Джеймс Табор (James Tabor) присоединился 7-ого июля 2003, разрабатывая NtUserQueryWindow, почти одновременно с Ройсом Митчеллом. (Дэвид Велч (David Welch) продолжал отправлять коммиты!)

• Томас Вейденмюллер (Thomas Weidenmueller) присоединился к развитию win32k с усовершенствованиями меню 1-го августа 2003.

• Алексей присоединился к win32k 25-ого августа 2003 с доработками NtGdiRealizePaletteQ.

История подсистемы Win32 (еще более скучное продолжение)

• Также в 2003 году, Филип Навара (Filip Navara) написал существенное количество кода вместе с Марком Темпелом (Mark Tempel), с редкими добавлениями кода Арта Йеркеса (Art Yerkes), Эндрю Гринвуда (Andrew Greenwood), Грегора Анича (Gregor Anich), Майка Норделла (Mike Nordell) и других разработчиков.

• Магнус Олсен (Magnus Olsen) присоединился к развитию win32k 16-го марта 2005 года с поддержкой режима ядра в DirectX и хаками там, где это было необходимо.

• Современная история: Кристоф фон Виттич (Christoph von Wittich), Алекс Ионеску (Alex lonescu), Брэндон Тёрнер (Brandon Turner), Херве Поссино (Herve Poussineau), Савелий Третьяков, Тимо Крейцер (Timo Kreuzer) (его первый коммит фактически относился к win32k! 08.01.2007, rev.25352), Гед Мёрфи (Ged Murphy), Дмитрий Горбачёв, Грегор Шнайдер (Gregor Schneider), Штефан Гинсберг (Stefan Ginsberg) и другие.

Существующая подсистема Win32. Преимущества.

• Более 30 человек работают над ней в течение более 10 лет.

• Цель - реализация архитектуры подсистемы Win32, аналогичной архитектуре Windows XP

• Алекс, и, позже, Тимо, предпринимали большие усилия для обеспечения совместимости системных вызовов Win32 ReactOS с системными вызовами Win32 Windows.

• Поддерживаются настоящие драйверы видео (VMWare, некоторые видеокарты)

Существующая подсистема Win32. Проблемы.

• Более 30 человек работают над ней свыше 10 лет. Потрачено достаточно времени и трудовых ресурсов, но удовлетворительный результат по прежнему отсутствует. Почему? Win32 с дизайном Windows - огромный монстр, разработка которого потребует ещё в 10 раз больше ресурсов.

• Приложения, у которых нет проблем, связанных с win32, можно пересчитать по пальцам одной руки.

• Многочисленные важные ошибки (перемещение-мыши-для-загрузки-файлов, очередь сообщений и проблемы прорисовки шрифтов и т.д.) висят в bugzilla ГОДАМИ.

• Лишь несколько частей подсистемы Win32 ReactOS действительно соответствуют архитектуре подсистемы Win32 в Windows XP, остальные части несовместимы (их код специфичен для Wine или ReactOS).

Подсистема Win32 v2.0

• Любой хороший менеджер должен быть нацелен на будущее, а не настоящее.

• Отсюда следует решение - сделать полностью новую версию подсистемы Win32:

- Возможность выдвинуть вперед хорошие проектные решения

и отбросить неудачные

- Не нужно беспокоиться о поломке основной ветви разработки (в системе управления версиями)

- Должна в конечном счете быть существенно лучше, чем существующая подсистема

Подсистема Win32 v2.0 (продолжение)

• В истории ReactOS известны попытки сделать это. Все из них провалились. Процитирую Филипа Навара (Filip Navara) "Она [подсистема Win32 в ReactOS] должна быть полностью переписана".

• Чтобы достигнуть успеха при её переписывании, необходимо прорывное решение. И оно найдено.

Подсистема Win32 v2.0 (продолжение)

• Итог всех "Почему?", а также и "А почему новая, почему бы не улучшать существующую?"

- Почему бы не улучшать Linux вместо того, чтобы делать ReactOS? :)

- Текущая версия подсистемы Win32 - смесь старого кода Wine, ReactOS и небольшого количества хорошего нового кода.

- Дни и месяцы, проведенные в отслеживании кода Wine в подсистеме Win32 ReactOS и попытках синхронизировать его, тратятся впустую.

- ReactOS нуждается в полностью рабочей подсистеме win32 как можно скорее. Нельзя ждать еще 10 лет.

Подсистема Win32 v2.0 (продолжение)

• Как? Написание новой подсистемы win32 может потребовать годы работы?!

Переписать все с нуля - да, на это потребуются годы. Фактически, именно поэтому все предыдущие попытки заканчивались неудачей

- Но есть новое, радикальное решение: Повторно использовать код подсистемы Win32 из проекта Wine настолько, насколько это возможно.

Архитектура ARWINSS

• Реализует API библиотек USER32 и GDI32

• Основывается на исходном коде Wine

- Оконная подсистема и код GDI полностью изолированы от других частей Wine, образуя что-то вроде библиотеки

- Код сервера Windows также изолирован от остальной (большей) части ненужного кода Wineserver

Архитектура ARWINSS (продолжение)

• USER32.DLL и GDI32.DLL - это практически неизменный исходный код Wine

• WINENT.DRV - это специфичный для ReactOS user/gdi драйвер для быстрой отрисовки графики и операций работы с окнами

• WIN32K.SYS - низкоуровневая поддержка графики, пользовательская реализация сервера, минимальная поддержка Win32 для ядра

• WINEX11.DRV - дополнительный user/gdi драйвер, позволяющий использовать удаленный X-Сервер вместо локального дисплея

Архитектура ARWINSS, большое изображение

Отсутствие зависимости от X-Сервера

• Внимательный читатель непременно спросит: Wine привязан к X-Серверу, как же вы cможете обойти это ограничение?

• Простой ответ: а мы и не будем.

• Сложный ответ: Wine имеет специальный уровень абстракции, который называется user/gdi драйвер, который абстрагирует взаимодействие с X-сервером через отдельную библиотеку. ARWINSS имеет свой собственный быстрый user/gdi драйвер.

Роль Wine

• ARWINSS берёт всё лучшее от Wine:

- "Дешевая" синхронизация работы, сделанной сотнями разработчиков в каждой новой версии (для объединения и тестирования необходимо ~30 минут)

- Будут поддерживаться как минимум 13495 приложений из appdb.winehq.org (базы данных по совместимости приложений проекта Wine), добавьте к этому те приложения, которые Wine в принципе не способен выполнять из-за особенностей своей архитектуры (аппаратная защита, драйверы, и так далее)

- Хороший исходный код, регулярно тестируемый на наличие регрессий

Роль Wine (продолжение)

•... и отбрасывает худшее:

- Ужасная эмуляция ядра NT

- Неправильные цепочки вызовов в kernel32/ntdll

- ntoskrnl.exe, представляющая собой просто еще одну службу

- Очень медленное взаимодействие с Wineserver'ом

- Сам Wineserver - как кошмарный сон.

- Зависимости UNIX

- ...

ARWINSS и ReactOS

• Почему это так важно?

- Чёткая стратегия развития (всегда можно выполнить тестирование в Wine, сравнивая отладочные протоколы, что дает возможность легко обнаружить, что и где идет не так, как следовало бы)

Pages: ← previous Ctrl next
1 2

Original (English): ARWINSS The new Windows subsystem for ReactOS / Windows

Translation: © evilslon, unxed, shorewall, Keloraen .

translated.by crowd

Like this translation? Share it or bookmark!