Говорят, что в спортзале сильнее всех выкладываются бывшие алкоголики и наркоманы, они работают из последних сил. И это наблюдение не только из спорта, но и из других сфер жизни. Если люди склонны к зависимости, это может проявиться в разных увлечениях, куда они погружаются с головой: трудоголизм, женщины, хобби, гурманство, коллекционирование и т. д. Каждому делу они словно отдаются целиком.

Взять к примеру шведского программиста Андреаса Клинга (Andreas Kling). В 2018 году он вышел из государственной клиники реабилитации наркоманов после трёхмесячного курса — и в качестве хобби начал разработку операционной системы SerenityOS. Нужно было чем-то занять свободное время и избавиться от посторонних мыслей. Создание новой ОС вполне подходит для такой задачи.

За несколько лет SerenityOS стала одним из крупнейших опенсорсных проектов в мире с тысячами контрибуторов. Приятный интерфейс в стиле 90-х, Unix-подобное ядро и лучшие идеи из других ОС — вот рецепт успеха.



До создания SerenityOS Андреас Клинг вёл нормальную карьеру разработчика, программировал на C++ в компаниях разного размера, в том числе работал в Nokia и Apple над браузерным движком WebKit. Удалённая работа на Apple из Швеции привела к появлению вредных зависимостей, а переезд в Калифорнию и график с 10 до 22 усугубили ситуацию. Иногда он употреблял алкоголь и наркотики прямо в офисе с обеда.

После возвращения в Швецию и трёхмесячного лечения в клинике Андреас остался безработным.

«Без наркотиков или других пороков, чтобы скоротать время, дни тянулись невероятно долго, — пишет он. — В конце концов я обратился к программированию, поскольку оно всегда было моим главным интересом в жизни». В доме у дедушки как раз был древний компьютер 2006 года, на котором вентилятор коротил материнскую плату, но если наклонить системный блок под определённым углом, он всё-таки мог загрузиться. В трезвой жизни программирование стало другим, по ощущениям, словно в детстве: «Меня всегда интересовали низкоуровневые вещи, поэтому я начал возиться с некоторыми из них. Написал небольшой парсер исполняемых файлов ELF. Потом браузер файловой системы Ext2… И небольшой фреймворк GUI с циклом событий… Из этих проектиков и начала формироваться операционная система». Всё это оказалось крайне терапевтической штукой. Андреас выбрал название Serenity («душевный покой»), чтобы всегда помнить одноимённую молитву:



Общая идея заключалась в том, чтобы создать ОС мечты для ежедневного использования. Она должна сочетать в себе две компьютерные парадигмы: графический интерфейс 90-х и идеальную консоль Unix конца 2000-х.

«Когда я работал в Apple, мне очень нравилось, что большая часть ПО создаётся внутри компании. Это не только позволяло создавать очень тесные интеграции, но и делало систему чрезвычайно удобной для разработчиков. Вы всегда могли найти экспертов где-то поблизости. Я подумал, что могу попробовать привнести то же самое в мир опенсорса, и решил, что SerenityOS не будет лоскутным набором из сторонних пакетов — нет, мы всё напишем сами! От ядра до веб-браузера и всего, что между ними».

Когда Андреас устроился на работу, он продолжил заниматься проектом в свободное время. Вплоть до 2021 года, когда появилась возможность уволиться и полностью посвятить себя любимому делу: «Это стало возможным благодаря чрезвычайно щедрой поддержке, которую я получаю от вас через Patreon, GitHub Sponsors и PayPal! Мне очень повезло, что я пользуюсь доверием и поддержкой стольких людей. Огромное вам всем спасибо!!!»

На момент увольнения в 2021 году Андреас получал чуть больше $2000 пожертвований в месяц, а также вознаграждение от YouTube ($150 в месяц) и продажи мерча SerenityOS ($100). В дальнейшем доходы постепенно росли, до $4200 в октябре 2022-го и т. д. Главное, заниматься любимым делом, сохраняя душевное и физическое здоровье, а деньги придут.

В твиттере он раньше положительно отзывался о Copilot как помощнике программирования на С и С++. Учитывая огромный объём работы, когда он практически в одиночку создавал с нуля операционную систему и браузер, никакая помощь не будет лишней. Возможно, сейчас он использует и других ИИ-помощников для написания простого кода, где не требуется особый талант. Это может частично объяснить его потрясающую работоспособность.

На канале YouTube Андреас обсуждает не только SerenityOS, но и другие программистские темы, в том числе рассказывает забавные истории со своих прошлых работ, хотя в последние годы традиция «разговоров за рулём» прекратилась. В этих выпусках он даёт советы, как сохранять концентрацию внимания и фокусироваться на текущих задачах, чтобы не впасть в прокрастинацию. Как и Линус Торвальдс, он в разработке предпочитает не использовать дебаггер.

В одном из интервью Андреас говорит, что SerenityOS — это просто способ получать удовольствие от программирования для него и для всех, кто принимает участие в этом проекте.

▍ SerenityOS


Первые полгода Клинг работал в одиночку, а потом выложил наработки в интернет и предложил поучаствовать, кому это интересно. Первый коммит датируется 18 октября 2018 года. Тогда репозиторий включал четыре компонента:

  • служебная библиотека AK;
  • загрузчик исполняемых файлов ELF;
  • парсер файловой системы ext2;
  • простой набор инструментов GUI поверх SDL.

Это были четыре маленьких отдельных проекта, с которыми Андреас возился на С++, просто чтобы занять время и снова найти себя. Он ещё попытался написать ядро x86 на C, но оно не очень получилось.

Первый скриншот того, что впоследствии превратится в SerenityOS:


Тестовый GUI поверх SDL в Linux:



Первая загрузка GUI на собственном ядре, январь 2019 года:



Разработка шла в быстром темпе. В феврале автор написал FontEditor и Clock, а также портировал GNU bc:



Через пару дней добавил поддержку обоев и программу top:



… потом были менеджер файлов и менеджер процессов, сетевой стек, IRC-клиент, инструмент VisualBuilder для программирования GUI, первая попытка портировать GCC (частично успешная), графический редактор PaintBrush, первая версия браузера и т. д. Каждая из перечисленных программ занимала несколько дней или недель разработки. Ежемесячно автор выкладывал видеоотчёт о проделанной работе. Так прошёл первый год, потом второй, третий и т. д.



После анонса на Reddit новая экзотичная ОС приобрела известность и популярность. Как уже упоминалось выше, в мае 2021 года Андреас уволился с работы, чтобы всё свободное время уделить разработке.

Один из скриншотов от 2021 года:



После трёх лет существования SerenityOS стала проектом его жизни. На помощь в разработке пришло большое сообщество энтузиастов.

На сегодняшний день ОС поддерживает набор инструкций x86-64, собственное ядро и множество сложных приложений в комплекте, включая собственный веб-браузер Ladybird и интегрированную среду разработки (IDE).

SerenityOS стремится быть современной Unix-подобной операционной системой, по внешнему виду и ощущениям напоминающей операционные системы 1990-х годов, такие как Windows и Mac OS того времени. Включение в систему стороннего кода не приветствуется, здесь принято писать всё своё.

Например, веб-браузер не использует существующий движок вроде WebKit, а собственный LibWeb. Впрочем, есть коллекция портированного ПО, в том числе GCC, Git и Doom, с разным уровнем функциональности.



Разработка не придерживается графика; как таковых релизов не существует. Кроме того, не распространяются бинарные дистрибутивы: предполагается, что все пользователи будут собирать систему из исходников.

Система написана на языке, который автор называет Serenity C++ — вариант C++, где отсутствуют исключения и используется собственная стандартная библиотека.

Учитывая значение проекта для Андреаса Клинга удивительно было узнать, что в июне 2024-го он объявил об уходе с поста «великодушного пожизненного диктатора» (BDFL).

▍ Ladybird


Благодаря помощи энтузиастов в последние два года он смог практически полностью сконцентрироваться на разработке браузера Ladybird. Из простой программы для просмотра HTML тот превратился в настоящий кроссплатформенный браузер (Linux, macOS и Windows под WSL). Сейчас Андреас уделяет всё внимание доработке Linux-версии. Он так погрузился в это дело, что уже и не может вспомнить, когда писал какой-то код для SerenityOS, не связанный с Ladybird.

Как мы уже упоминали, Андреас работал над движком WebKit в компании Apple. В биографическом разделе на личном сайте он пишет: если вы сейчас используете какой-то браузер, «высока вероятность, что он работает немножко быстрее благодаря мне». То есть опыт у него есть.

Теоретически, Ladybird — это полностью независимый браузер на собственном новом движке, который основан на веб-стандартах. Но сейчас он находится в состоянии пре-альфа и подходит для использования только разработчиками (инструкции по сборке):



Так что теперь сообщество SerenityOS разделяется на две группы: те, кто работает над ОС, и те, кто работает над браузером. Ladybird теперь считается полноценным независимым проектом в новом репозитории с фокусом на Linux и macOS, а сама SerenityOS полностью переходит под контроль энтузиастов.

Разработка современного браузера на собственном движке — задача не менее сложная, чем написание собственной ОС. Например, размер кодовой базы Chromium больше, чем FreeBSD, включая LLVM. В мире десятки, если не сотни любительских ОС, которые написаны с нуля ради удовольствия, некоторые буквально за месяц. А вот кроссплатформенных браузерных движков гораздо меньше. Некоторые говорят, что написать новый браузер с нуля сейчас практически невозможно. Андреас хочет доказать обратное. Хотя нужно много времени, но это всё-таки возможно, если делать работу шаг за шагом, неуклонно двигаясь к цели. Как и раньше, он публикует видеоролики о создании разных компонентов браузера, например, JavaScript JIT-компилятора.

Создаётся впечатление, что Андреас Клинг потерял интерес к SerenityOS и сосредоточился на браузере. Что ж, в этом преимущество опенсорса, где ты можешь сам выбирать себе работу. Главное, чтобы хобби выполняло свою терапевтическую задачу.


Telegram-канал со скидками, розыгрышами призов и новостями IT ?

Комментарии (20)


  1. MAXH0
    01.07.2024 09:08
    +13

    Создаётся впечатление, что Андреас Клинг потерял интерес к SerenityOS, а сосредоточился на браузере.

    Если так, то он вообще молодец. Независимый браузер с открытым кодом - это насущная необходимость.


  1. checkpoint
    01.07.2024 09:08
    +11

    Я посмотрел сколько зависимостей тянет а собой Ladybird из репозитория FreeBSD и мне стало страшно. Говорить, что это написанный с нуля движок это просто обманывать себя и других. Зачем ему Qt6 и три питона (3.8, 3.9 и 3.11) ? Этим мезким питоном отравили весь опенсорс.


    1. gnomeby
      01.07.2024 09:08
      +8

      До этого мерзким perl отравили весь опенсорс


      1. checkpoint
        01.07.2024 09:08
        +1

        Не было ничего подобного! Не требовался Perl для сборка каждого второго проекта, и уж тем более в Perl-е не было такого бардака с несовместимыми версиями. И размер пакета Perl5 крошечный по сравнению с вечно голодным питоном.


        1. gnomeby
          01.07.2024 09:08
          +4

          Скорее всего автор не осилил причесать. Начиная с 3.7 питоны почти ничем не отличаются, для сборки должен подходить любой, а уж тем более любой самый новый.

          Как гентушник скажу вам, что вывожу дерево зависимостей пакетов и вижу, что пакетов 50 зависит от perl, например тот же QT. И тоже делаю facepalm.


          1. checkpoint
            01.07.2024 09:08

            Похоже всё это добро тянет за собой Qt6. В статье написано, что SerenityOS использует свой GUI на базе SDL, почему нельзя было портировать его вместе с браузером и избавиться от целого эшелона зависимостей ?

            Браузер Ladybird я попробовал. Жуткое глюкало - загрузил процессор на 100%, поел всю память и упал (у меня лимит стоит по 2ГБ на процесс). На мелких сайтах без яваскрипта жутко лагает прокрутка.


    1. dv0ich
      01.07.2024 09:08
      +9

      В Линуксе у него нормальные зависимости, никаких трёх версий Питона:

      pamac info ladybird
      Название                    : ladybird
      Версия                      : 20240417-1
      Описание                    : Web browser built from scratch using the SerenityOS LibWeb engine
      Адрес                       : https://github.com/SerenityOS/serenity
      Лицензии                    : BSD
      Репозиторий                 : Хранилище AUR
      Группы                      : --
      Зависит от                  : brotli less libgl python qt6-base qt6-multimedia qt6-svg qt6-wayland
      Необязательные зависимости  : --
      Зависимости сборки          : cmake git ninja qt6-tools unzip
      Проверяются зависимости     : --
      Предоставляет               : --
      Заменяет                    : --
      Конфликтует с               : --
      Сопровождающий              : timschumi
      Впервые отправлен           : Сб 01 апр 2023 13:36:24
      Последнее изменение         : Ср 17 апр 2024 20:52:41
      Голосов                     : 7
      Устаревший                  : --

      Это в вашей BSD мантейнеры что-то намудрили.

      Говорить, что это написанный с нуля движок это просто обманывать себя и других

      Движок написан с нуля (иначе бы он тянул ещё и qt6-webengine), а для GUI на Линуксе используется Qt. Что не так?


  1. grishkaa
    01.07.2024 09:08
    +11

    Как раз сегодня собрал Ladybird с исходников, искал, на чём бы ещё потестить, зашёл на хабр, а тут эта статья, хех


    1. dzhidzhoev
      01.07.2024 09:08

      Будет неплохо в какой-то момент приостановить развитие браузера, чтобы статьи он отображать мог, а рекламу — нет :)


      1. grishkaa
        01.07.2024 09:08

        А там уже есть какой-то чёрный список урлов, судя по логам.


  1. dv0ich
    01.07.2024 09:08
    +4

    Собственная ОС с нуля это всегда интересно и впечатляюще, но первый же вопрос: как у неё с драйверами?


    1. NickSin
      01.07.2024 09:08
      +1

      как у неё с драйверами?

      по большей части пока сидит в виртуалке)


      1. ciuafm
        01.07.2024 09:08

        Не понимаю, чем ядро Линукса не нравится, там полно драйверов. А нахлобучку из консоли и гуи можно свою сделать ;-)


        1. NickSin
          01.07.2024 09:08

          Линукса не нравится, там полно драйверов

          Ну вот как-то так. Та же Haiku использует слой драйверов из freeBSD. Тут пошли своим путем


        1. dv0ich
          01.07.2024 09:08
          +4

          Я пользуюсь Линуксом уже лет 15 и в целом меня эта система устраивает. Но вот некоторые особенности ядра меня напрягают:

          • Stable API is nonsense. Я знаю, что у этого подхода есть свои причины, читал соответствующую статью, но всё равно немного диковато. Если у тебя старая железка или, например, старая файловая система, которая дропнута из ядра - ты либо сам перепиливаешь код и патчишь ядро, либо прощаешься с ней. Вообще, как-то напрягает понимание, что все драйверы и прочие компоненты - результат постоянной работы тысяч человек. Если над чем-то перестают работать - оно умирает и исчезает из ядра.

          • Подход "всё в ядре". Как следствие - мало того, что ядро раздувается аки наша вселенная (сколько там уже, 25 миллионов строк кода? только вдумайтесь!), так ещё и ошибка в каком-нибудь драйвере валит всю систему. Я вот недавно имел неудовольствие поработать на свежем AMD APU, и амдшный видеодрайвер регулярно падал и, конечно же, утягивал за собой ядро целиком. Сделать как в Windows, где видеодрайвер при падении можно просто перезапустить, в Линуксе, как я понимаю, в принципе невозможно.

          • Выбор языка программирования. Я понимаю, почему Линус выбрал сишку в 1991 году, но блин. Взять сишку с её обилием ручной работы, и вкорячивать в ядро наколеночный недоООП, чтобы сократить количество этой самой ручной работы - ну я не знаю :) Да, сейчас в ядро тащат Rust, но у него свои сомнительные стороны. Решение Клинга по выбору языка выглядит наиболее разумным, по-моему (и я так говорю не потому, что сам пишу на С++, нет :)).


  1. NickSin
    01.07.2024 09:08
    +10

    Тут, бувально, несколько минут назад новость на канале Андреса вышла, что основатель гитхаба вложил 1M$ в развитие ladybird.


  1. TechnoMag82
    01.07.2024 09:08
    +1

    Так и не нашел как установить на виртуалку. Ожидал наличие ISO с установщиком.

    З.Ы. Оболочка схожая с Win98 вызывает трепет и ностальгию.


    1. vorphalack
      01.07.2024 09:08

      да где ж там 98? там смесь 2000 и ХР без тем.


  1. LorHobbit
    01.07.2024 09:08
    +2

    Не нашёл в статье информации о лицензии самой SerenityOS. Восполняю пробел - там двухпунктная BSD.


  1. NeoCode
    01.07.2024 09:08
    +3

    Браузер в современном мире это что-то вроде ОС верхнего уровня. Фактически, основная программа, наиболее часто используемая, и вполне сопоставимая с операционной системой.