Пару лет назад в сети появилась информация о проекте Serenity — Unix-подобной операционной системе для архитектуры x86 с собственным ядром и винтажным интерфейсом. При этом возможности операционной системы заявлялись вполне современные.
Это ОС, написанная с нуля, которая не базируется на коде уже существующих операционных систем. Авторы SerenityOS активно работали над поставленной целью — создание новой операционной системы, пригодной для выполнения большинства привычных нам задач. Код системы пишется на С++. Сейчас проект достиг нового уровня развития — в среде ОС уже можно поработать, составив собственное мнение о SerenityOS. Подробности о новинке — под катом.
Очередной дистрибутив Linux?
Нет, авторы проекта утверждают, что система собиралась практически с нуля, без использования кода уже существующих ОС. Насколько можно судить, так и есть. У системы собственное ядро, графическая оболочка, диспетчер задач и прочие элементы и сервисы.
В самом начале разработки авторы проекта импортировали несколько функций стандартной библиотеки С и NetBSD. Но с течением времени от постороннего кода избавились.
Для того, чтобы собрать систему, нужно клонировать проект с git на свою машину и затем скомпилировать ее из исходного кода. В итоге пользователь выполняет запуск специфической виртуальной машины SerenityOS.
Авторы утверждают, что ОС заимствует несколько концептуальных идей у FreeBSD, включая лицензию системы и систему управления ПО ОС. Разработчики портировали для своей системы Quake и ретро-платформер VVVVVVV. Есть еще и рабочий порт Nesalizer для любителей эмуляции. Звук работает отменно — проблем с ним нет.
SerenityOS — не Linux и не BSD
Система действительно написана с нуля, причем прогресс идет относительно быстро, если оценивать скорость разработки парочки других похожих проектов. Сравнивать можно, например, с Haiku — проектом, который ставит своей целью воссоздание BeOS и еще одним проектом — TempleOS. Последний — довольно странный проект, разработанный американским программистом Терри А. Дэвисом с диагнозом «шизофрения».
На фоне похожих инициатив SerenityOS — «теплая ламповая» операционная система, с которой вполне можно работать.
Зачем написали эту систему? Этому есть две причины:
- Автор хотел получить обычную ОС, написанную «под себя» и свои потребности.
- Разработчик этой системы — излечившийся наркоман, который решил начать разработку масштабного проекта, чтобы отвлечься от своей вредной привычки.
Сейчас над этой ОС работает не один человек, а целая команда контрибьюторов — около 500 участников сообщества. На странице проекта на GitHub можно отследить работу примерно полутысячи человек, которые вносят посильный вклад в развитие проекта. Сейчас к команде присоединяется все больше людей, так что, вероятно, в скором времени можно ожидать ускорения разработки системы.
Можно ли полноценно работать в среде новой ОС?
Если кратко, то не совсем — операционную систему еще не доработали. Но дело осталось за малым — разрботчикам предстоит решить последние несколько проблем, после чего операционную систему можно будет выпускать «в люди». До этапа «полноценная и безглючная операционная система» остался еще год или два — в зависимости от активности рабочего дня команды создателей.
Одна из наиболее критичных проблем — работа браузера. Многие сайты и сервисы «падают» в нем, либо выглядят и работают некорректно, что признают и сами разработчики. Они пока не могут перенести современный браузер вроде Firefox или Chromium на новую ОС. Если есть желание, можно помочь и написать новый браузер с нуля. Текущий настолько слабый, что он пока не может даже воспроизводить видео с YouTube.
Основные достоинства
Новая операционная система очень быстрая и стабильная, если иметь в виду работу завершенных функций. Сейчас ядро ОС не поддерживает симметричную многопроцессорную обработку (SMP) — его специальная виртуальная машина использует только один поток физического процессора вашего хост-компьютера.
Модель системы — однопоточная. Чуть позже разработчики собираются добавить поддержку многоядерных процессоров. Сейчас она может работать с ними, но недолго — всего несколько минут.
Система интуитивно понятная, интерфейс ее коррелирует с интерфейсами 90-х, разобраться может даже ребенок. Unix-подобная консоль, трассировка стека и диспетчер оборудования выглядят весьма винтажно, если так можно выразиться.
Интересный момент — если в консоли ввести команду, которой не существует, то экран консоли кратковременно становится красным. Еще плюс — темы позволяют сделать SerenityOS похожей как на Win 95/98, так и на Windows 2000. Ну и есть еще HEX-редактор, обратите внимание.
SerenityOS, к слову, можно собрать и в Windows Subsystem for Linux — так что круг пользователей может быть достаточно широким.
На что похожа система?
По умолчанию — на Windows NT, в ней даже есть набор тем, которые выглядят, как те, что поставляла корпорация Microsot в 90-х. Разработчики подготовили множество системных утилит — все они работают, как и заявлено. Файловая система определяется как Ext2FS — здесь, наверное, стоило внедрить что-то более новое, но разработчикам виднее.
Наиболее положительный момент заключается в том, что из таких проектов, как TempleOS, Haiku, ReactOS новая операционная система выглядит почти завершенным проектом. Да, пока еще нет инсталлера, загружаемого ISO, но установить ее достаточно просто, а это — уже положительный момент для пользователей.
Список фунций на момент 2019 года впечатлял, поскольу ОС предоставляла такие возможности, как:
- Вытесняющая многозадачность;
- Многопоточность;
- Композитный и оконный сервер WindowServer;
- Собственный фреймворк для разработки графических приложений LibGUI с набором виджетов;
- Среда для визуального проектирования интерфейса приложений;
- Сетевой стек с поддержкой ARP, TCP, UDP и ICMP. Собственный DNS-резолвер;
- Файловая система на основе Ext2 (собственная реализация на C++);
- Unix-подобная стандартная Си-библиотека (LibC) и набор типовых пользовательских утилит (cat, cp, chmod, env, kill, ps, ping, su, sort, strace, uptime и т.п.);
- Оболочка командной строки с поддержкой потоков (pipe) и перенаправления ввода/вывода;
- Поддержка mmap() и исполняемых файлов в формате ELF;
- Наличие псевдо-ФС /proc;
- Поддержка локальных Unix-сокетов;
- Поддержка псевдотерминалов и /dev/pts;
- Библиотека LibCore для разработки эффективных обработчиков событий (Event loop);
- Поддержка библиотеки SDL;
- Поддержка изображений в формате PNG;
- Набор встроенных приложений: текстовый редактор, файловый менеджер, несколько игр (Minesweeper и Snake), интерфейс для запуска программ, редактор шрифтов, менеджер загрузки файлов, эмулятор терминала.
Сейчас функций и возможностей гораздо больше, поэтому если есть желание попробовать новинку, стилизованную под 90-е годы прошлого века, вы вполне можете попробовать.
Разработчикам предстоит решить еще несколько задач, включая добавление поддержки GPU и больших мониторов с высоким разрешением.
Если есть желание более подробно ознакомиться с системой, то вот канал YouTube, на котором разработчики регулярно выкладывают новые видео ОС. А вот GitHub проекта, где много всего интересного.
Комментарии (60)
symbix
19.08.2021 04:48+25"Если есть желание, можно помочь и написать новый браузер с нуля."
:)
Современный браузер написать на порядок более сложно и трудоемко, чем операционную систему.
batyrmastyr
19.08.2021 08:32+13Тоже ржал в голос с фразы
Текущий настолько слабый, что он пока не может даже воспроизводить видео с YouTube.
Всего-то переписать/перенести вагон декодеров десятка форматов видео, сделать поддержку MPEG-DASH и HLS.
krankenstein
19.08.2021 08:47+3Так я не понял, она на голом-то железе запустится? Или чтобы эту ОС использовать, надо иметь и настоящую?
anger32
19.08.2021 23:06+2Прокомментирую увиденное по своему профилю, глядя вот на это:
https://github.com/SerenityOS/serenity/blob/master/Kernel/Graphics/Intel/NativeGraphicsAdapter.cpp
Самопальный графический <<стек>> в виде голого фрейм-буффера есть. Зрелость его по вменяемым меркам собственной графики близка к 0. Для Intel GPU есть поддержка ровно 1 контроллера 2006-2008 года. Драйверная модель статическая, чисто регистровая. Ни прерываний, ни аппаратного курсора, менеджмента памяти, никакого задела даже на 2D акселератор (а он там простейший, строк в 100 кода можно уложиться, если бы был VMEM-менеджмент, но...), масса fixme даже на 645 строк в мастере. Зато есть чтение EDID через GMBUS.
Посоны, видимо, глянули на размеры настоящих драйверов и решили забить в пользу VESA/int10 и UEFI mode-switcher-ов. Одним словом с драйверами вах.
NeoCode
19.08.2021 10:42+1Хорошо, респект авторам. Такие проекты всегда вызывают уважение.
Для современных систем конечно самое главное — браузер, поэтому ждем порта хромиума или файрфокса (и ТорБраузера заодно) :) А одно из возможных применений — «чистая система» (под которую с огромной долей вероятности не будет вирусов и эксплойтов) для выхода в инет из виртуалки — для задач с высокими требованиями к безопасности, типа интернет-банкинга.encyclopedist
19.08.2021 11:47+1Serenity уже несколько раз выступала в роли мишени на CtF соревнованиях, так что эксплойты под неё точно были.
courser
19.08.2021 10:52+15Чёрт, как я соскучился по нормальному интерфейсу. Где кнопки это кнопки, а чекбокс это чекбокс, а не ползающий пупырь с меняющейся контекстной поясняющей надписью, не то в прямой, не то в обратной логике.
Nikita_64
19.08.2021 11:20+2Согласен. Особенно раздражают элементы управления, которые становятся видимыми только если на них навести курсор (вертикальная прокрутка в панели навигации по документу MS Word 365). Кроме этого есть видимые элементы, но непонятно, что на них можно нажать, пока не подведешь курсок.
Earthsea
19.08.2021 13:14+1Чёрт, как я соскучился по нормальному интерфейсу. Где кнопки это кнопки, а чекбокс это чекбокс, а не ползающий пупырь с меняющейся контекстной поясняющей надписью, не то в прямой, не то в обратной логике.
На любой дистрибутив Линукса можно накатить любую DE и в ней что угодно под себя настроить. Обычно в них по умолчанию все и так нормальное. Вот LXDE например:
fishHook
19.08.2021 11:06+7операционную систему еще не доработали. Но дело осталось за малым
Оптимизм — это, наверное, здорово, но когда взрослые дядьки демонстрируют незамутненную подростковую наивность, это уже по-другому называется. Как тут не вспомнить многострадальную ReactOS, которая последние десять лет «вот-вот и будет готова». Автор поста, вы серьезно считаете, что продемонстрированное поделие при всем уважении к труду авторов, которое (насколько я понял) хоть как-то запускается пока только на виртуальной машине, не умеет в многопоточность, не работает на современный процессорах, не имеет набора драйверов и утилии и пишется командой энтузиастов (я так понимаю, речи о полноценном тестировании не идет) хоть в каком-то обозримом будущем способно выйти в релиз?encyclopedist
19.08.2021 11:52+3У авторов серенити нет никакой наивности. Они пишут это не для того, чтобы оно когда-нибудь стало продакшен-системой, а для развлечения.
fishHook
19.08.2021 12:04+3А статью написал прям автор серенити? Я в общем-то с авторами и их целью и не борюсь. Меня подбешивает детсадовский уровень статьи рекламирующий компанию Селектел.
авторы проекта утверждают, что система собиралась практически с нуля
Денис Попов тоже что-то подобное утверждал. Наверное, не стоит все подряд утверждения транслировать безо всякой аналитики. Среди комментаторов (смотри комменты) тут же нашелся человек, который потрудился посмотреть в исходники и нашел тонну говнокода. У автора статьи на это мозгов не хватило, зато хватает их на прогнозы типа «дело осталось за малым».Tangeman
19.08.2021 16:46+1нашел тонну говнокода
И что? Это не противоречит "собиралась практически с нуля" — Попов просто взял дистр линукса и ничего сам не писал, а тут всё самописное, достаточно посмотреть на этот самый код, его качество это уже другой вопрос.
Да и вообще насчёт говнокода — вы в ядро линукса когда-нибудь заглядывали? Там его тоже достаточно — даже сейчас, про первые версии я уже молчу, но ничего, работает ведь, шагает по планете. Можете для разнообразия глянуть на код windows (есть в сети), вообще страх и ужас — но это не мешает ему быть #1 в десктопах.
ereinion
19.08.2021 12:59+2Когда я слышу «Unix-подобная система с интерфейсом в стиле 90-х» я представляю интерфейс CDE. Зачем же делать интерфейс в стиле винды? Не понимаю!
NeoCode
19.08.2021 13:41Кстати интерфейс CDE тоже нормальный, как и интерфейс старой винды. Погуглил картинки — приятно смотреть (хотя я никогда им не пользовался, так что списать на ностальгию не получится).
ereinion
19.08.2021 14:03Он как раз нормальный и интересный (довелось пощупать и его и его предшественника — HP VUE, недавно обзор постил даже). Я не поддерживаю именно имитацию интерфейса винды — их было уже слишком много и нет никакой самобытности у системы в результате.
deepform
20.08.2021 11:59Объясните, пожалуйста, мне глупому, кому и зачем нужна ОС без софта, ну кроме как для развлечения?
Wingtiger
20.08.2021 20:47а ещё Колибри есть. И #КОСМОС для создания своей оси. Тоже без нормальных дров и их там никогда не будет.
Vilgelm
23.08.2021 03:02Колибри/Менуэт имеют преимущество в виде своей скорости и возможности запуска на чем-то типа Pentium I, 8 MB RAM. При этом она запускается на реальном железе, лично пробовал. Я удивлен что ей до сих пор не нашли реального применения в каких-нибудь встраиваемых устройствах.
v1a0
23.08.2021 15:58Не мне об этом говорить, но не кажется ли вам, что это изобретение (очередного) велосипеда? Да классно, да идейно, да лучше чем ничего, но это же столько труда и все ради "лофтовой" оси?
Anterenoire
23.08.2021 15:58+3Почему никто вместо очередного дистрибутива линукса не напишет ту самую киношную ОС с огромными прогрессбарами и анимацией интерфейса? :)
Mozhaiskiy
30.10.2021 17:15+2Я тут из ностальгических чувств по BeOS'у нашёл старый ноут и неделю жил на нём под Haiku, у которой и степень готовности, и число софта, и поддержка железа много выше, чем у этой Serenity. Думал, раз я доначу иногда в Хайку, пусть будет у меня ретро-пишущая машинка для записи мыслей, которую не жалко таскать в лес на прогулку. Увы. Классно внешне, UX и хоткеи маковские, на радостях скринов наделал, но в реальности беда: ОС падает, крешится, нормального браузера с поддержкой шрифтов так и нет (в Web+ не работает добрая половина сайтов из-за этого), даже текстового редактора нормального нет (StyledEdit и Pe конечно есть, но хочется русской орфографии, подсветки синтаксиса MarkDown, вот этого всего, к чему уже привыкли). А Be-софт устарел настолько, что пользоваться нельзя: GobeProductive и AbiWord уже совсем динозавры. По факту, вся разработка под Haiku сейчас свелась к порту *nix софта на QT, нативного ПО крайне мало, а превращать экзотическую ОС в кривой лончер все того же LibraOffice как-то глупо, проще уже линукс накатить.
Короче, три дня оргазмировал от возвращения в "тот 1998-й", но сдался — некрофилия это всё. В 2021-м уже хочется ретины, сглаживания шрифтов, хорошей типографики и отзывчивого UI без пиксель-хантинга в элементы 90-х. Ламповая, но некрофилия.Боюсь, что большинство "альтернативных ОС" сегодня обречены либо на порты софта с linux, либо на эмуляцию Windows API, либо будут "голыми", а тогда встаёт вопрос: нафига они нужны, эти ОС?
И написать "свой браузер" в 2021-м году уже не под силу никому, слишком много там всего нужно, это посложнее, чем ОС написать. Максимум, будут порты какого-нибудь устаревшего на несколько лет Chromium / WebKit, если смогут его пересобрать под другой платформой вообще.
А скрины с Хайку клёвые. Ламповые :)
Gordon01
Прикольно, конечно, но монолитное ядро и C++ в 2021?
Воу, плюсовики опять не смогли в многопоточность. Неожиданно, конечно. Ну ничего, пару лет в дебаггере и %feature_name% точно-точно заработает без падений на 8 ядрах.
Нечитаемо.
Индекс всегда вычисляется верно. Я гарантирую это.
А как вам такое?
Рад за челочека, что он излечился и делом занимается. Но пользы, скорее всего, никакой
bonta
Ну так-то С++ живее всех живых и нет причин не писать на нём в том числе и новый проекты, особенно с выходом новых стандартов. Если для вас это не читаемо и у вас аллергия на этот ЯП, пишите на Питоне, или становитесь Растосектантом, вставляющим своё важное мнение в любоё место, даже когда не спрашивают :)
0xd34df00d
Причина не писать на нём — непознаваемость языка и невозможность не делать ошибки.
tzlom
Эквивалентную замену предоставите? Все мы конечно в курсе что ядро можно писать на СИ, но в 21м году хотелось бы чтобы компилятор за пользователя что-нибудь все таки делал.
Еще хочется увидеть ЯП на котором невозможно делать ошибки.
0xd34df00d
Зависит от ваших констрейнтов. В зависимости от них — от раста через ivory или ats до экстракции из кока.
Любой, где можно формально доказывать вещи (то есть, где есть завтипы и консистентная логика). Там ошибки сводятся к ошибкам в спеке уровня «заказчик хотел самолёт, а мы ему сделали пароход». Ну и к модели внешнего мира, конечно.
Впрочем, понятно, что ошибки — это спектр, и скорее будет проблемой найти язык, где допустимы все те классы ошибок, что и в плюсах (от memory safety до внезапно стреляющего UB, вырезающего по-тихому целые функции или вызывающего то, что вы не вызывали).
tzlom
И на каком из этих языков можно написать ОС не прибегая к СИ ?
Gordon01
А что плохого в написании ядра на Си?
Если не делать монолит и не тащить драйвер мышки в ядро, вполне осиливаемая задача.
Не нравится Си - можно на расте написать.
Rijenkii
Rust:
* https://os.phil-opp.com/ -- Туториалы по написанию простенькой ОСи на Rust (+ немного ассемблера, ЕМНИП);
* https://gitlab.redox-os.org/redox-os/redox -- Настоящая ОСь, написанная полностью на Rust.
mayorovp
На Rust точно можно.
DerRotBaron
Без Си не проблема. Вот без ассемблера/машинного кода вы вряд ли справитесь на большей части архитектур, но это и для Сей ровно так же справедливо
Refridgerator
MacIn
Ох, сейчас словлю тонну тухлых помидоров, но как насчет Object Pascal? ООП есть, на основе FPC легко сделать необходимые конфигурации сборки, нужную линковку. Нет UB, все явно.
Я сейчас переписываю свою хоббийную ОС на Pascal, но столкнулся с проблемами из-за нестандартной модели памяти (сегментирование против плоской). В 99% случаев (проектов) этой проблемы нет, сейчас плоская модель повсюду.
bonta
не знаю на счёт UB, но вот в Delphi/Pascal можно вызвать чисто чисто виртуальный метод. Т.е. видимо можно создать объект, имеющий не полную реализацию, и словить исключение. Помню не редко их ловил в BSPlayer. В Си++ например так низзя, будет ошибка компиляции.
MacIn
Эм, так зачем так сложно в ногу стрелять? Просто объявите переменную-объект и работайте с ней, не инстанцировав объект. Там не только один виртуальный метод будет отсутствовать.
Delphi выдаст предупреждение на этапе компиляции, а уж собирать проект с предупреждениями — это так себе идея.
[dcc32 Warning] Example.dpr(18): W1020 Constructing instance of 'TExample' containing abstract method 'TExample.SomeMethod'
0xd34df00d
В C++ на самом деле очень легко вызвать чистый виртуальный метод, достаточно сделать это в конструкторе, и ошибки компиляции не будет.
gatoazul
Тогда уж Оберон.
0xd34df00d
Прикольно, два почти одинаковых цикла. Почему бы не сделать что-то такое, непонятно.
pvsur
del
0xd34df00d
А вы булевых параметров для своих функций тоже избегаете, и пишете два раздельных варианта — один для true, другой для false, даже если они отличаются ровно одной деталью? Ну, чтобы было чётко разделено поведение.
Оно не ради профита в производительности.
tzlom
Ну на пример потому что в оригинальном коде первое условие еще и функцию завершает.
0xd34df00d
Я предположил, что после второго цикла там тоже
return
, просто неявный ввиду закрывающей фигурной скобочки (что имеет смысл из общих соображений). Если там этого неявногоreturn
нет, то это ещё больший ад, и функцию надо дробить.Gordon01
Да там правда два одинаковых цикла, но под разными условиями https://github.com/SerenityOS/serenity/blob/b91df26d4a14c2721d1920e76552012864c97790/Kernel/Storage/AHCIPortHandler.cpp#L34
После второго функция завершается.
Возможно, чел хотел ветвление из цикла убрать, чтобы "добавить скорости"... но в 2021 это так не работает
NeoCode
Современные плюсы вообще имеют плохочитаемый синтаксис. Вероятно, это наложение snake_case стиля и длинных (в т.ч. шаблонных) имен и выражений.
cyberzx23
С++ не заставляет вас писать змеёй. Пишите хоть верблюдом - всё скомпилируется.
VioletGiraffe
Код действительно плохой, С++ здесь ни при чем. Автор — не профессиональный программист, если можете лучше — причешите и сделайте pull request.
usa_habro_user
Ну, как "никакой"? "Хайпа" срубил, 28K подписчиков на YouTube (немного, конечно, но на пиво и сигареты хватит, AFAIK). Ну, и, самое главное, видимо - "кайф" получает от работы над подобным проектом.
axe_chita
Чем бы человек не тешился, лишь бы не сорвался обратно. А так сплошной позитив: у автора любимое дело, у фолловеров интересное наблюдение за автором, для страдающих наркоманией прямой пример того что выход есть.
bugaevc
Система не однопоточная.
Видимо, это сюда перекочевало из ошибки автора обзора на Ars Technica. Имелось в виду, что пока поддерживается использование одного ядра процессора. Поддержка SMP есть, но пока работает не очень стабильно.