Чуть больше об ReactOS

Дата: 21/08/05; 


Сегодня нам даёт интервью один из разработчиков ReactOS - Алексей Брагин. Для тех кто не знает, ReactOS это открытая попытка создания полноценного клона Windows NT, начавшаяся еще с давнишнего проекта FreeWin95.

Расскажите о себе
  Обо мне - в основном занимался и занимаюсь разработкой ПО в широком смысле этого слова, а не только конкретным программированием. Перед тем, как я открыл для себя реактос, я занимался в основном управлением разработкой небольших проектов, где моя часть в программировании была невелика, однако хотелось чего-то нового, сильного, к чему можно было бы действительно приложить мысль.
У меня давно была идея сделать хотя бы часть модулей ОС, которые были бы совместимы с ОС Windows (NT в то время), и наконец я решил конкретно начать действия. И начал я их с поиска того, что уже сделано - нашёл несколько проектов, в том числе FreeWin95, но разработка их уже невелась. И к удивлению для себя я нашёл очень активно развивающийся ReactOS - сразу стало понятно к чему можно приложить мысль и силы - многое в то время было мне непонятно, и до сих пор остаются части, которые хочется постичь, но нету времени :)

Какова ваша роль в проекте reactos?
   Я начал с написания небольших вспомогательных программок и конечно тестирования. Затем переключился на драйвера (сетевые), параллельно писал код в win32k, который касался работы с графикой (реализация stretchblt и всего что с ней связано), а также я начал работы по интернационализации реактоса - переводу вебсайта и самой ОС на другие языки. Довольно быстро сформировалась команда, готовая помогать и продвигать такую работу, и я возглавил её как координатор перевода (translation coordinator).
На сегодняшний день я продолжаю работу над проектом в этом статусе + как Kernel Developer веду работу над разными частями проекта + осуществляю реализацию стека USB.

Опишите сегодняшнюю функциональность reactos
   Путь реализации был долгим. Сначала неработало вообще ничего :) Потом, по мере добавление кода, стали появляться процессы и потоки, переключение между ними - воистину прогресс - особенно когда это абсолютно бесполезно с точки зрения человека, незнакомого с архитектурой ОС. Такое процесс разработки продолжался довольно долго, т.к. трудно было мотивировать людей делать то, что сможет работать только через пару лет. Но этот путь был преодолен! Начал работать загрузчик PE, были написаны заглушки для длл-ек, и первая простенькая Win32- программка успешно заработала!
Затем пошло уже веселее - появился аналог cmd.exe, он работал, запускалось все больше консольных программ, но основной упор был сделан на драйверы - это наиболее интересная и привлекательная часть - одни и теже драйвера работают как в Windows так и в ReactOS.
Потихоньку начал прогрессировать графический движек - Ge van Geldorp и Richard Campbell применяли все свои усилия чтобы вначале вывести простой прямоугольник, потом добавить полоску сверху, три квадратика справа - вот уже есть окошко.
Потом шаг за шагом - кнопка, список, радио кнопка, все просто, примитивно, однако работает.
Разработка шла быстро и эффективно, также проект WINE нестоял наместе, и в результате стало возможным, по чуть-чуть начинать запускать графические приложения под реактосом. Самым существенным стал запуск ReactOS Explorer'а - аналог Проводника в Windows. Когда его работа стала более-менее стабильной, решено было повысить номер версии до 0.2, и выпустить новый релиз - который загружался сразу в графический интерфейс! С этого момента к проекту появился реальный интерес, пришло много новых разработчиков, и прогресс пошёл ещё бОльшими темпами.
Шаг за шагом начали работать и серъёзные программы, и игры - Quake 1/2, UT, и другие - но чтобы сделать их работающими, была потрачена не одна неделя на поиск ошибок в реализации, затем их исправление, нахождение новых... Но в итоге они "запускаются и работают" (так говорилось в процессе инсталляции одной из версии 9x ОС Windows :) ).

Как вы оцениваете качество кода reatos?
  На самом деле есть несколько разных стадий развития: Вначале писали чтобы работало «хоть как-нибудь». Потом захотелось чтобы работало «получше». Сейчас хотим чтобы работало «нормально», т.к. довольно большая часть уже реализована.
Однако невсегда это получается путем исправления небольших участков кода, порой приходится переписывать довольно большие куски и целые модули. Например сейчас уже переписано более половины кода ядра, начата работа по переписыванию подсистемы win32k (что даст существенный выигрыш в скорости работы программ).

Какие архитектурные сходства и различия react os и windows?
  Различия есть, их довольно много. Большинство отличий конечно же хотелось бы ликвидировать – но всё таки есть исключения, есть разные варианты, которые работают лучше чем в MS Windows. Пример – так называемая технология GUI-On-Demand: загружаемся в командную строку, запускаем какое-либо приложение – если оно имеет графический интерфейс пользователя, то экран переключится в графический режим и будет выведено окно. После окончания работы с программой ОС переключится обратно в командную строку. Соответственно если программа работает вообще в консольном режиме, то и в графику переключаться небудет (удобно например с Midnight Commander или FAR’ом).

Много ли ошибок обнаруживается по ходу развития вашей системы?
  Да-а, на этот вопрос можно отвечать бесконечно. Проблема в том, что в режиме ядра ошибки отлавливать очень сложно. А особенно, если это связано с параллельным программированием. В процессе разработки была и есть куча ошибок, причём большинство из них – невнимательность кодера – проект всё-таки опенсорс, и уследить за каждой строчкой невозможно. А например одна * меняет суть дела кардинально. Я нашёл несколько однотипных багов, когда для определения размера структуры проделывалась операция sizeof(pStruct), где pStruct – это указатель(!) на структуру, поэтому результат всегда = 4, вместо sizeof(*pStruct) равной например 250. Отлавливать такую ошибку довольно сложно – она неприводит к моментальному краху системы, а проявляется потом, в совершенно неожиданном и несвязанном месте (драйвер юсб-контроллера, а проявление – в драйвере файловой системы).

С какой переидочнистью вы выпускаете новые версии?
  Политика релиза – примерно один релиз раз в два месяца. Однако случается и сдвиги – когда нужно что-то отладить, основную фичу релиза, то бессмысленно выпускать релиз в назначенную дату, если он неработает.

Поведуйте нам об основных личностях проекта
   Всего есть около 25 активных разработчиков, имеющих доступ на запись в SVN дерево проекта. Весь список можно посмотреть на сайте wiki.reactos.com в разделе People of ReactOS.
Трудно и сложно выделить каких-либо значимых людей, неущемив при этом других. Я думаю логично сказать о координаторе всего проекта – это г-н Джейсон Филби, он приложил очень большие усилия чтобы сдвинуть проект с мертвой точки, и немаловажно, что он сам участвовал в разработке, а не только советовал что и как лучше сделать. Ещё можно отметить Стивена Эдвардса, с которым я лично знаком, он работает в проекте WINE, и является главой фонда ReactOS – помимо того, что он очень хорошо обеспечивает интеграцию между WINE и ReactOS, разрабатывает разные полезные программы и модули, он ездит на многие выставки и представляет там проект, демонстрирует работу ОС на своём оборудовании, отвечает на вопросы и т.д. Такую работу сложно недооценить.

А как к вам относится микрософт?
   Сейчас несколько рано говорить об отношении к нам фирмы Microsoft, т.к. ReactOS непредставляет пока что серьёзной конкуренции ОС Windows. И на текущий момент никаких официальных контактов с нами со стороны Microsoft небыло.
Однако могу сказать, что мы стараемся ненарушать ни одного патента, и весь код, имеющийся у нас, имеет своё происхождение, которое можно при необходимости объяснить, начиная с 1 ой ревизии.

Планируется ли совместимость с Longhorn?
   Конечно планируется! Уже собираем информацию о всех нововведениях, сделанных в Longhorn/Vista, так же и поддержка .NET конечно же будет. Поэтому-то нас непугает то, что с выходом Vista ReactOS потеряет свою актуальность. Скорее наоборот.

В reactos будут какие-ниубдь свои новые технологии?
   Главная задача – совместимость. Но ничто незапрещает создавать новые API. Пример – реализации подсистемы POSIX, OS/2 или же вообще Java.

Вас не посещала идея комерционализироваться?
   Коммерциализация? Тонкий вопрос. Есть много полезных областей, где можно применить реактос, и в каждом случае нужно думать индивидуально. Сейчас мы только принимаем donations, которые могут быть либо «просто так», либо направленные на реализацию чего-либо конкретного.

Чем ветка reactos 0.3 будет отличаться от предыдущих?
   В релизе 0.3.0 будет просто куча всего – этим объясняется и повышение средней цифры версии с 2 до 3. Только в качестве примера – надежно работающая сеть, поддержка USB устройств, поддержка Microsoft Office, и конечно же – багфиксы (прогресс можно наблюдать в www.reactos.com/bugzilla).

Какая примерная план-стратегия развития проекта до первого релиза?
   План – это развить систему до такого уровня (версия 1.0), когда её реально можно будет применять, и она будет поддерживать большинство приложений и драйверов. Но как видно, эта формулировка очень обтекаемая, и точно сказать очень сложно. Наверное пользователи сами ощутят когда ОС будет приближаться к версии 1.0, это точно будет заметно.
Несмотря на всё это у нас есть Road Map на сайте wiki.reactos.com, там много всего интересного написано, советую посмотреть.

Reactos где нибудь нашла практическое применение?
   Практическое применения? Да – демонстрация на выставке LinuxWorld, LinuxTag и тому подобных :). Там вполне можно поиграться в квейк, или поправить текст листовки в соответствии с вопросами посетителей.

Как организована трудовая деятельность? Какими способами решаются спорные вопросы?
  Спорных вопросов бывает много. Разрешаются как правило в совместном общении на канале #reactos или #ros-dev в сети FreeNode. Задания недаёт никто, любой человек сам выбирает то, что ему интересно – это наиболее корректный способ, и он приводит к лучшему результату. Единственное чего надо избегать – это повторения, т.е. когда несколько человек работают над одним и тем же. Против такого есть опять-таки ReactOS Wiki, где каждый девелопер может написать о своей работе, и также #reactos – там проходят основные дискуссии.

Что нащёт драйверов?
  Мы стремимся к полной поддержки драйверов, совместимых с Windows 2000/XP. Сейчас уже работают драйвера некоторых сетевых карт, NTFS.SYS (в рамках проекта Captive), драйвера видео карт, SCSI-контроллеров. На очереди – стек USB, HID, и дальнейшее расширение списка поддерживаемых драйверов.