ReactOS ОС с открытым исходным кодом на основе архитектуры NT Информация о докладчике • Алексей Брагин • В проекте более 4 лет. • Разработка «в режиме ядра» (ntoskrnl, hal, драйвера, win32k, и т.д.). • Окончил МГТУ им. Н.Э.Баумана по специальности ПО ЭВМ и ИТ. • Аспирант каф. ПМ МЭИ (ТУ). Обзор • О проекте – Описание – Мотивация и задачи – Текущий статус • Архитектура – Ядро – Native + подсистемы – Пользовательские программы (Win32) • ReactOS и образование – Перспектива – Платформа • Разработка Реализация, мотивация, цели и текущий статус О проекте ReactOS Описание • ReactOS – это операционная система, написанная «с нуля». • Наиболее близко придерживается архитектуры NT. • NT – это 32-битное семейство ОС Windows разработанных фирмой Microsoft в начале 90-ых и постоянно обновляемое новыми выпусками. Windows 2000, XP, 2003, Vista – это разные версии NT. • ReactOS ориентируется на Windows XP/2003 (NT 5.1/5.2). • Разработка ReactOS проводится уже более 10 лет, некоторый код основан на архитектуре NT4, в то же время некоторые функции поддерживают новые API NT6 (Vista). • ReactOS включает ядро, библиотеки Win32, системные библиотеки и драйвера, базовые приложения, системные компоненты, поддержка подсистем и менеджера окон. • ReactOS не включает ничего лишнего. Лицензия и обмен исходным кодом • ReactOS – GPL2.0, но включает в себя код сторонних проектов, под их совместимыми лицензиями. • Сторонний код включает: – Wine составляет большую часть Win32-библиотек ReactOS. – Freetype предоставляет возможность отрисовки шрифтов для менеджера окон. – libxml, libpng, bzlib, adns предоставляют поддержку для специализированных Win32-библиотек и приложений. • В свою очередь, ReactOS используется: – Captive, для поддержки файловой системы NTFS в Linux. – Некоторые патчи отправляются в Wine. – NDISWrapper. – LinuxBIOS для поддержки загрузки NT. Больше о кооперации • Из-за большого размера исходных кодов и требований Win32, нашими разработчиками был сделан ряд патчей и улучшений в: – Заголовочных файлах MinGW DDK. – Патчи для MinGW GCC и Binutils. – Патчи для QEmu и KQEmu. • С поддержкой бОльшего количества специализированных Win32 API, требуется импортировать больше библиотек, особенно для API секьюрити и поддержки GDI+. • Тем не менее, мы не будем включать те приложения, или те API, которых нет в Windows. Мотивация • NT 5.2 предоставляет богатую и расширяемую архитектуру, с высоко-скалируемым и оптимизированным набором компонент. • Безопасная и надежная ОС, написанная для уровня сертификации безопасности C2, обновлено до B1 в Vista. • Также хорошая возможность для изучения и исследования (для студентов, аспирантов, и т.д.). • Под ней работают 95%+ всего программного обеспечения и драйверов, наиболее распространенная ОС на планете. • Но… Мотивация • • • • • • Содержит ряд плохих решений, принятых во время истории 16-битной Windows 9x, но сохраненных из-за совместимости. Содержит огромное количество «hacks» для поддержки плохонаписанных приложений и драйверов от сторонних разработчиков. Содержит плохие решения, принимаемые в силу разных корпоративных причин (DRM, Driver Signing, и т.д.). Содержит много ошибок в прилагаемом ПО (Internet Explorer / Windows Media Player / Outlook Express) и плохие решения по безопасности (пользователи по умолчанию работают в режиме Администратора, и т.п.), что подрывает архитектурную безопасность и надежность. Закрытый исходный код, дорогостоящий, плохо документированный в области системной архитектуры (в сравнении с конкурирующими FOSS операционными системами). Большинство возможностей по расширению не документируются, и не открыты для сторонних разработчиков. Задачи • ReactOS будет предлагать все возможности и производительность NT без «hacks», ограничивающих архитектурных решений и ограничивающей лицензии. • Предлагает бесплатную совместимость с Windows на наивысшем возможном уровне. • Документирует то, что недокументировано, предоставляет двоично-совместимые компоненты, которые могут быть использованы для расширения. • Большая платформа в целях образования. У UNIX/Linux хорошо учится, но NT даёт другие интересные вещи, которые заслуживают такого же внимания. • Не будет включать приложения типа IE, OE или WMP. Пользователям будет предлагаться установить FireFox, ThunderBird, OpenOffice, Mplayer и т.д. Текущий статус • Большие части ядра уже совместимы с Windows 2003 SP1: Executive, Kernel Core (планировщик, диспетчер, прерывания, и т.д.), HAL, LPC, управление потоками и процессами, и поддержка I/O (кроме PnP). • Другие части вообще не коррелируют с дизайном NT, в частности Cache Controller, Memory Manager. • Поддержка Win32-приложений в основном зависит от двух компонент: – Win32k – GUI-сервер в режиме ядра, аналогично X-серверу в UNIX/Linux. – Win32 библиотеки (gdi32, user32, kernel32, advapi32) – взяты из Wine. • Некоторая Win32-функциональность зависит от ядра. Текущий статус • • • • Пользовательские приложения сейчас поддерживаются в ограниченном виде – только некоторые программы: Firefox, Thunderbird, OpenOffice, и т.д. 90% проблем с совместимостью идёт из Win32k или ошибок в ядре. Теоретически, ReactOS поддерживает как-минимум те программы, которые работают в Wine. Драйвера тестируются реже, но вероятные проблемы: – Некоторые драйвера используют разные трюки, зависящие от смещений, конкретных мест в памяти и переменных, специфичных для NT. – Другие драйвера зависят от разницы в реализации PnP (синхронная или асинхронная). – Плохая поддержка файловых систем из-за большой разницы в Memory Manager / Cache Controller. • • С другой стороны, USB стек от Windows 2003 работает почти без проблем, также работает и драйвер файловой системы Named Pipe File System (npfs.sys). Видео драйвера от NVidia очень сильно завязаны на переменные ядра, поэтому перед использованием их нужно пропатчить. Ядро, native и режим пользователя – парадигма подсистем Архитектура ядра ReactOS Архитектура режима ядра NT • • • • • Режим ядра NT реализован в одном большом модуле (ntoskrnl), в слое абстракции аппаратного обеспечения (HAL), и наборе загружаемых модулей ядра (драйвера, и другие библиотеки). Ядро написано в переносимом C, и существуют сами порты под другие архитектуры (или когда-то существовали): MIPS, Alpha, AXP64, Sparc, i810, IA64, x86, x86-64, PowerPC. Некоторые низкоуровневые части написаны на ассемблере для каждой архитектуры. Таким образом для управления специфичными реализациями аппаратного обеспечения требуется HAL: прерывания, инициализация процессора, DMA, доступ к шинам PCI/ISA, таймеры, и т.д. Некоторые драйвера специализированы для конкретного типа АО (драйвер PCI, драйвер ATAPI, IDE, и т.д.). Другие драйвера – общие модули, или файловые системы (Partition Manager, Volume Manager, NTFS, Mailslot Driver, Kernel Debugger Library, и т.д.). Архитектура Windows Архитектура режима ядра ReactOS • Практически идентична NT. • В дереве исходников есть директория \ntoskrnl, реализующая само ядро, \hal для общего кода HAL, \halx86, \halxbox для специфичного кода. • Пока нет поддержки ACPI – HAL использует PIC и старый таймер. • Единственный порт системы на другую архитектуру, над которым ведется работа – это PowerPC. Учимся у ReactOS, учимся вместе с ReactOS ReactOS и образование Перспективы ОС • Почему изучение операционных систем так важно? – Сложные проблемы и интересные решения. – Полнейшее покрытие кода. – Нет предположений. – Оптимизация. – Реентерабельность, и параллельное выполнение. – Доступ ко всему аппаратному обеспечению. – Используются везде, начиная с критических жизнеобеспечивающих устройств и заканчивая автомобилями и мобильными телефонами. Сложные проблемы в ОС • Определение количества экспортируемых сервисов может занять значительную часть времени. Сколько нужно написать API функций? Что нужно оставить сторонним разработчикам? Что должно быть в ядре? Что должно быть в режиме пользователя? • ОС может быть установлена на миллионы машин довольно быстро, но обновление занимает месяцы или даже годы. Иногда ОС находится в ПЗУ, делая обновление трудным или невозможным. Одна ошибка убивает вашу ОС на рынке. • Зависимости и обратная совместимость. Когда-нибудь всё же придётся что-то менять… сохранится ли поддержка имеющихся программ от сторонних разработчиков? Сложные проблемы в ОС • Общение с индустрией: сотни тысяч программ уже написаны для вашей ОС. Вы общаетесь с каждым автором, свободна ли ваша ОС для всех? • Изменения аппаратного обеспечения. Архитектура ЦП может кардинально изменится (пример: Apple и PPC). Ваш код портируемый? Правильно ли реализована абстракция от аппаратуры? Покрытие кода • Покрытие кода означает: какая часть от того кода, который вы написали действительно выполняется. Большая функция может содержать 15 флагов и 10 путей, которые запускают разный код. Обычная программа может использовать только 15% этого кода. • В ОС, наиболее вероятно 90%+ кода будет выполнено в то или иное время, из-за большого количества приложений. • Профилировщики и трассировщики обычно показывают только наиболее типичные пути выполнения: нужно использовать тесты! Покрытие кода • Но даже в случае тестов, они делаются Вами. А значит возможно что-то пропустить. • Тяжело оптимизировать код, который имеет практически 100%-ное покрытие. • Искать ошибки тоже тяжело: гонки данных могут случаться только в одном пути, и только при вызове из одной из функций. • Планируется ли поддержка тех трёх программ, которые используют флаг более неиспользуемый никем, или легче удалить флаг и оптимизировать функцию? Нет предположений • Опираться на предположения при разработке ОС – бесполезный код в результате. • Используемость кода не даёт возможности что-либо предполагать. • Что делать, если всё-таки некоторые функции очень редкоиспользуемы? Нет предположений • Что в этом случае делает Microsoft? – Специальная сборка “Checked Build”для разработчиков ОС. Если разработчик делает неправильные предположения в коде, то он получит соответствующее сообщение. – Специальная сборка “Code Coverage”. – Внутренняя лаборатория тестирования с 10 000 машинами разной конфигурации. – Разные мероприятия типа “Plug Fest”, когда сторонние разработчики приносят свои драйвера и пробуют их в новом ядре, таким образом обнаруживая ошибки в его реализации. – Мероприятия типа “Vista Compatibility Workshop”, куда разработчики приносят свои программы и тестируют их под ОС Vista и получают помощь от самих разработчиков Microsoft. Оптимизация • Оптимизация может быть общей, но это редкий случай. • Специфичная оптимизация (какого-либо кодового пути на какой-либо конкретный случай). • Но опять-таки, в ОС есть проблема покрытия кода. • Можно оптимизировать менеджер памяти для случая выделения малых блоков памяти, что увеличит скорость работы соответствующих программ. • Но программы, запрашивающие большие блоки памяти будут работать медленнее. • В ОС будут все типы программ. Что если большие блоки составляют всего 3% от всех программ? А что если одна из таких программ используется 200 000 пользователями в крупнейших финансовых организациях? Что если программа запрашивает и маленькие и большие блоки памяти в пропорции 50/50? Итак… • Работа над ОС предоставляет студенту для решения все эти проблемы, и даже больше. • Те, кто может не только понять эти проблемы, но и найти творческие решения обычно не имеют трудностей с поиском работы • Средний разработчик может никогда и не задумываться о многопоточности, пока его код не сломается из-за этого в 2010г. • Если Вы работали над ОС, Вы сможете работать над любым софтверным проектом. Кто, когда, и каким образом Разработка Сообщество разработчиков • У ReactOS тысячи пользователей по всему миру. Сообщество разработчиков • Десятки разработчиков со всего мира вносят свой вклад в ReactOS, разные часовые пояса, языки и интересы для этого не преграда. • IRC – главное место встречи всех разработчиков. На канале постоянно находится более 120 посетителей, включая разработчиков, тестеров, переводчиков и энтузиастов. • Вебсайт имеет десятки тысяч посещений в день и предоставляет разные сервисы, такие как форум, багзилла, википедия, база данных совместимости, CMS, и т.д. Сообщество разработчиков • Управление таким сообществом – нетривиально. • Нельзя просто поставить четкие цели типа «Реализовать поддержку звука». Некоторые разработчики не имеют понятия как это сделать, и хотят работать над другими модулями. • Но без целей, ОС разрастается как осьминог, каждая нога – в своем направлении, но без четкого направления. • Сейчас ReactOS немного страдает от такой проблемы, но ситуация улучшается. • Необходим хороший PR и поддержка со стороны прессы, а также грамотное тестирование, арт-дизайн, переводчики, вебмастера, модераторы. Обучение и изучение ReactOS • Теперь, когда Вы увидели увлекательный и захватывающий процесс разработки ОС, может быть Вам стала интересна ReactOS/NT, и то, как можно поучаствовать. • Также, это отличная платформа для обучения, практически в любой области – планировка и диспетчеризация, межпроцессное взаимодействие, или же процедуры машинной графики! • Начните с двух ресурсов: – Внутреннее устройство Windows, 4-ое издание, Марк Руссинович. – Windows Curriculum Kit (CRK), доступен через MSDN Academic Repository (это общедоступный ресурс, а не MSDNAA). Темпы разработки Время действовать • ReactOS никогда не откажется от помощи! – Финансовой: Принимаются пожертвования через WebMoney, банковский перевод, PayPal, кредитными картами и т.д. – Человеческой: Требуются разработчики, знакомые с программированием в Windows, с применением Win32 или в режиме ядра. – Тестирование: Ошибки должны обнаруживаться как можно скорее; автоматизированные системы не всегда идеальны. Мини-проекты • Приложения – Графические (mmc.exe, syskey.exe, …) – Командной строки (at.exe, cipher.exe, …) • Драйверы – Стек хранения информации (partmgr.sys, ftdisk.sys, …) – Аудио (wdmaudio.sys, ks.sys, …) – Устройств (NIC, звуковых карт, …) • API в DLL, ядре – Большинство DLL режима пользователя импортируются из Wine, кроме: • Gdi32, user32, kernel32 – Некоторые функции в ядре всё ещё не реализованы: например Wmi*. • Средства сборки – Карта зависимостей для rbuild – Поддержка PDB, SEH в GCC – Оптимизация rbuild – Аналог bind.exe, но с поддержкой Linux Вопросы и комментарии • http://www.reactos.ru • IRC-каналы ReactOS в сети Freenode #reactos, #reactos-ru • Списки рассылки – ros-dev, ros-diffs, rosgeneral • Мой блог: http://alex-bragin.livejournal.com • Email: [email protected]