SlideShare a Scribd company logo
1 of 45
Операционная
система ReactOS
ВНУТРЕННЕЕ УСТРОЙСТВО WINDOWS И
ПОЧЕМУ ЖЕ ПРОСТО НЕ ИСПОЛЬЗОВАТЬ
ЯДРО LINUX?!
ReactOS – это (не) Windows
22 января 1996 – первый коммит
ReactOS - это Windows
◦ Выполняет Windows-приложения
◦ Поддерживает Windows-драйвера
◦ Выглядит как Windows
ReactOS – это не Windows
◦ ReactOS – Свободное ПО
◦ ReactOS использует другие СПО проекты
◦ Можно сделать “свой собственный Windows”
Об авторе
Алексей Брагин – Москва, Россия
◦ Разработчик ReactOS с 2003 года
◦ Президент Фонда ReactOS и Координатор проекта
◦ Степень магистра, МГТУ им. Н.Э.Баумана
◦ Преподаватель, кафедра ИУ9, МГТУ им. Н.Э.Баумана
◦ Электронная почта: ALEKSEY@REACTOS.ORG
Об авторе
◦ Первый патч в ReactOS: 24 марта 2003
◦ Первый коммит: 9 апреля 2003
◦ Всего около 4803 коммитов в ReactOS
Архитектура
Windows
ЧТО ЗНАЧИТ WINDOWS
ReactOS это Windows
Для максимальной совместимости ReactOS реализует архитектуру,
идентичную Windows
◦ Windows-драйверам нужно ядро Windows
◦ Многие программы (firewalls, antivirus, media players, PDA sync software,
etc.) поставляются со специальными драйверами
Архитектура Windows существенно отличается от Linux и не так
хорошо известна
Начнём с основ…
Архитектура ОС
Абстракция ЦП - времени и контектса (processes, threads, signals,
etc.)
Абстракция памяти (virtual memory, paging, stacks, heaps, etc.)
Разделение между системой и приложениями используя
встроенные в ЦП механизмы защиты памяти (user mode vs kernel
mode)
Разделение между «железом» и приложениями используя
встроенные в ЦП механизмы привилегий ввода/вывода
Механизмы обхода защит ОС управляемым, безопасным образом
(system calls, security subsystem, etc.)
Архитектура ОС
Ядро
Приложения
Virtual
Physical
User mode
Kernel mode
User
Железо
Архитектура Linux
Монолитное ядро. У ядра нет ABI
Модель управления процессами и модель безопасности UNIX
Встроенная поддержка сети
◦ Sockets, pipes
◦ select, poll, etc.
Абстракции файловой системы (VFS)
UNIX API (libc) поверх небольшого количества UNIX-подобных
системных вызовов и сигналов
Остальные APIs (audio, application setup, desktop environment
integration, cryptography, etc.) - de facto стандарты от сторонних
разработчиков
◦ Графическая подсистема (X server) – вещь в себе. В ядре есть специальные
“backdoors” для прямого взаимодействия X сервера с аппаратуров, чтобы
вынести сложность видео-драйверов из окружения ядра
Архитектура Linux
Интерфейс системных вызовов
VFS PM MM
Arch Драйвера устройств
Сетевой
стэк
ЦП MMUДиск Устройства
libc
Библиотеки приложений
Приложения X сервер
Видеокарта
Ядро
Системные вызовы Сигналы Прямой I/O
User mode
Kernel mode
Virtual
Physical
Архитектура Windows (NT)
Монолитное ядро (гибридное). У ядра относительно стабильный ABI
Архитектура ядра почти идентична дизайну DEC RSX-11 и VMS, с влиянием DOS, OS/2
и Windows 95
◦ RSX-11, VMS и Windows NT были спроектированы одним и тем же инженером (Dave Cutler)
◦ Первоначально Windows NT разрабатывалась как новое ядро для OS/2
В ядре нет абстракции устройств. Абстракция предоставляется стандартными
системными драйверами (class или port драйвера)
В самом ядре нет поддержки сети. select/poll – не системные вызовы, а ioctl запрос
к “файловой системе сокетов”
◦ Сокеты и пайпы предоставляются специальными файловыми системами
◦ Над этим ещё один уровень абстракции в режиме пользователя: Winsock когда-то был
сторонним компонентом (напр. Trumpet Winsock)
Графическая и оконная подсистемы в составе ОС (работающие в режиме ядра) со
стандартным API
Богатое высокоуровневое API всех сортов (криптография, desktop environment, etc.)
Особые черты архитектуры
Windows
Устройства чипсета (таймер, контроллер прерываний, управление
питанием, шины, firmware, и т.п.) абстрагируются с помощью
компонента ядра под названием Hardware Abstraction Layer (HAL)
◦ ACPI и не-ACPI – просто разные HAL
◦ Порт ReactOS на приставку XBox - обычный x86 ReactOS со специальным
XBox-специфичным HAL
Сигналы отсутствуют; вместо них standard exception model (“SEH”,
которая была на VMS, OS/2 и Tru64)
Обратные системные вызовы (callbacks): оконная и графическая
подсистемы могут делать обратные вызовы в режим пользователя
◦ В оригинальной реализации (Windows 95) user-mode и kernel-mode части
подсистемы работали в разделяемой памяти
◦ Это слишком небезопасно для Windows NT; безопасная но совместимая
разделяемая память эмулируется с помощью некоторых «ухищрений» (типа
callbacks)
Архитектура Windows
Kernel
Executive
HAL
ntdll
kernel32
gdi32user32
Системные библиотеки
Службы
DirectX
Драйвера устройств
win32k
Приложения, библиотеки приложений
Чипсет ЦП, MMU Устройства
Wine и ReactOS
REACTOS ЭТО (НЕ) WINE
ReactOS это (не) Wine
“Раз ReactOS – это только ядро для Wine…
◦ … зачем оно нужно?”
◦ … и почему до сих пор не доделано?”
Как всегда, всё немного сложнее, чем кажется на первый взгляд…
Wine и ReactOS
У ReactOS много общего с Wine, в том числе и исходного кода…
◦ Достаточно общих целей:
◦ Установка Windows приложений
◦ Выполнение Windows приложений
… но…
◦ Слишком много разных целей:
◦ Работа на Linux / работа на «железе»
◦ Поддержка Windows драйверов
Wine на Linux
Windows приложения загружаются только утилитой Wine (Wine
loader)
Windows приложения и DLL динамически линкуются с системными
Windows DLL, реализованными Wine
◦ Большинство Wine DLL – обычные Windows DLL скомпилированные под
Linux
◦ Некоторые – внутренние библиотеки Linux, зависящие от других
библиотек Linux. Библиотеки Linux прозрачны для Windows приложений
– во всех отношениях работают как системные вызовы
Служебный процесс (Wine Server) заменяет ядро Windows для
управления общими ресурсами
Wine на Linux
Ядро Linux
GNU libc
Библиотеки Wine
User mode
Kernel mode
Библиотеки Linux
Загрузчик Wine
X сервер
Wine сервер
Windows приложения
Wine services
Wine в ReactOS
Windows приложения загружаются непосредственно ядром
ReactOS
Windows приложения и DLL динамически связываются с Wine и
ReactOS реализаций системных библиотек Windows
◦ Могут быть использованы только те Wine DLL, которые не зависят от
библиотек Linux
◦ user32 & gdi32 – особый случай, в ReactOS - «native» реализация, не
использующая Wine DLL.
ReactOS реализует настоящее ядро Windows
◦ Может поддерживать приложения и драйвера
User mode
Kernel mode
Wine в ReactOS
Kernel
Executive
HAL
ntdll
kernel32
gdi32user32
System libraries
Службы
DirectX
Windows драйвера
win32k
Windows приложения
Wine на ReactOS: Arwinss
Если реализация оконной подсистемы не такая хорошая, почему бы
не использовать Wine?
Идея привела к эксперименту, результатом которого стала
альтернативная Win32 подсистема в ReactOS, которая
◦ Использует почти неизменённые исходные коды модулей USER32 и
GDI32 из Wine вместе с некоторыми компонентами Wine сервера
◦ Рабочий прототип был создан одним человеком в течение месяца
(существующая «native» реализация подсистемы в ReactOS находится в
состоянии разработки многие годы, и всё ещё полна проблем)
Архитектура Arwinss
Arwinss: плюсы и минусы
Недостатки такого подхода
◦ Внутреннее устройство далеко от Windows
◦ Многие части работают в режиме пользователя (вообще-то это
преимущество!)
◦ Чуть медленнее (решаемо)
◦ Зависимость от Wine
Преимущества
◦ Простая синхронизация кода с Wine
◦ Использование кода Wine, который уже проверен в работе
◦ Более-менее определенная архитектура
◦ Fun!
Wine и ReactOS: итог
Wine предназначен для выполнения Windows-приложений под
Linux. Специфичные для Linux зависимости:
◦ … невидимы для приложений
◦ … являются интегральной частью реализации Wine
ReactOS предназначен для того, чтобы быть Windows:
◦ Всё, что возможно заимствуется из Wine
◦ То, что нельзя – переделывается правильным образом
◦ Реализация не может быть просто “функционально эквивалентной”:
должна быть “бинарно-совместима”, т.к. в Windows всё является API
◦ Не очень много кода других СПО проектов можно использовать
ReactOS сложен и незаменим
Архитектура
ReactOS
REACTOS - ЭТО (НЕ) WINDOWS
Команда ReactOS
Поистине “международный” проект
◦ Основан Jason Filby из Южной Африки
◦ Разработчики из разных стран мира – Евросоюза, России, США, и т.д.
◦ Сейчас, фонд в Российской Федерации, координатор проекта из России,
финансовый фонд в Германии, сообщество по всему миру
Нет формального обучения
◦ Почти все разработчики изучили внутреннее устройство Windows во время
работы над ReactOS
◦ К сожалению для проекта (и к счастью для них), лучших разработчиков
забирают на работу в Microsoft и другие крупные компании
Очень мало информации доступно
◦ “Inside Microsoft Windows” – справочник по внутреннему устройству
◦ … но этого недостаточно для разработки ReactOS
Ядро ReactOS
Многие разработчики работают над ядром ReactOS и подсистемами, с
переменным успехом
Хорошее состояние:
◦ Планировщик, HAL, менеджер процессов и потоков (спасибо Alex Ionescu!)
Удовлетворительное состояние:
◦ Подсистема ввода/вывода, менеджер конфигураций (реестр), менеджер
безопасности, менеджер памяти
Плохое состояние:
◦ Кэш-менеджер, поддержка файловых систем
Отсутствует:
◦ Управление питанием
Тем не менее, ядро ReactOS…
The ReactOS kernel
… достаточно совместимо!
Оконная подсистема (USER)
Проблемы в этой области известны долгое время
Много разработчиков пробовали исправить ситуацию и не смогли
◦ Попытки переписать. Одна совершенно другая - Arwinss.
Оригинальная реализация в Windows - очень хороший hack…
◦ Оконная подсистема берёт свои истоки в Windows 1.0
◦ Порт на Windows NT привнёс защиту памяти, но API подразумевает общую
память
◦ Несколько ухищрений специально для безопасного симулирования общей
памяти – user32.dll не просто библиотека, а часть оконной подсистемы,
работающая в режиме пользователя
… и очень плохой дизайн
◦ Невозможно дать хорошее, высокоуровневое описание архитектуры
◦ Никто не документирует всю подсистему – официально или неофициально
Графическая подсистема (GDI)
Тесно связана с оконной подсистемой
Намного более простой, лучший дизайн
◦ gdi32.dll частично реализация подсистемы в режиме пользователя, для
запуска дисплей-драйверов режима пользователя (напр. драйвера
принтеров)
◦ Алгоритмы рисования хорошо изолированы, имеют простой API
◦ Весь код рисования шрифтов в ReactOS заимствован из FreeType (сторонний СПО проект)
Усилия концентрируются на более сложной (и видимой) оконной
подсистеме. Однако,
DirectX графика – это ещё одна совершенно другая область…
Сеть
Сетевой стэк в Windows располагается вне ядра
… но стэк разделён на независимые слои, с документированными
API между ними:
◦ Winsock
◦ TDI
◦ NDIS
Каждая часть должна быть реализована Windows-совместимым
образом
… но можно использовать сторонние СПО проекты с помощью
специальной Windows-совместимой «обёртки»
◦ Например, мы используем библиотеку lwIP для реализации стэка TCP/IP
ReactOS
настояищее и
будущее
НАД ЧЕМ РАБОТАЕМ СЕЙЧАС, А НАД ЧЕМ
СОБИРАЕМСЯ
Поддержка драйверов
Сторонние драйвера работают неплохо
◦ Видео драйвера, в частности
Сложные слои абстракции нуждаются в работе
◦ USB
◦ Аудио
◦ Сетевые карточки
Драйвера файловых систем (включая сетевые ФС) требуют много
работы в ядре над “большой тройкой” (кэш менеджер, менеджер
памяти, поддержка файловых систем)
USB
Реализованы основы USB-стэка Windows
◦ Дизайн совместим с Windows 2003 SP1
◦ USB-клавиатуры, мышки - работают
◦ Некоторые «флэшки» - работают
◦ Список поддерживаемых устройств доступен на сайте:
https://www.reactos.org/wiki/Supported_USB_Devices
Аудио подсистема
Она работает! И достаточно совместима
Сложно найти людей с опытом и знаниями звуковой подсистемы
Windows
Подсистемы ядра
Кэш менеджер – идёт работа
Порт на ARM принёс много позитивных результатов для общей
части менеджера памяти
Работа над улучшением качества в общем
Средства разработки
Основной компилятор - gcc
◦ Мы внесли значительный вклад в портирование gcc на Windows
(MinGW), т.к. мы самый крупный пользователь этого порта (и
находим там очень много ошибок!)
◦ Никто не предполагал, что MinGW будет компилировать ядро!
◦ MSVC поддерживается и активно развивается
◦ В перспективе – LLVM, работа уже идёт
• ReactOS использует среду CMake
– Удобнее, чем обычный make
– Лучше интеграция со средствами разработки под Windows
– Кросс-платформеннная
– Не зависит от компилятора
В заключение
ЧТО МЫ СЕГОДНЯ УЗНАЛИ?
Студенты и ReactOS
ReactOS – наиболее продвинутая открытая реализация Windows-
совместимой ОС
Лучше, чем WRK для обучения основам ОС
◦ Нет доступа к исходным кодам Microsoft®
◦ Использование СПО для сборки и тестирования
◦ Большое сообщество
Студенческие проекты полезны для
◦ Поиска ошибок в коде
◦ Реализации отсутствующих или неправильно сделанных частей
итог
Вообще, Windows – достаточно неплохая операционная система!
ReactOS…
◦ … это (не) Windows: а 100% реализация Windows с открытым исходных
кодом
◦ … это не Linux: поддерживает Windows-драйвера
◦ … это не Wine: использует Wine, но Wine – только часть ReactOS
ReactOS сложен и уникален
ReactOS – это очень много работы
Есть вопросы?
Brought to you by
Screenshots. Firefox 3.5
Screenshots. Notepad
Screenshots. Desktop
Screenshots. Arwinss in Windows 2003 using X
Windows driver and ReactOS Winlogon

More Related Content

What's hot

6 кареев киров
6 кареев киров6 кареев киров
6 кареев кировqasib
 
TMPA-2013 Sartakov: Genode
TMPA-2013 Sartakov: GenodeTMPA-2013 Sartakov: Genode
TMPA-2013 Sartakov: GenodeIosif Itkin
 
Дмитрий Еманов — Под капотом серверного ПО
Дмитрий Еманов — Под капотом серверного ПОДмитрий Еманов — Под капотом серверного ПО
Дмитрий Еманов — Под капотом серверного ПОDaria Oreshkina
 
Системный администратор Vkontakte. Как? / Антон Кирюшкин (Vkontakte)
Системный администратор Vkontakte. Как? / Антон Кирюшкин (Vkontakte)Системный администратор Vkontakte. Как? / Антон Кирюшкин (Vkontakte)
Системный администратор Vkontakte. Как? / Антон Кирюшкин (Vkontakte)Ontico
 
Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...
Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...
Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...Ontico
 
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)Ontico
 
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)Ontico
 
Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)
Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)
Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)Ontico
 
Управление облачной инфраструктурой
Управление облачной инфраструктуройУправление облачной инфраструктурой
Управление облачной инфраструктуройdddpaul
 
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)Ontico
 
Java Platform Performance BoF
Java Platform Performance BoFJava Platform Performance BoF
Java Platform Performance BoFDmitry Buzdin
 
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов НиколайnoBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов НиколайOntico
 
Практический опыт применения виртуализации для web-систем
Практический опыт применения виртуализации для web-системПрактический опыт применения виртуализации для web-систем
Практический опыт применения виртуализации для web-системAlex Chistyakov
 
DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)
DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)
DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)Ontico
 
Formal verification of operating system kernels
Formal verification of operating system kernelsFormal verification of operating system kernels
Formal verification of operating system kernelsDenis Efremov
 
Инструменты тестирования ядра Linux
Инструменты тестирования ядра LinuxИнструменты тестирования ядра Linux
Инструменты тестирования ядра LinuxDenis Efremov
 

What's hot (20)

Информатика (архитектура ПО)
Информатика (архитектура ПО)Информатика (архитектура ПО)
Информатика (архитектура ПО)
 
Информатика (устройство ПК)
Информатика (устройство ПК)Информатика (устройство ПК)
Информатика (устройство ПК)
 
Информатика (СУБД)
Информатика (СУБД)Информатика (СУБД)
Информатика (СУБД)
 
6 кареев киров
6 кареев киров6 кареев киров
6 кареев киров
 
TMPA-2013 Sartakov: Genode
TMPA-2013 Sartakov: GenodeTMPA-2013 Sartakov: Genode
TMPA-2013 Sartakov: Genode
 
Дмитрий Еманов — Под капотом серверного ПО
Дмитрий Еманов — Под капотом серверного ПОДмитрий Еманов — Под капотом серверного ПО
Дмитрий Еманов — Под капотом серверного ПО
 
Системный администратор Vkontakte. Как? / Антон Кирюшкин (Vkontakte)
Системный администратор Vkontakte. Как? / Антон Кирюшкин (Vkontakte)Системный администратор Vkontakte. Как? / Антон Кирюшкин (Vkontakte)
Системный администратор Vkontakte. Как? / Антон Кирюшкин (Vkontakte)
 
Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...
Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...
Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...
 
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
 
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
 
Информатика (прикладное ПО)
Информатика (прикладное ПО)Информатика (прикладное ПО)
Информатика (прикладное ПО)
 
Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)
Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)
Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)
 
Управление облачной инфраструктурой
Управление облачной инфраструктуройУправление облачной инфраструктурой
Управление облачной инфраструктурой
 
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
 
Java Platform Performance BoF
Java Platform Performance BoFJava Platform Performance BoF
Java Platform Performance BoF
 
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов НиколайnoBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
 
Практический опыт применения виртуализации для web-систем
Практический опыт применения виртуализации для web-системПрактический опыт применения виртуализации для web-систем
Практический опыт применения виртуализации для web-систем
 
DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)
DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)
DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)
 
Formal verification of operating system kernels
Formal verification of operating system kernelsFormal verification of operating system kernels
Formal verification of operating system kernels
 
Инструменты тестирования ядра Linux
Инструменты тестирования ядра LinuxИнструменты тестирования ядра Linux
Инструменты тестирования ядра Linux
 

Similar to ReactOS Tech Talk (ВМК МГУ, ИСП РАН)

webpack: 7 бед - один ответ
webpack: 7 бед - один ответwebpack: 7 бед - один ответ
webpack: 7 бед - один ответDenis Izmaylov
 
Desktop app based on node js and html5
Desktop app based on node js and html5Desktop app based on node js and html5
Desktop app based on node js and html5Provectus
 
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)Ontico
 
Локальное окружение на Docker
Локальное окружение на DockerЛокальное окружение на Docker
Локальное окружение на DockerМихаил Бакулин
 
Running Linux and Unix on Hyper-V
Running Linux and Unix on Hyper-VRunning Linux and Unix on Hyper-V
Running Linux and Unix on Hyper-VAndrey Beshkov
 
Docker контейнерная революция
Docker контейнерная революцияDocker контейнерная революция
Docker контейнерная революцияGetDev.NET
 
Delivering Native User Experience In Client Side Java Applications
Delivering Native User Experience In Client Side Java ApplicationsDelivering Native User Experience In Client Side Java Applications
Delivering Native User Experience In Client Side Java ApplicationsNikita Lipsky
 
2 Продуктивность работы в IDE; Разработка для Windows 10 Store
2 Продуктивность работы в IDE; Разработка для Windows 10 Store2 Продуктивность работы в IDE; Разработка для Windows 10 Store
2 Продуктивность работы в IDE; Разработка для Windows 10 Storesandy97
 
Embarcadero All-Access
Embarcadero All-AccessEmbarcadero All-Access
Embarcadero All-AccessSerghei Urban
 
Что должен уметь Linux программист
Что должен уметь Linux программистЧто должен уметь Linux программист
Что должен уметь Linux программистru_Parallels
 
Кирилл Ветчинкин Практика использования .NET Core на ОС Linux с применением а...
Кирилл Ветчинкин Практика использования .NET Core на ОС Linux с применением а...Кирилл Ветчинкин Практика использования .NET Core на ОС Linux с применением а...
Кирилл Ветчинкин Практика использования .NET Core на ОС Linux с применением а...MskDotNet Community
 
What's new in Visual Studio 2012
What's new in Visual Studio 2012What's new in Visual Studio 2012
What's new in Visual Studio 2012InTRUEdeR
 
Interbase xe7 - универсальная субд для windows linux mac ios android
Interbase xe7 - универсальная субд для windows linux mac ios androidInterbase xe7 - универсальная субд для windows linux mac ios android
Interbase xe7 - универсальная субд для windows linux mac ios androidAndrew Sovtsov
 
браузеры презентация
браузеры презентациябраузеры презентация
браузеры презентация4ertenka
 
Daemons In Web on #devrus
Daemons In Web on #devrusDaemons In Web on #devrus
Daemons In Web on #devrusAlex Chistyakov
 
браузеры презентация
браузеры презентациябраузеры презентация
браузеры презентация4ertenka
 
IOP202 Redis in Azure
IOP202 Redis in AzureIOP202 Redis in Azure
IOP202 Redis in Azuremourhoon
 
Webinar: Обзор RAD Studio 10 Seattle (Delphi, C++Builder)
Webinar: Обзор RAD Studio 10 Seattle (Delphi, C++Builder)Webinar: Обзор RAD Studio 10 Seattle (Delphi, C++Builder)
Webinar: Обзор RAD Studio 10 Seattle (Delphi, C++Builder)Denis Vasilyev
 

Similar to ReactOS Tech Talk (ВМК МГУ, ИСП РАН) (20)

webpack: 7 бед - один ответ
webpack: 7 бед - один ответwebpack: 7 бед - один ответ
webpack: 7 бед - один ответ
 
Desktop app based on node js and html5
Desktop app based on node js and html5Desktop app based on node js and html5
Desktop app based on node js and html5
 
Net framework
Net frameworkNet framework
Net framework
 
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
 
Локальное окружение на Docker
Локальное окружение на DockerЛокальное окружение на Docker
Локальное окружение на Docker
 
Running Linux and Unix on Hyper-V
Running Linux and Unix on Hyper-VRunning Linux and Unix on Hyper-V
Running Linux and Unix on Hyper-V
 
Docker контейнерная революция
Docker контейнерная революцияDocker контейнерная революция
Docker контейнерная революция
 
Delivering Native User Experience In Client Side Java Applications
Delivering Native User Experience In Client Side Java ApplicationsDelivering Native User Experience In Client Side Java Applications
Delivering Native User Experience In Client Side Java Applications
 
2 Продуктивность работы в IDE; Разработка для Windows 10 Store
2 Продуктивность работы в IDE; Разработка для Windows 10 Store2 Продуктивность работы в IDE; Разработка для Windows 10 Store
2 Продуктивность работы в IDE; Разработка для Windows 10 Store
 
Embarcadero All-Access
Embarcadero All-AccessEmbarcadero All-Access
Embarcadero All-Access
 
Что должен уметь Linux программист
Что должен уметь Linux программистЧто должен уметь Linux программист
Что должен уметь Linux программист
 
Что такое Docker
Что такое DockerЧто такое Docker
Что такое Docker
 
Кирилл Ветчинкин Практика использования .NET Core на ОС Linux с применением а...
Кирилл Ветчинкин Практика использования .NET Core на ОС Linux с применением а...Кирилл Ветчинкин Практика использования .NET Core на ОС Linux с применением а...
Кирилл Ветчинкин Практика использования .NET Core на ОС Linux с применением а...
 
What's new in Visual Studio 2012
What's new in Visual Studio 2012What's new in Visual Studio 2012
What's new in Visual Studio 2012
 
Interbase xe7 - универсальная субд для windows linux mac ios android
Interbase xe7 - универсальная субд для windows linux mac ios androidInterbase xe7 - универсальная субд для windows linux mac ios android
Interbase xe7 - универсальная субд для windows linux mac ios android
 
браузеры презентация
браузеры презентациябраузеры презентация
браузеры презентация
 
Daemons In Web on #devrus
Daemons In Web on #devrusDaemons In Web on #devrus
Daemons In Web on #devrus
 
браузеры презентация
браузеры презентациябраузеры презентация
браузеры презентация
 
IOP202 Redis in Azure
IOP202 Redis in AzureIOP202 Redis in Azure
IOP202 Redis in Azure
 
Webinar: Обзор RAD Studio 10 Seattle (Delphi, C++Builder)
Webinar: Обзор RAD Studio 10 Seattle (Delphi, C++Builder)Webinar: Обзор RAD Studio 10 Seattle (Delphi, C++Builder)
Webinar: Обзор RAD Studio 10 Seattle (Delphi, C++Builder)
 

ReactOS Tech Talk (ВМК МГУ, ИСП РАН)

  • 1. Операционная система ReactOS ВНУТРЕННЕЕ УСТРОЙСТВО WINDOWS И ПОЧЕМУ ЖЕ ПРОСТО НЕ ИСПОЛЬЗОВАТЬ ЯДРО LINUX?!
  • 2. ReactOS – это (не) Windows 22 января 1996 – первый коммит ReactOS - это Windows ◦ Выполняет Windows-приложения ◦ Поддерживает Windows-драйвера ◦ Выглядит как Windows ReactOS – это не Windows ◦ ReactOS – Свободное ПО ◦ ReactOS использует другие СПО проекты ◦ Можно сделать “свой собственный Windows”
  • 3. Об авторе Алексей Брагин – Москва, Россия ◦ Разработчик ReactOS с 2003 года ◦ Президент Фонда ReactOS и Координатор проекта ◦ Степень магистра, МГТУ им. Н.Э.Баумана ◦ Преподаватель, кафедра ИУ9, МГТУ им. Н.Э.Баумана ◦ Электронная почта: ALEKSEY@REACTOS.ORG
  • 4. Об авторе ◦ Первый патч в ReactOS: 24 марта 2003 ◦ Первый коммит: 9 апреля 2003 ◦ Всего около 4803 коммитов в ReactOS
  • 6. ReactOS это Windows Для максимальной совместимости ReactOS реализует архитектуру, идентичную Windows ◦ Windows-драйверам нужно ядро Windows ◦ Многие программы (firewalls, antivirus, media players, PDA sync software, etc.) поставляются со специальными драйверами Архитектура Windows существенно отличается от Linux и не так хорошо известна Начнём с основ…
  • 7. Архитектура ОС Абстракция ЦП - времени и контектса (processes, threads, signals, etc.) Абстракция памяти (virtual memory, paging, stacks, heaps, etc.) Разделение между системой и приложениями используя встроенные в ЦП механизмы защиты памяти (user mode vs kernel mode) Разделение между «железом» и приложениями используя встроенные в ЦП механизмы привилегий ввода/вывода Механизмы обхода защит ОС управляемым, безопасным образом (system calls, security subsystem, etc.)
  • 9. Архитектура Linux Монолитное ядро. У ядра нет ABI Модель управления процессами и модель безопасности UNIX Встроенная поддержка сети ◦ Sockets, pipes ◦ select, poll, etc. Абстракции файловой системы (VFS) UNIX API (libc) поверх небольшого количества UNIX-подобных системных вызовов и сигналов Остальные APIs (audio, application setup, desktop environment integration, cryptography, etc.) - de facto стандарты от сторонних разработчиков ◦ Графическая подсистема (X server) – вещь в себе. В ядре есть специальные “backdoors” для прямого взаимодействия X сервера с аппаратуров, чтобы вынести сложность видео-драйверов из окружения ядра
  • 10. Архитектура Linux Интерфейс системных вызовов VFS PM MM Arch Драйвера устройств Сетевой стэк ЦП MMUДиск Устройства libc Библиотеки приложений Приложения X сервер Видеокарта Ядро Системные вызовы Сигналы Прямой I/O User mode Kernel mode Virtual Physical
  • 11. Архитектура Windows (NT) Монолитное ядро (гибридное). У ядра относительно стабильный ABI Архитектура ядра почти идентична дизайну DEC RSX-11 и VMS, с влиянием DOS, OS/2 и Windows 95 ◦ RSX-11, VMS и Windows NT были спроектированы одним и тем же инженером (Dave Cutler) ◦ Первоначально Windows NT разрабатывалась как новое ядро для OS/2 В ядре нет абстракции устройств. Абстракция предоставляется стандартными системными драйверами (class или port драйвера) В самом ядре нет поддержки сети. select/poll – не системные вызовы, а ioctl запрос к “файловой системе сокетов” ◦ Сокеты и пайпы предоставляются специальными файловыми системами ◦ Над этим ещё один уровень абстракции в режиме пользователя: Winsock когда-то был сторонним компонентом (напр. Trumpet Winsock) Графическая и оконная подсистемы в составе ОС (работающие в режиме ядра) со стандартным API Богатое высокоуровневое API всех сортов (криптография, desktop environment, etc.)
  • 12. Особые черты архитектуры Windows Устройства чипсета (таймер, контроллер прерываний, управление питанием, шины, firmware, и т.п.) абстрагируются с помощью компонента ядра под названием Hardware Abstraction Layer (HAL) ◦ ACPI и не-ACPI – просто разные HAL ◦ Порт ReactOS на приставку XBox - обычный x86 ReactOS со специальным XBox-специфичным HAL Сигналы отсутствуют; вместо них standard exception model (“SEH”, которая была на VMS, OS/2 и Tru64) Обратные системные вызовы (callbacks): оконная и графическая подсистемы могут делать обратные вызовы в режим пользователя ◦ В оригинальной реализации (Windows 95) user-mode и kernel-mode части подсистемы работали в разделяемой памяти ◦ Это слишком небезопасно для Windows NT; безопасная но совместимая разделяемая память эмулируется с помощью некоторых «ухищрений» (типа callbacks)
  • 13. Архитектура Windows Kernel Executive HAL ntdll kernel32 gdi32user32 Системные библиотеки Службы DirectX Драйвера устройств win32k Приложения, библиотеки приложений Чипсет ЦП, MMU Устройства
  • 14. Wine и ReactOS REACTOS ЭТО (НЕ) WINE
  • 15. ReactOS это (не) Wine “Раз ReactOS – это только ядро для Wine… ◦ … зачем оно нужно?” ◦ … и почему до сих пор не доделано?” Как всегда, всё немного сложнее, чем кажется на первый взгляд…
  • 16. Wine и ReactOS У ReactOS много общего с Wine, в том числе и исходного кода… ◦ Достаточно общих целей: ◦ Установка Windows приложений ◦ Выполнение Windows приложений … но… ◦ Слишком много разных целей: ◦ Работа на Linux / работа на «железе» ◦ Поддержка Windows драйверов
  • 17. Wine на Linux Windows приложения загружаются только утилитой Wine (Wine loader) Windows приложения и DLL динамически линкуются с системными Windows DLL, реализованными Wine ◦ Большинство Wine DLL – обычные Windows DLL скомпилированные под Linux ◦ Некоторые – внутренние библиотеки Linux, зависящие от других библиотек Linux. Библиотеки Linux прозрачны для Windows приложений – во всех отношениях работают как системные вызовы Служебный процесс (Wine Server) заменяет ядро Windows для управления общими ресурсами
  • 18. Wine на Linux Ядро Linux GNU libc Библиотеки Wine User mode Kernel mode Библиотеки Linux Загрузчик Wine X сервер Wine сервер Windows приложения Wine services
  • 19. Wine в ReactOS Windows приложения загружаются непосредственно ядром ReactOS Windows приложения и DLL динамически связываются с Wine и ReactOS реализаций системных библиотек Windows ◦ Могут быть использованы только те Wine DLL, которые не зависят от библиотек Linux ◦ user32 & gdi32 – особый случай, в ReactOS - «native» реализация, не использующая Wine DLL. ReactOS реализует настоящее ядро Windows ◦ Может поддерживать приложения и драйвера
  • 20. User mode Kernel mode Wine в ReactOS Kernel Executive HAL ntdll kernel32 gdi32user32 System libraries Службы DirectX Windows драйвера win32k Windows приложения
  • 21. Wine на ReactOS: Arwinss Если реализация оконной подсистемы не такая хорошая, почему бы не использовать Wine? Идея привела к эксперименту, результатом которого стала альтернативная Win32 подсистема в ReactOS, которая ◦ Использует почти неизменённые исходные коды модулей USER32 и GDI32 из Wine вместе с некоторыми компонентами Wine сервера ◦ Рабочий прототип был создан одним человеком в течение месяца (существующая «native» реализация подсистемы в ReactOS находится в состоянии разработки многие годы, и всё ещё полна проблем)
  • 23. Arwinss: плюсы и минусы Недостатки такого подхода ◦ Внутреннее устройство далеко от Windows ◦ Многие части работают в режиме пользователя (вообще-то это преимущество!) ◦ Чуть медленнее (решаемо) ◦ Зависимость от Wine Преимущества ◦ Простая синхронизация кода с Wine ◦ Использование кода Wine, который уже проверен в работе ◦ Более-менее определенная архитектура ◦ Fun!
  • 24. Wine и ReactOS: итог Wine предназначен для выполнения Windows-приложений под Linux. Специфичные для Linux зависимости: ◦ … невидимы для приложений ◦ … являются интегральной частью реализации Wine ReactOS предназначен для того, чтобы быть Windows: ◦ Всё, что возможно заимствуется из Wine ◦ То, что нельзя – переделывается правильным образом ◦ Реализация не может быть просто “функционально эквивалентной”: должна быть “бинарно-совместима”, т.к. в Windows всё является API ◦ Не очень много кода других СПО проектов можно использовать ReactOS сложен и незаменим
  • 26. Команда ReactOS Поистине “международный” проект ◦ Основан Jason Filby из Южной Африки ◦ Разработчики из разных стран мира – Евросоюза, России, США, и т.д. ◦ Сейчас, фонд в Российской Федерации, координатор проекта из России, финансовый фонд в Германии, сообщество по всему миру Нет формального обучения ◦ Почти все разработчики изучили внутреннее устройство Windows во время работы над ReactOS ◦ К сожалению для проекта (и к счастью для них), лучших разработчиков забирают на работу в Microsoft и другие крупные компании Очень мало информации доступно ◦ “Inside Microsoft Windows” – справочник по внутреннему устройству ◦ … но этого недостаточно для разработки ReactOS
  • 27. Ядро ReactOS Многие разработчики работают над ядром ReactOS и подсистемами, с переменным успехом Хорошее состояние: ◦ Планировщик, HAL, менеджер процессов и потоков (спасибо Alex Ionescu!) Удовлетворительное состояние: ◦ Подсистема ввода/вывода, менеджер конфигураций (реестр), менеджер безопасности, менеджер памяти Плохое состояние: ◦ Кэш-менеджер, поддержка файловых систем Отсутствует: ◦ Управление питанием Тем не менее, ядро ReactOS…
  • 28. The ReactOS kernel … достаточно совместимо!
  • 29. Оконная подсистема (USER) Проблемы в этой области известны долгое время Много разработчиков пробовали исправить ситуацию и не смогли ◦ Попытки переписать. Одна совершенно другая - Arwinss. Оригинальная реализация в Windows - очень хороший hack… ◦ Оконная подсистема берёт свои истоки в Windows 1.0 ◦ Порт на Windows NT привнёс защиту памяти, но API подразумевает общую память ◦ Несколько ухищрений специально для безопасного симулирования общей памяти – user32.dll не просто библиотека, а часть оконной подсистемы, работающая в режиме пользователя … и очень плохой дизайн ◦ Невозможно дать хорошее, высокоуровневое описание архитектуры ◦ Никто не документирует всю подсистему – официально или неофициально
  • 30. Графическая подсистема (GDI) Тесно связана с оконной подсистемой Намного более простой, лучший дизайн ◦ gdi32.dll частично реализация подсистемы в режиме пользователя, для запуска дисплей-драйверов режима пользователя (напр. драйвера принтеров) ◦ Алгоритмы рисования хорошо изолированы, имеют простой API ◦ Весь код рисования шрифтов в ReactOS заимствован из FreeType (сторонний СПО проект) Усилия концентрируются на более сложной (и видимой) оконной подсистеме. Однако, DirectX графика – это ещё одна совершенно другая область…
  • 31. Сеть Сетевой стэк в Windows располагается вне ядра … но стэк разделён на независимые слои, с документированными API между ними: ◦ Winsock ◦ TDI ◦ NDIS Каждая часть должна быть реализована Windows-совместимым образом … но можно использовать сторонние СПО проекты с помощью специальной Windows-совместимой «обёртки» ◦ Например, мы используем библиотеку lwIP для реализации стэка TCP/IP
  • 32. ReactOS настояищее и будущее НАД ЧЕМ РАБОТАЕМ СЕЙЧАС, А НАД ЧЕМ СОБИРАЕМСЯ
  • 33. Поддержка драйверов Сторонние драйвера работают неплохо ◦ Видео драйвера, в частности Сложные слои абстракции нуждаются в работе ◦ USB ◦ Аудио ◦ Сетевые карточки Драйвера файловых систем (включая сетевые ФС) требуют много работы в ядре над “большой тройкой” (кэш менеджер, менеджер памяти, поддержка файловых систем)
  • 34. USB Реализованы основы USB-стэка Windows ◦ Дизайн совместим с Windows 2003 SP1 ◦ USB-клавиатуры, мышки - работают ◦ Некоторые «флэшки» - работают ◦ Список поддерживаемых устройств доступен на сайте: https://www.reactos.org/wiki/Supported_USB_Devices
  • 35. Аудио подсистема Она работает! И достаточно совместима Сложно найти людей с опытом и знаниями звуковой подсистемы Windows
  • 36. Подсистемы ядра Кэш менеджер – идёт работа Порт на ARM принёс много позитивных результатов для общей части менеджера памяти Работа над улучшением качества в общем
  • 37. Средства разработки Основной компилятор - gcc ◦ Мы внесли значительный вклад в портирование gcc на Windows (MinGW), т.к. мы самый крупный пользователь этого порта (и находим там очень много ошибок!) ◦ Никто не предполагал, что MinGW будет компилировать ядро! ◦ MSVC поддерживается и активно развивается ◦ В перспективе – LLVM, работа уже идёт • ReactOS использует среду CMake – Удобнее, чем обычный make – Лучше интеграция со средствами разработки под Windows – Кросс-платформеннная – Не зависит от компилятора
  • 38. В заключение ЧТО МЫ СЕГОДНЯ УЗНАЛИ?
  • 39. Студенты и ReactOS ReactOS – наиболее продвинутая открытая реализация Windows- совместимой ОС Лучше, чем WRK для обучения основам ОС ◦ Нет доступа к исходным кодам Microsoft® ◦ Использование СПО для сборки и тестирования ◦ Большое сообщество Студенческие проекты полезны для ◦ Поиска ошибок в коде ◦ Реализации отсутствующих или неправильно сделанных частей
  • 40. итог Вообще, Windows – достаточно неплохая операционная система! ReactOS… ◦ … это (не) Windows: а 100% реализация Windows с открытым исходных кодом ◦ … это не Linux: поддерживает Windows-драйвера ◦ … это не Wine: использует Wine, но Wine – только часть ReactOS ReactOS сложен и уникален ReactOS – это очень много работы
  • 45. Screenshots. Arwinss in Windows 2003 using X Windows driver and ReactOS Winlogon