LXF100-101:ReactOS

Материал из Linuxformat.

Перейти к: навигация, поиск

Содержание

Народно-освободительная реакция

Свободная операционная система – это не обязательно Unix. Спешите видеть – Андрей Боровский рассказывает о Microsoft Windows со страниц Linux Format!
Всем известна печальная склонность компании Microsoft ограничивать разработчикам доступ к информации о том, как работают их операционные системы. Самый характерный, на мой взгляд, пример такого рода - весьма оригинальный и очень полезный интерфейс MS-DOS Network Redirector, описанный в книге Undocumented DOS (Schulman et al., 1993). Сколько времени и усилий можно было бы сэкономить, если бы люди из Microsoft опубликовали документацию к этому интерфейсу сразу же после того, как он был добавлен в систему!
Sven B. Schreiber, “Undocumented Windows 2000, Secrets Cookbook”
Вы спрашиваете – возможно ли создать новую Unix-систему за какие-то несколько месяцев, при том, что у вас под рукой нет исходных тестов? Да, это возможно, поскольку для всех важнейших интерфейсов опубликованы общедоступные стандарты.
Erik Raymond, “Samizdat: Stinks on Ice”

В жизни всегда найдется место не только подвигу, но и иронии. Компания Microsoft создала, возможно, самую успешную в мире модель коммерческой разработки ПО и вытеснила коммерческих конкурентов из всех сфер бизнеса, за которые принималась всерьез. Но именно тогда, когда редмондская компания праздновала окончательную победу над OS/2 и Lotus 1-2-3, на сцене появился новый игрок, который пришел из совершенно другой, незнакомой коммерческим гигантам среды. Вскоре новому явлению было придумано и имя – Open Source. С первых дней триумфального шествия движения за свободное ПО в нем выделилось направление, нацеленное на разработку открытых аналогов популярных коммерческих программ, так что нет ничего удивительного в том, что в конце концов на свет появился открытый проект, призванный клонировать самую успешную коммерческую программу всех времен и народов – операционную систему Microsoft Windows.

Собственно говоря, бесплатные аналоги операционных систем Microsoft создавались еще во времена MS DOS. В 1996 году несколько программистов образовали группу под названием FreeWin95. Название проекта раскрывало его цель – создание бесплатного клона стремительно набиравшей популярность 32-битной операционной системы Windows 95. Как это часто случается с амбициозными проектами, группа FreeWin95 распалась, так и не произведя на свет ничего работоспособного. В 1998 году началась разработка нового открытого подобия ОС от Microsoft. На этот раз за основу для подражания была взята не Windows 95, а Windows NT. Сами участники проекта рассматривали свое детище как ответную реакцию на растущий монополизм Microsoft и назвали новую операционную систему соответственно: ReactOS. Между ReactOS и другими проектами-имитаторами операционных систем Microsoft существует одно важное, хотя пока что и не очень заметное, различие: разработчики ReactOS не стремятся клонировать Microsoft Windows. Задача ReactOS – создание открытой системы, совместимой с Windows на уровне приложений и драйверов. В остальном же, говорят разработчики, ReactOS будет развиваться совершенно самостоятельно. Тут, правда, стоит отметить, что поддержка совместимости на уровне драйверов, в том числе устанавливаемых драйверов файловых систем (IFS) требует довольно точного воспроизведения внутренней структуры ядра Windows (которое разработчики ReactOS прилежно изучают).

Хотя сами программисты из команды ReactOS утверждают, что их система является открытым аналогом Windows, так же как Linux является открытым аналогом Unix, между ReactOS и Linux существуют принципиальные различия. На сегодняшний день Unix – это скорее набор спецификаций, нежели операционная система. Спецификации Unix открыты и каждая реализация ОС стремится соответствовать им по мере сил. В случае с Windows эталоном реализации является конкретная операционная система, притом закрытая. В некоторой степени спецификацией Windows можно считать описание API, которое содержится в SDK и DDK, но это описание, во-первых, неполно, а, во-вторых, не всегда соответствует тому, как на самом деле работает система. Поскольку разработчики ReactOS стремятся добиться совместимости с уже существующим закрытым кодом, в случае разногласий между документацией и поведением системы, им приходится придерживаться последнего.

Различия в подходах к доступности исходных текстов системы оказывают на работу программистов даже большее влияние, чем может показаться на первый взгляд. Windows всегда была напичкана различными «секретными» функциями и недокументированными возможностями. Приобщившийся к «тайному знанию» Microsoft (благодарясобственной сообразительности или благоволению компании), получал преимущество над конкурентами. Охота за секретами Windows превратилась в увлекательное занятие и породила весьма обширный класс литературы (см. например, процитированную выше книгу Свена Шрейбера).

Впрочем, разработчики Linux не избежали тех сложностей, с которыми столкнулись их коллеги из мира Windows. Как бы хороша и всеобъемлюща ни была открытая ОС, проблема эмуляции удачливого коммерческого конкурента возникла давно и до сих пор не сходит с повестки дня. Не удивительно, что именно проект WINE (http://www.winehq.org) стал точкой соприкосновения разработчиков Linux и ReactOS. Значительная часть кода WINE может использоваться в ReactOS (и наоборот), и некоторые программисты из группы ReactOS одновременно работают и над WINE.

Знакомство

Операционная система ReactOS (последняя версия – 0.3.3) доступна для скачивания на сайте проекта (http://www.reactos.org) и на LXFDVD. На сайте ReactOS красуется картинка с ReactOS CD в фирменной упаковке, но если вы и в правду захотите иметь такой диск, вам придется сделать его самостоятельно. ReactOS доступен в виде образа установочного CD, образа «живого» CD, позволяющего загрузить систему без установки на компьютер или в виде предустановленных пакетов для эмуляторов QEMU и VMWare (для знакомства с ReactOS я выбрал последний вариант). Можно, разумеется, собрать систему самому из исходных текстов, причем это совсем не сложно.

Рис. 1Так стартует ReactOS.

Скорость загрузки ОС соответствует ее размерам (то есть, значительно превышает скорость загрузки Windows). В процессе загрузки на экране появляется эмблема ReactOS (Рис. 1), затем перед нами предстает рабочий стол, выполненный в классическом стиле Windows 95/NT. На кнопке Пуск вместо эмблемы Microsoft изображена, естественно, эмблема ReactOS. В самом начале работы в глаза бросился неприятный штрих – операционная система предложила установить драйвер какого-то устройства, которое она сама не смогла опознать. Откуда в предустановленной виртуальной среде появилось неизвестное устройство, я не понял, но должен отметить, что окно мастера установки драйверов очень похоже на аналогичное окно Windows. Простим разработчикам мелкие огрехи графического интерфейса вроде меню, которые не всегда вовремя исчезают с поверхности рабочего стола, – все это проблемы роста, которые, я уверен, будут устранены когда разработчики совладают с «начинкой» системы. Структура меню кнопки «Пуск», естественно, напоминает структуру аналогичного меню Windows, хотя и в упрощенном варианте. В меню есть разделы Programs, My Documents и Settings. В разделе игр находим стандартные для Windows «Сапер» и «Солитер». Если ReactOS все еще не подходит для высокопроизводительного офисного труда, то самые популярные убийцы рабочего времени уже на месте (Рис. 2).

Рис. 2Наши любимые программы.

Говорить о производительности и стабильности системы в сравнении с Windows или Linux, разумеется, еще слишком рано. Пока что о зрелости разработки ReactOS можно судить по количеству поддерживаемых программ. Firefox (Рис. 3) работает в ReactOS почти без проблем (я, правда, устанавливал его без расширений и Google Toolbar), впрочем, судя по всему, разработчики ReactOS «затачивали» свою систему под этот браузер. Opera устанавливается и запускается, но загружать web-страницы, увы, не может. Архиватор WinRAR не только установился в системе, но и отлично справлялся со своими обязанностями (следует правда, отметить некоторые огрехи отображения графического интерфейса, имевшие место как в WinRAR, так и в неработоспособной Opera).

Рис. 3Устанавливаем FireFox.

Список приложений, с которыми дружит ReactOS, конечно, не исчерпывается приведенным выше. На сайте проекта можно найти экранные снимки, демонстрирующие запуск OpenOffice.org (хотя, поскольку речь идет об эмуляции Windows, демонстрация Microsoft Office выглядела бы внушительнее), Macromedia Flash Player, Nero Burning Rome и даже Unreal Tournament (первой версии). Для работы с локальными файлами в ReactOS есть ReactOS Explorer и WineFile. Есть в системе и свой собственный web-браузер, который пока что бесконечно далек от IE. Любопытно отметить наличие в ReactOS четырех рабочих столов, кнопки переключения между которыми расположены на панели задач. Тот, кто подумает, что разработчики ReactOS украли идею нескольких рабочих столов у Linux, ошибется. В Windows эта концепция реализована уже давно, только средства переключения между рабочими столами по умолчанию не установлены.

Майк Сондерс в обзоре Syllable ([[LXF78:Syllable: просто и со вкусом|LXF78) как-то отметил быстроту загрузки системы. ReactOS тоже загружается очень быстро, но, учитывая небольшое число реализованных системных компонентов, радоваться этому преждевременно (то же самое относится и к Syllable). Что меня удивило, так это быстрота установки программ из дистрибутивов. По субъективным ощущениям, программы-инсталляторы выполняют свою работу в ReactOS гораздо быстрее, чем в Windows. Вероятно, этот факт объясняется небольшими размерами реестра React OS (не пора ли Microsoft всерьез пересмотреть политику единого реестра)?

Еще один забавный момент, замеченный при работе с ReactOS – система иногда «засыпает» (что заметно по прекращению обновления анимированных элементов и сетевой активности) но может быть пробуждена при помощи перемещения мыши. Вероятно, аппаратные прерывания, посылаемые мышью, активизируют механизм переключения процессов.

Очевидно, что разработчики ReactOS уделяют сейчас большее внимание реализации внутренних компонентов системы. Что касается пользовательского интерфейса, то он станет действительно похож на интерфейс Windows только тогда, когда команда ReactOS реализует свой аналог Internet Explorer: со времен Windows 98 ядро и вспомогательные компоненты браузера Microsoft играют в построении интерфейса пользователя большую роль, чем может показаться на первый взгляд.

Рис. 4Любителям разделяемых ресурсов придется подождать новой версии.

Как вы уже поняли, ReactOS свободно чувствует себя в Интернете, а вот работать в локальной сети по протоколам Microsoft не умеет (Рис. 4). Это выглядит довольно странно, если учесть, что у разработчиков открытого ПО есть неплохой опыт в реализации этих протоколов. Отсутствует в ReactOS и поддержка NTFS.

Закончим, однако, перечень недостатков, иначе у читателя может сложиться обманчивое впечатление относительно масштабов работы, проделанной командой ReactOS. Как это часто бывает в программировании, самые сложные и интересные вещи спрятаны у системы «под капотом». Такие вещи, как уровень аппаратной абстракции (HAL), системные службы, службы безопасности и собственные базовые драй- веры не бросаются в глаза, но разрабатывать их необходимо, а людей, которые могут это делать (да еще в свободное от основной работы время), не так уж и много.

Если в мире Linux на вопрос, «какой компилятор использовать», возможен только один ответ, с ReactOS все обстоит сложнее. По вполне понятным причинам разработчики ReactOS используют в качестве базовой платформы Windows (хотя сейчас разрабатывается и среда для сборки ReactOS из-под Linux). Разработчики ReactOS приложили определенные усилия к тому, чтобы в работе над этим открытым проектом можно было использовать открытые (или бесплатные) средства разработки. Благодаря этим усилиям вы можете программировать ReactOS, используя MS Visual C++ 2005 Express, Code::Blocks, Borland C++Builder, Dev-C++.

Уровни документированности Windows API

Клонирование Windows может быть увлекательным делом, в своем роде. Иногда анализ работы системы превращается в детективное расследование. Разумеется, всем программистам приходится искать ошибки в своих (а иногда, и чужих) программах. Эта работа тоже требует некоторых навыков из арсенала Шерлока Холмса. Однако в случае с проприетарными системами детективная аналогия становится еще более очевидной, поскольку программист, изучающий такую систему, часто вынужден искать то, что было вполне сознательно спрятано от его глаз коллегами «с той стороны баррикад». Свен Шрейбер делит интерфейсы программирования Windows на четыре категории, согласно степени документированности:

  1. Официально документированные. Описание этих API можно найти в SDK, DDK и MSDN.
  2. Полудокументированные. Вы не найдете описания этих API в официальной литературе Microsoft, но входящие в них функции и типы данных можно встретить в общедоступных заголовочных файлах и примерах программ из тех же SDK и DDK.
  3. Недокументированные, но не скрытые. Упоминание этих функций и типов данных не встречается ни в литературе Microsoft, ни в доступных исходных текстах, но их можно «выудить» из различных компонентов системы с помощью специальных инструментов (например, отладчика Kernel Debugger).
  4. Полностью скрытые. Эти API и компоненты так хорошо запрятаны, что обнаружить их можно только с помощью обратной инженерии и инъекции кода. Как правило, скрытые API связаны с очень специфичными механизмами работы Windows, знание которых вряд ли понадобится разработчику эмуляторов наподобие WINE, но может пригодиться тем, кто клонирует ОС Windows (и, конечно, всевозможным злоумышленникам).

Слово разработчикам ReactOS

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


LXF: Расскажите о себе. Как и почему вы пришли в проект ReactOS?

АБ: Я закончил «Бауманку» по специальности «разработка ПО». Занимался разнообразными проектами, от самых банальных web-приложений до исследований в области обработки видео- и изображений (имеется даже патентная заявка, в США). До ReactOS серьезно увлекался машинной графикой (трехмерные движки, разработка игр – в том числе, на коммерческой основе, в качестве ведущего разработчика). Идея организовать проект по реализации NT-совместимой ОС у меня была довольно давно, и в какой-то момент, когда появилось время, я решил посмотреть, существуют ли уже подобные открытые проекты, и если нет – начать свой. К счастью, их нашлось не много: FreeWin95, ReactOS, FreeDOS, и еще какие-то. Я посмотрел FreeWin95 – он был уже давно заброшен, посмотрел FreeDOS – он не соответствовал моему замыслу, хотя был идейно близок, и наконец я решил взглянуть на проект с непонятным названием ReactOS. После ознакомления с web- сайтом сомнения отпали – это именно то, что я искал. Естественно, я начал по мере возможности участвовать в разработке.

LXF: Как правильнее было бы определить ReactOS: как подобие MS Windows или как Windows-совместимую ОС, в которой совместимость с Windows – лишь одна из полезных функций, и которая будет расширять возможности Windows, так что со временем в ней появится функциональность, недоступная пользователям ОС от Microsoft?

АБ: Вся идея и смысл проекта состоит в том, что имея открытую реализацию, любой человек может внести в проект что-то свое, новое. Эта идея движет большинством наших контрибьюторов, ведь одно дело – копировать имеющееся, а совсем другое – сделать это имеющееся лучше. Единственное условие: вся новая функциональность не должна мешать совместимости. Но пока, на данном этапе, главное – достигнуть стабильной работы в основополагающих частях, и не увлекаться различными оптимизациями, улучшениями и тому подобным.

LXF: Представим себе то время, когда ReactOS достигнет уровня стабильного продукта. Каковы будут важнейшие преимущества ReactOS перед Windows (помимо стоимости дистрибутива) с точки зрения пользователей и программистов?

АБ: Часть ответа уже была в предыдущем вопросе. Важнейшее преимущество – это не цена, а именно открытость, которая позволит реализовать то, чего не хватает в обычном Windows, и то, что там так мешает. Достаточно почитать любой форум, там есть сотни различных мыслей о том, как сделать Windows лучше. С точки зрения программиста, преимущество есть уже сейчас: вместо чтения не всегда правильной документации MSDN, он может просто посмотреть в исходный код и найти интересующую его функцию, особенности ее реализации. Специально для этого мы стараемся как можно больше комментировать код, предлагать различные тестовые случаи, и т.п.

LXF: Насколько полной должна быть совместимость ReactOS и Windows? Ставится ли задача обеспечить поддержку недокументированных возможностей Windows API?

АБ: Настолько полной, насколько это возможно, и это относится к тем недокументированным особенностям, на которые так любят полагаться некоторые разработчики ПО и драйверов.

LXF: Как я понимаю, в целях корректной поддержки драйверов Windows команде ReactOS приходится воспроизводить не только API, но и структуру компонентов ядра. Приходится ли вам дизассемблировать модули Windows для того, чтобы понять, как они работают, и воспроизвести их функциональность?

АБ: Мы стараемся максимально избегать дизассемблирования. Есть прекрасные программы, которые позволяют отслеживать вызовы API, собирать текстовую информацию из файлов, есть openrce.org, который предлагает уже готовые цепочки вызовов, которые тоже помогают понять ход алгоритма.

LXF: Microsoft очень ревниво относится к разработкам, которые кажутся им чем-то похожими на их собственные продукты, а в данном случае мы имеем дело с проектом, который сознательно копирует Windows. Как складываются отношения между Microsoft и ReactOS, и как, по-вашему, они могут развиваться в будущем?

АБ: Microsoft ревниво относится к тем разработкам, которые снижают уровень дохода корпорации. На сегодняшний день ReactOS – полностью некоммерческий, образовательный проект, и отчасти мы даже способствуем росту приложений и драйверов с открытыми исходными текстами под ОС Windows. С некоторыми разработчиками из команды Microsoft у нас довольно хорошие отношения, и из нашей команды сама Microsoft уже наняла больше трех человек. К сожалению, это означает, что они не могут работать над ReactOS (из-за правовых тонкостей, даже если в Microsoft они работают над совершенно другими вещами).

LXF: Большие компании умеют обращать себе на пользу даже неблагоприятные обстоятельства. Хотя ReactOS могла бы в перспективе подорвать монополию Windows, не кажется ли вам, что на практике этот проект в некотором смысле укрепляет позиции Microsoft, популяризирует разработку для Windows в сообществе Open Source? Может быть, это и не плохо?

АБ: Сам по себе ReactOS как проект не имеет враждебных намерений по отношению к Microsoft (и уж тем более – к Linux и другим операционным системам). Отдельные разработчики, конечно, имеют свои собственные взгляды, которые не совпадают с официальной позицией.

Что же касается популяризации Open Source-разработки под Windows – это очень хорошо. Открытое ПО должно развиваться как можно шире, захватывать новые области.

LXF: Чему, по Вашему мнению, разработчики Linux могли бы поучиться у ReactOS и Windows?

АБ: У ReactOS есть несколько особенностей, которые, на мой взгляд, могли бы быть использованы в других подобных проектах. Во-первых, это унификация и упрощение системы для сборки (ReactOS Build Environment, или сокращенно RosBE). Любой человек может скачать последнюю версию RosBE и исходные тексты проекта, развернуть и набрать “make bootcd”. Больше никаких действий – через некоторое время создастся ISO-образ установочного диска ReactOS, собранный полностью из исходников. RosBE существует как для Windows, так и для Linux (в тестовом варианте). Во-вторых, простая установка. Она состоит из трех стадий (разделяемых необходимыми перезагрузками), настройка на конкретное аппаратное обеспечение происходит автоматически, без необходимости ручного конфигурирования. Это также позволяет проводить тестирование более быстро, и даже создавать автоматические системы регресс-тестирования.

LXF: Открытые проекты почти всегда испытывают нехватку «рабочих рук». Кого сейчас больше всего не хватает команде ReactOS?

АБ: Больше всего не хватает, конечно же, разработчиков – их, наверное, всегда не хватает. Но мы всегда рады любому другому варианту помощи проекту, каким бы он ни был.

LXF: Что может дать молодому, талантливому программисту участие в таком проекте, как ReactOS?

АБ: Знания, опыт, имя. У нас даже в последнее время появилась такая шутка: «Хочешь работать в Microsoft или Apple? Присоединяйся к ReactOS, и никаких проблем при приеме на работу!»

LXF: Каковы ваши личные впечатления от участия в проекте ReactOS, оказал ли проект какое-либо влияние на вас?

АБ: ReactOS – очень интересный проект. Он дал (и продолжает давать) уникальный опыт, который вряд ли можно получить в другом месте. Даже не в плане программирования (хотя и тут хватает интересных вещей) – это опыт управления крупным специфическим проектом, где вся работа полностью некоммерческая и открыта на условиях лицензии GPL. Эта тема настолько мало раскрыта, что у меня и моих коллег возникает желание написать об этом статью, с названием примерно «Проекты Open Source: особенности управления», чтобы как-то описать полученные знания и наблюдения. Хотя, думаю, случится это не скоро.

Послесловие

Откровенно говоря, я не верю в то, что ReactOS когда-нибудь заменит Windows или Linux на моем компьютере. И дело тут не только в том, что команде ReactOS предстоит еще очень много сделать прежде, чем система станет применимой практически (а ведь другие ОС не будут в это время стоять на месте). Нынешнее благожелательное равнодушие Microsoft по отношению к открытому аналогу Windows объясняется, безусловно, только тем, что ReactOS, ни сейчас, ни в обозримой перспективе, не может стать конкурентом «пожирателя десктопов». Если же когда-нибудь дело дойдет до реальной конкуренции, Microsoft просто обречена на победу. Очевидно, что юридически судьба проекта, клонирующего Windows API, находится в руках разработчика Windows. Сколько технологий, запатентованных Microsoft, вольно или невольно используется в ReactOS? Думаю, что никто этого точно не знает, но при случае редмондская компания найдет, к чему придраться.

Может ли проект ReactOS принести пользу разработчикам Linux? Безусловно, может. От развития ReactOS прежде всего должны выиграть такие проекты, как WINE и Samba. Разработчики ReactOS изучали Windows глубже и, скорее всего, разбираются в устройстве этой ОС лучше, чем другие программисты сообщества Open Source.

В последнее время многие говорят о том, что для завоевания рынка рабочих столов открытым операционным системам потребуется более высокий уровень совместимости с самой популярной коммерческой ОС, чем тот, который предоставляет сегодняшний Linux. Идея открытой операционной системы, максимально совместимой с лучшими коммерческими разработками, весьма привлекательна и, на мой взгляд, перспективна. Хотя такой системой будет, скорее всего, не ReactOS. И, может быть, даже не Linux. LXF

Личные инструменты
  • Купить электронную версию
  • Подписаться на бумажную версию