Как я написал консольную «ОС» на C++17 со своим Driver SDK после 27 версий на батниках
Привет, Пикабу!
Хочу рассказать историю одного эксперимента, который зашёл слишком далеко. Около двух лет назад я ради фана начал делать маленькую консольную операционную систему под названием ARSLANIUS.
Первые 27 версий были написаны на чистых батниках (.cmd). Это как-то работало, но было дико медленно, хрупко, а расширять систему стало настоящим адом. Поэтому я взял и переписал всё с нуля на native C++17 (x64).
И вот что получилось в текущей ARSLANIUS 28:
Полная портативность: Один доверху забитый .exe файл. Работает из любой папки, не требует установки.
Фичи эмуляции ОС: Свой загрузчик (Boot Manager) с Safe Mode, реестр конфигурации (REG.cfg), система пользователей с ACL (5 уровней привилегий + команда sudo) и фоновые службы (SysPulse, NetMonitor).
Среда восстановления: Свой Recovery Environment, в котором есть Startup Repair, создание бэкапов системы и 19 кастомных видов BSOD (синих экранов смерти).
Свой Driver SDK: Самая пушка. Любой желающий может написать свой драйвер под мою систему! Это обычная C++ DLL, скомпилированная в формат .asd. Она закидывается в папку Drivers и при следующем запуске регистрирует новые команды в консоли без пересборки самого ядра.
Интерактивный квест при первом запуске (OOBE):
Чтобы вы понимали уровень проработки: когда пользователь запускает софт первый раз, система выдает реальный BSOD 0x00000001a CONFIG_ROOT_NOT_FOUND. Из него юзер переходит в Recovery Environment, запускает Startup Repair (который реально генерирует структуру папок и конфигов), система перезагружается и вылетает окно OOBE (первой настройки).
И да, в этот момент из динамиков начинает играть легендарная музыка установки Windows XP (title.wma), которую я перегнал в .wav и зашил прямо внутрь .exe через файлы ресурсов ради портативности! Звуки входа и выхода из XP при логине пользователей тоже на месте.
Почему C++17 и как это собрано:
Мне хватило std::filesystem. Всё остальное — сырые указатели, ручное управление памятью и WinAPI. Никаких тяжелых сторонних библиотек.
Ключевой момент — я компилирую проект с флагом /MT (статическая линковка рантайма). Исполняемый файл из-за музыки весит побольше, зато зависимости равны нулю. ARSLANIUS без проблем запустится даже на чистой Windows 7, где никогда не было Visual C++ Redistributable.
И напоследок:
Мне 11 лет. Родился 22.09.2014. Первую версию на батниках начал писать в 9 лет, сейчас перешёл на плюсы. Я пишу это не ради хвастовства, а чтобы показать, что консольный софт можно пилить ради хардкорного фана в любом возрасте.
Для особо одаренных, у кого сразу возникнут вопросы: Батя сейчас в армии и код писать физически не может. Из родственников есть ещё 17-летняя сестра, но она с компом строго на «Вы», так что проект полностью мой. Для тех, кому нужен мануал — в Бут-меню просто жмите цифру 6, там встроенная дока.
Код полностью открыт, документация API на английском готова.
Ссылка на GitHub: https://github.com/Armsoup/ARSLANIUS_C-Plus_Plus
(Все ссылки на Telegram-чат для обсуждения и копию репозитория лежат в README).
Драйверы приветствуются! Задавайте любые вопросы про архитектуру, WinAPI, линкер или то, как я мучился с переходом от Batch — на всё отвечу в комментариях!



