Введение

ReactOS — это бесплатная операционная система с открытым исходным кодом для персональных компьютеров amd64/i686, предназначенная для обеспечения двоичной совместимости с компьютерными программами и драйверами устройств, разработанными для Windows Server 2003 и более поздних версий Microsoft Windows. ReactOS рассматривается как потенциальная замена Windows с открытым исходным кодом.

ReactOS написана преимущественно на языке C, при этом некоторые элементы, такие как проводник ReactOS, реализованы на C++. Проект частично реализует функциональность API Windows и был портирован на архитектуру процессоров AMD64. При создании проекта было выбрано новое название — ReactOS. Разработка проекта началась в феврале 1998 года с создания основы для нового ядра NT и базовых драйверов. Название ReactOS возникло в ходе IRC-чата. Термин "OS" обозначал операционную систему, а "react" отражал недовольство группы и реакцию на монопольное положение Microsoft. В 2002 году в Москве был основан Фонд ReactOS, исполнительными директорами которого стали Максим Осовский и Алексей Брагин, а в совет директоров вошли Владимир Брагин, Савелий Третьяков и Алексей Иванов. В 2015 году фонд был ликвидирован.

Внутренний аудит

Чтобы избежать судебного преследования за нарушение авторских прав, ReactOS должна была быть полностью отличной и не производной от Windows, что требовало очень кропотливой работы. 17 января 2006 года разработчик Хартмут Бирр заявил в рассылке разработчиков ReactOS (ros dev), что ReactOS содержит код, полученный путем дизассемблирования Microsoft Windows. Код, который оспаривал Бирр, включал функцию BadStack в syscall. S, а также другие неуточненные элементы. Сравнивая эту функцию с дизассемблированными бинарными файлами Windows XP, Бирр утверждал, что функция BadStack была просто скопирована и вставлена из Windows XP, поскольку они были идентичны. Алекс Ионеску, автор кода, утверждал, что, хотя бинарный файл Windows XP действительно был дизассемблирован и изучен, код был не просто скопирован, а перереализован; по словам Ионеску, функции были идентичны, потому что существовал только один возможный способ их реализации. 27 января 2006 года разработчики, ответственные за поддержку репозитория кода ReactOS, отключили доступ после совещания, посвященного обсуждению этих утверждений. Microsoft отказалась комментировать инцидент, когда к ней обратились представители NewsForge. Поскольку ReactOS является проектом разработки свободного и открытого программного обеспечения, это заявление вызвало негативную реакцию в сообществе свободного программного обеспечения; в частности, Wine запретила нескольким неактивным разработчикам вносить свой вклад, и формальное высокоуровневое сотрудничество между двумя проектами оставалось затруднительным по состоянию на 2006 год. В заявлении на своем веб-сайте ReactOS указала на различные юридические определения того, что представляет собой реверс-инжиниринг в "чистых комнатах", как причину конфликта. Чтобы избежать потенциальных судебных разбирательств, компании иногда вводят политику, согласно которой перереализация на основе дизассемблированного кода должна быть написана не тем человеком, который дизассемблировал и изучил исходный код. ReactOS уточнила требования своего заявления о политике интеллектуальной собственности в отношении реверс-инжиниринга в "чистых комнатах", чтобы избежать потенциального нарушения законодательства Соединенных Штатов. Был проведен внутренний аудит исходного кода, чтобы убедиться, что использовался только реверс-инжиниринг в "чистых комнатах", и все разработчики были обязаны подписать соглашение об обязательстве соблюдать политику проекта в отношении реверс-инжиниринга. Кроме того, утечка исходного кода Windows в 2004 году не рассматривалась как юридический риск для ReactOS, поскольку коммерческая тайна считалась не подлежащей защите в суде из-за ее широкого распространения. Аксель Риечин, инженер ядра в Microsoft, заявил, что он узнал некоторые конкретные фрагменты в ядре ReactOS, которые вряд ли являются результатом перереализации в "чистой комнате". Он предполагает, что проект взял исходный код из Windows Research Kernel, который был лицензирован университетам и неоднократно просачивался в сеть. Внутренние структуры данных и имена переменных имеют точно такие же названия как в ReactOS, так и в исследовательском ядре.

Участие в Google Summer of Code

Начиная с 2006 года, проект ReactOS принимал участие в нескольких Google Summer of Code. Например, в GSoC 2011 ReactOS выступил наставником студенческого проекта, который интегрировал lwIP в сетевой стек. В 2011 году демонстрация была показана тогдашнему президенту Дмитрию Медведеву во время посещения средней школы в Верхнерусском, Ставропольский край, в котором присутствовал один из членов команды разработчиков. 31 июля 2012 года Владимир Путин также увидел демонстрацию во время своего визита в качестве президента России на Молодежный форум "Селигер", в котором участвовал один из членов команды разработчиков Марат Каратов. 1 апреля 2015 года Брагин принял участие в экспертной встрече Министерства цифрового развития, связи и массовых коммуникаций Российской Федерации по снижению зависимости России от импорта проприетарного программного обеспечения. В протоколе заседания упоминалось "создание операционной системы с открытым исходным кодом на базе ReactOS для персональных компьютеров, ноутбуков и других мобильных устройств", а также "создание операционной системы с открытым исходным кодом для серверов на базе ReactOS", что поместило этот проект на второе место среди трех предложенных.

Финансирование кампаний

1 мая 2012 года была начата кампания по сбору средств в размере 30 000 евро для финансирования дополнительных проектов разработки. К концу года было достигнуто примерно 50% от целевой суммы, и было решено продолжить кампанию без установленных сроков. Средства были направлены организации ReactOS Deutschland e. V. В связи с тем, что налоговое законодательство Германии для организаций, зарегистрированных как общественные объединения (Eingetragener Verein), затрудняет прямые выплаты разработчикам, рассматривались косвенные варианты, такие как стипендии.

Проект Thorium Core Cloud Desktop

Когда ReactOS был удостоен звания "Проект месяца" на SourceForge в июне 2013 года, в интервью с координатором проекта Алексеем Брагиным была объявлена краудфандинговая кампания на Kickstarter. 23 декабря 2013 года был представлен проект, запущенный как кампания на Kickstarter с целью сбора 120 000 долларов США. Облачный вычислительный сервис Thorium Core Cloud Desktop, позиционируемый как облачное решение, должен был использовать ReactOS в качестве ядра и позволить запускать приложения, совместимые с Windows, с мобильных устройств (например, смартфонов, планшетов), рабочих станций или любых других подключенных устройств. 21 февраля 2014 года сбор средств завершился, не достигнув целевой суммы: было собрано 48 965 долларов США при необходимом объеме в 120 000 долларов, в результате чего средства не были перечислены.

ReactOS Community Edition (издание для сообщества)

В апреле 2014 года проект ReactOS объявил о запуске кампании на Indiegogo для выпуска ReactOS Community Edition – версии ReactOS, основанной на релизе 0.4. Цель кампании с гибким финансированием составляла 50 000 долларов, с дополнительными расширенными целями. Разработка ReactOS Community Edition должна была быть ориентирована на сообщество, где пользователи ReactOS голосовали бы и выделяли средства для определения программного и аппаратного обеспечения, поддержку которых проект будет реализовывать. 1 июня 2014 года кампания по краудфандингу на Indiegogo завершилась, собрав 25 141 доллар США на разработку Community Edition, и вскоре после этого начался процесс голосования по выбору поддерживаемого аппаратного и программного обеспечения.

ReactOS Hackfest (Хакфест ReactOS)

Проект ReactOS организовал хакфест с 7 по 12 августа 2015 года в немецком городе Аахен. В результате хакфеста в ReactOS было добавлено множество функций. Второй хакфест был организован проектом ReactOS с 14 по 18 августа 2017 года в немецком городе Кельн. Третий и четвертый хакфесты были организованы проектом ReactOS с 16 по 21 августа 2018 года и с 15 по 20 августа 2019 года в Берлине соответственно.

История релизов

Версия системы Дата выпуска Информация о выпуске 2006 08 27 Первая версия, официально поддерживающая сети 2007 03 10 Включен менеджер программ, начата переработка ядра – пропущено. Ветвь создана, но не выпущена. Улучшения ядра и win32k. 2008 01 22 Переработка поддержки реестра, клиент удаленного рабочего стола и Plug and Play. 2008 06 30 Только исправления ошибок. 2008 08 06 Поддержка RTL. 2008 11 04 Улучшенная поддержка x86-64; MSVC, новые стеки. 2009 02 04 Внедрена поддержка PSEH и многоразрядных HDD в Live CD. 2009 04 26 Минимальный объем оперативной памяти 24 МБ, ускоренное гиперпространственное отображение, начальная поддержка звука. 2009 07 05 Начальная поддержка SATA, поддержка USB-клавиатуры/мыши, клон Paint, начальный MSVC. 2009 12 16 Переработка Kdcom; китайские/корейские шрифты; обновления совместимости; улучшения звуковой системы. 2010 10 20 Переработка обработчика исключений; переработка таймера и обработки сообщений; поддержка NMI; поддержка SxS; частичная поддержка EMS. 2011 03 22 Переработка менеджера кучи, улучшенная поддержка SATA, исправлены графические ошибки. 2012 02 07 ACPI включен по умолчанию, поддержка тем, новый TCP/IP драйвер (LwIP), совместимость MSVC, поддерживаются операции Scatter/Gather DMA, переработка shell32. 2013 05 30 Поддержка USB для мышей, клавиатуры и устройств хранения; переработана система управления сеансами; поддержка AHCI с обновленным драйвером UniATA; альтернальный модуль управления памятью ReactOS взял на себя все функции управления памятью, кроме секций; предварительная поддержка отладки компонентов ReactOS с помощью WinDbg; улучшения на основе результатов тестирования функциональности приложения AutoHotkey; исправления ошибок на основе работы Driver Verifier на нескольких поставляемых драйверах. 2014 02 06 Переработка CSRSS; улучшена поддержка тем; сетевой драйвер для RTL8139, позволяющий ReactOS поддерживать более новые версии QEMU из коробки. 2014 11 05 Включен NTVDM; улучшения шрифтов; исправления ошибок. 2016 02 16 Улучшена поддержка USB, новая оболочка проводника и темы, улучшена поддержка VirtualBox и Virtual PC, поддержка чтения/записи ext2, поддержка чтения NTFS и улучшена поддержка сети. 2016 05 17 Улучшен контекст активации, поддержка Btrfs, улучшенная оболочка, исправления ошибок USB, поддержка общих папок виртуальных машин. 2016 08 16 Улучшена поддержка Btrfs и расширенная поддержка файловой системы, ReiserFS и UFS/FFS, внедрена поддержка NET Framework 2.0 и 4.0, исправления и улучшения оболочки. 2016 11 16 Новая библиотека Winsock, начальная поддержка секций, обычные исправления ошибок. 2017 02 16 Начальная поддержка стека печати, незначительные исправления шрифтов, обычные улучшения и исправления ошибок. 2017 05 18 Улучшенная отрисовка шрифтов и метрик шрифтов, серьезные исправления в ядре и драйверах, Microsoft Office 2010 протестирован как рабочий. 2017 09 01 Несколько исправлений проблем с двойной загрузкой, улучшена поддержка тем, добавлен драйвер NFS, несколько исправлений ядра и файловой системы. 2017 12 06 Улучшенная версия менеджера приложений RAPPS, реализация панели инструментов "Быстрый запуск" в проводнике; различные исправления ошибок в драйверах файловой системы, улучшения в RDBSS/RXCE и поддержке NFS. 2018 04 14 Уведомления Balloon, панель уведомлений, автозаполнение в оболочке, новый драйвер NTFS, отчеты об аварийных сбоях и экспериментальная поддержка программного обеспечения NT6+. 2018 07 23 ReactOS снова самодостаточен. 2018 11 06 Поддерживается загрузка с BTRFS. 2019 03 04 Драйверы для управления питанием (его значок находится на панели задач, в правом нижнем углу экрана, рядом с часами). Поддержка обновления существующей установки ReactOS. Улучшена поддержка SATA. 2019 09 23 Улучшения ядра, функция привязки окон, улучшения шрифтов, драйвер Intel e1000 NIC, DLL в пользовательском режиме, новые темы. 2020 04 09 Новый стек USB, оптимизированный драйвер FAT от FreeLoader, представлено новое программное обеспечение: Диспетчер специальных возможностей. 2021 12 16 Улучшения функции "Отправить в" и Shell, поддержка загрузки NEC PC 9800, улучшения ICMP, улучшения ядра, подключение NetKVM VirtIO, различные изменения и улучшения. Поддержка x64 и UEFI, объединяет Live CD и загрузочный CD в единую графическую установку. Поддержка чтения и записи файловой системы NTFS, поддержка модели драйверов Windows (включая поддержку видеокарт), улучшения подсистемы печати и DirectX Core.

Разработка основ ReactOS

ReactOS в основном написана на C, при этом некоторые элементы, такие как ReactOS Explorer и звуковой стек, написаны на C++. Проект компилируется с использованием MinGW и Microsoft Visual Studio и вносит вклад в разработку используемых систем сборки путем отправки патчей к своим компонентам. Поддержка DirectX осуществляется через ReactX – собственную реализацию. 2D и OpenGL 3D аппаратное ускорение рендеринга выполняется нативно, а другие функции рисования, такие как Direct3D, перенаправляются в OpenGL в качестве временного решения, в основном с использованием кода Wine, например WineD3D. На прогресс разработки влияет размер команды разработчиков и уровень их опыта. Для оценки усилий, необходимых для реализации Windows 7, Microsoft привлекла около 1000 разработчиков, организованных в 25 команд, в каждой из которых в среднем было 40 разработчиков. По состоянию на 2011 год, в записи ReactOS на Ohloh, страница по ссылке "Очень большая, активная команда разработчиков" содержит список 33 разработчиков, внесших вклад за 12 месяцев, и в общей сложности 104 нынешних и бывших участника, которые внесли свой вклад в проект через Apache Subversion с момента его создания. В своей презентации на Hackmeeting 2009 в Милане разработчик ReactOS Микеле К. отметил, что большинство разработчиков изучают архитектуру Windows непосредственно в процессе работы над ReactOS и не имеют предварительных знаний. В какой-то момент велась работа по портированию на архитектуру ARM, однако она не дала значительной функциональности и была прекращена вместе с портированием на PowerPC, который больше не поддерживается активно.

Сотрудничество и повторное использование

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

Стеллаж драйверов

На аппаратном уровне драйверов, например, проект UniATA предоставляет драйверы Serial ATA для ReactOS. Проект также экспериментировал с использованием библиотеки FullFAT при переработке своей устанавливаемой файловой системы FAT. ReactOS использует USB-стек из Haiku как для справки, так и в качестве основы для своей поддержки USB. Mesa 3D обеспечивает OpenGL-рендеринг. Впоследствии lwIP был интегрирован в сетевой стек ReactOS.

Сотрудничество в области виноделия

Проекты ReactOS и Wine преследуют общую цель – обеспечивать нативный запуск бинарного программного обеспечения Windows и, следовательно, могут разделять множество зависимостей и результатов разработки. Несмотря на то, что компоненты NTDLL, USER32, KERNEL32, GDI32 и ADVAPI32 из Wine не могут быть напрямую использованы ReactOS из-за архитектурных различий, фрагменты кода и другие части могут быть общими для обоих проектов. Ядро разрабатывается ReactOS отдельно, поскольку Wine опирается на существующие Unix-подобные ядра. Кроме того, была создана экспериментальная ветвь Arwinss как альтернативный способ улучшения поддержки USER32 и GDI32 посредством альтернативной реализации API Win32. В то время как исходная подсистема Win32 в ReactOS была тесно смоделирована по аналогии с Windows, Arwinss сочетает в себе архитектуру этой подсистемы с соответствующей реализацией в Wine. Для этого Arwinss использует библиотеки GDI32 и USER32 из Wine с незначительными изменениями, чтобы в полной мере использовать существующую совместимость программного обеспечения Wine. Arwinss также позволяет пользователю опционально использовать удалённый X-сервер вместо локального дисплея.

Другое

Инициатива Tango Desktop Project предоставляет открытые рекомендации по дизайну и ресурсы (например, иконки) для приложений в настольных средах. FreeType — это библиотека разработки программного обеспечения с открытым исходным кодом, используемая для растрового отображения текста и обеспечивающая поддержку других операций, связанных со шрифтами. Проект KernelEx представляет собой расширение Windows API и слой совместимости, предоставляющий реализации некоторых Windows API с открытым исходным кодом. К другим проектам-участникам относятся MinGW, SYSLINUX, adns, ICU, GraphApp, Ext2, GNU FreeFont, шрифты DejaVu и шрифты Liberation.

Прием

Различные люди признали ReactOS и значимость наличия жизнеспособной замены Windows с открытым исходным кодом. В своей колонке для журнала Free Software Magazine Дэвид Шугар отметил в 2006 году, что ReactOS позволит использовать приложения, зависящие от устаревших версий Windows, чьи API были объявлены устаревшими. Он также отметил его потенциал для расширения общего числа развернутых решений с открытым исходным кодом и как ресурс для разработчиков, желающих узнать о неопубликованных API Windows при создании переносимых приложений. Колумнист PC Magazine Джон С. Дворак заметил в 2008 году, что архитектура Windows NT осталась в основном неизменной, что делает ее идеальным кандидатом для клонирования, и полагал, что ReactOS может представлять собой "большую угрозу для доминирования Microsoft, чем Linux". В ответ на колонку Дворака, журналист ZDNet Дана Бланкенхорн отметила в 2008 году, что отсутствие корпоративных спонсоров и партнеров сделало проект безвредным для Microsoft. Поддерживая эту точку зрения, Том Холверда из OSNews в 2009 году отнес ReactOS к категории любительских операционных систем, поддерживаемых лишь небольшими группами разработчиков в свободное время, лишенных финансовой поддержки более распространенных операционных систем и наследия ранее популярных, таких как RISC OS. В октябре 2015 года в обзоре Network World ReactOS v0.3.17 было отмечено: "Это все равно что запустить Windows 2000", и высоко оценен менеджер пакетов приложений – функция, отсутствующая в оригинальной Windows. Джесси Смит из DistroWatch Weekly рассмотрел ReactOS v0.4.9 и отметил, что ReactOS "в конечном итоге столкнулся с аналогичной проблемой: ограниченной поддержкой оборудования" и пока не является стабильной операционной системой.

Награды

Проект ReactOS выиграл награду "Лучшая презентация" на ежегодном Молодежном форуме "Селигер" в 2011 году, получив 100 000 российских рублей (2700 долларов США). В форуме принял участие Александр Речицкий, один из членов команды разработчиков. ReactOS был проектом, выделенным на SourceForge, в течение нескольких недель, начиная с 27 февраля 2012 года, 25 апреля 2013 года и других периодов. Он также был признан "Проектом месяца" на SourceForge в июне 2013 года и феврале 2019 года.