Uploaded by Alexander R

ReactOS ОС с открытым исходным кодом на основе архитектуры NT

advertisement
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: aleksey@reactos.org
Download