# SerenityOS

SerenityOS (Eigenschreibweise, engl. serenity „Gelassenheit“) ist ein freies Desktop-Betriebssystem für die x86-64-, AArch64- und RISC-V-Architekturen, das sich seit 2018 in der Entwicklung befindet. Das Projekt wurde vom schwedischen Entwickler Andreas Kling begonnen und inzwischen ist eine Community an Hobbyprogrammierern daran beteiligt. Das System baut auf einem monolithischen präemptiblen Kernel auf. Seine Benutzeroberfläche versucht, die Ästhetik der Oberflächen der späten 1990er-Jahre nachzubilden, und es gibt (mit Ausnahme des Compilers) keine Abhängigkeit von externer Software.
Im Unterschied zum Beginn im Jahr 2018, als der Fokus stark auf dem Betriebssystem selbst lag, gehört zum SerenityOS-Projekt inzwischen auch Software, die unter anderen Betriebssystemen eingesetzt werden kann. Das sind insbesondere die Programmiersprache Jakt (siehe unten) und die Bibliotheksportierungen, die zusammengefasst „Lagom“ genannt werden. Der Browser Ladybird gehörte bis zu seiner Abspaltung 2024 ebenfalls zum SerenityOS-Projekt; die in SerenityOS enthaltene Version des Browsers ist weiterhin mehrplattformfähig.

## Geschichte

Projektgründer Andreas Kling begann das Projekt im Oktober 2018, nachdem er eine Drogenrehabilitation erfolgreich beendet hatte und nach einer Möglichkeit suchte, seine Suchterholung zu unterstützen und sich sinnvoller zu beschäftigen. Der Name „Serenity“ leitet sich daher vom Gelassenheitsgebet, englisch Serenity Prayer, her. SerenityOS begann als eine Sammlung an Einzelkomponenten, die er im Oktober 2018 zu einem System zusammenfügte.
Im Januar 2019 begann Kling, Videos seiner Arbeit am System und später monatliche Änderungsberichte auf YouTube hochzuladen. Die relative Bekanntheit seines Projekts rührt auch maßgeblich von der relativen Bekanntheit seines YouTube-Kanals und seiner Videos her.
Seit Mai 2021 ist Kling, der damals angab, durch freiwillige Spenden etwa 2200 US-Dollar im Monat zu verdienen, in Vollzeit mit der Entwicklung des Systems beschäftigt. Um die Entwicklung des Browsers zu vereinfachen, wurde ab Frühjahr 2022 unter dem Namen Ladybird der Browser auf Linux und macOS portiert.
Am 28. Dezember 2022 wurde die Unterstützung für die i386-Architektur (IA-32) aus Kernel und Projekt entfernt, womit das System seit diesem Zeitpunkt nur eine Prozessorarchitektur (x86-64) vollständig unterstützt. Seitdem ist auch die Aarch64-Portierung und seit August 2023 außerdem die RISC-V-Portierung in Arbeit.
Am 3. Juni 2024 kündigte Andreas Kling an, dass Ladybird künftig als eigenständiges Projekt weitergeführt wird. Dies soll auch dazu dienen, dass Betriebssystem und Browser sich nicht gegenseitig den Fokus stehlen. Einige Zeit später trennte sich Kling vom SerenityOS-Projekt, indem er seinen Maintainer-Status vollständig aufgab, er war bereits zuvor als BDfL zurückgetreten.

## Aufbau und Softwarephilosophie

SerenityOS ist vollständig (Ausnahme: Teile der Startsequenz) in einer Untermenge von C++ 20 geschrieben, die von den Entwicklern als „Serenity C++“ bezeichnet wird. Ein modifizierter Compiler (momentan: GCC oder Clang) kommt zum Einsatz. Es werden keine Ausnahmen verwendet und statt der normalen C++-Standardbibliothek wird eine eigene Bibliothek namens AK benutzt. Dies gilt in ähnlicher Weise für das gesamte Projekt: Jede einzelne Komponente des Betriebssystems, vom Kernel über die Bibliotheken bis zum Webbrowser, wird vom SerenityOS-Projekt selbst erstellt. Kling begründet dies mit der Art und Weise, wie er die Softwareentwicklung bei Apple erlebt habe: enge Integration, Flexibilität der Entwickler und die Experten für jeden bestimmten Teil der Software seien schnell erreichbar. Zugleich werden jedoch existierende Standards verwendet: Der Kernel zielt auf POSIX-Kompatibilität ab, der Terminal-Emulator ist teilweise ANSI-kompatibel, es werden ELF für Kompilationseinheiten und das Ext2-Dateisystem genutzt.
Der Kernel ist ein monolithischer Kernel mit präemptiblem Multitasking; Benutzerprozesse kommunizieren mittels Systemaufrufen mit dem Betriebssystem. Zwischen Benutzerprozessen dient ein eigenes IPC- bzw. RPC-Protokoll basierend auf Unix Domain Sockets zur Kommunikation. Die Systemdienste werden „Server“ genannt und von einem init-System namens „SystemServer“ gestartet und verwaltet.
Die Benutzeroberfläche ist von der Ästhetik der Betriebssysteme der späten 1990er-Jahre inspiriert und es gibt eine Vielzahl an Designs, die spezielle Oberflächen wie Windows 2000 oder System 7 nachzubilden versuchen. Das Betriebssystem beabsichtigt gemäß POSIX-Ideen, dem Benutzer möglichst viel Kontrolle über die Hardware und den Systembetrieb zu erlauben.
Die Entwicklung folgt keinem Veröffentlichungszyklus; demnach gibt es keine Veröffentlichungen oder Versionen. Weiterhin werden keine vorkompilierten Softwarepakete zur Verfügung gestellt und von Interessenten wird erwartet, dass sie das System selbst bauen.

### Funktionen und Anwendungen

Die eigenen GUI-Programme gruppieren sich zum aktuellen Zeitpunkt um die Aufgaben Systemverwaltung und Softwareentwicklung. Die komplexesten Anwendungen sind der eigene Browser, der inzwischen auch komplexe Webseiten laden und gut darstellen kann, sowie eine integrierte Entwicklungsumgebung mit einem C++-Unterstützungs-Sprachserver. Eine Reihe an Werkzeugen existieren, die größtenteils Befehlszeilenprogramme sind und übliche POSIX-Tools implementieren oder nachbilden (z. B. pls für sudo, sdb für gdb).
Bezüglich Binärdateiformaten gibt es Unterstützung für viele übliche Formate, darunter die meisten Bildformate (PNG, JPEG, GIF u. a.), einige häufige Audioformate (MP3, WAV, FLAC), einzelne Videoformate (VP9), Archivdateien wie TAR und ZIP sowie PDF. Mit Ausnahme von Bildern und Archiven ist eine Erstellung oder Bearbeitung vieler dieser Dateitypen jedoch nicht oder kaum möglich. Für einige Anwendungsgebiete, so z. B. das eigene Tabellenkalkulationsprogramm, werden eigens entworfene Dateiformate eingesetzt.
Eine Reihe an portierter Software mit variierender Funktionalität ist verfügbar. Darunter befinden sich auch eine Vielzahl an Computerspielen insbesondere aus der Ära, deren Desktopoberflächen das System nachzubilden versucht, z. B. Doom oder Quake.

## Programmiersprache Jakt

Im Mai 2022 kündigte Andreas Kling in einem Blogpost an, dass er mit der Entwicklung einer eigenen Programmiersprache mit dem Namen Jakt für SerenityOS begonnen hat. Der Grund dafür ist, dass die bisher in SerenityOS eingesetzte Programmiersprache C++ auf lange Sicht ungeeignet für das Projekt sei, da sie keine Speicher- oder Typsicherheit bietet. Von den existierenden Programmiersprachen, die Speichersicherheit bieten, wie z. B. Rust, sei keine so richtig für SerenityOS geeignet. Die zukünftige Programmiersprache für SerenityOS sollte unter anderem eine sehr gute Interoperabilität mit C++ bieten, damit die Codebasis Stück für Stück portiert werden könne. Jakt versucht, bestehende erfolgreiche Konzepte aus anderen Programmiersprache zu übernehmen, darunter vor allem Swift, Rust und C++. Es handelt sich um eine Multiparadigmensprache mit Fokus auf objektorientierte und generische Programmierung.
Die erste Implementierung des Jakt-Compilers wurde von Kling zusammen mit Sophia Turner in Rust entwickelt. Dieser diente als Bootstrap-Compiler, um die in Jakt selbst geschriebene Implementierung zu kompilieren. Seit Juli kann der Jakt-basierte Compiler sich selbst kompilieren, somit gilt die Sprache als selfhosted. Der Rust-basierte Compiler wird seitdem nicht mehr benötigt und wurde aus dem Repository entfernt.
Der Jakt-Compiler erzeugt C++-Code (Transpiler), der anschließend von Clang in Maschinencode übersetzt wird. Stand September 2022 befinden sich die nicht spezifizierte Sprache und der Compiler in einem experimentellen instabilen Zustand.

## Rezeption

Im August 2021 erhielt das Projekt einige Aufmerksamkeit durch einen Artikel von Jim Salter auf Ars Technica. Salter kritisierte als ihm unliebsamsten Teil das Dateisystem, da Ext2 veraltet und unsicher sei. Das System sei weiterhin durch eine momentan fehlende Mehrprozessor-Unterstützung nicht für Anwendungen in der echten Welt geeignet. Er lobte die bessere Zugänglichkeit im Vergleich zu anderen Hobbysystemen wie TempleOS, wies aber darauf hin, dass es noch nicht für den täglichen Gebrauch geeignet sei.
Internationale mediale Resonanz gab es insbesondere nach oder in Antwort auf Klings Vollzeit-Ankündigung, darunter Gnu/Linux.ch. Kling und andere Entwickler erschienen bei diversen Podcasts, so z. B. beim CppCast, und bei Jonathan Turner.
Bereits mehrfach wurde SerenityOS auf Hacker News verbreitet und erhielt dort – neben variierender Aufmerksamkeit – öfter zustimmende Kommentare. Häufig werden Design und Aussehen gelobt. Ein häufiger Kritikpunkt der Nutzer ist das Fehlen von vorkompilierten Systemabbildern, da ihnen das eigene Kompilieren zu schwer sei. Es wird bemängelt, dass das System sich in einem instabilen, unfertigen Zustand befinde, durch welchen es kaum benutzbar sei. Zu einem solchen Schluss kommen auch viele der anderen hier genannten Kritiken: Das Projekt sei ein „Spielzeugprojekt“ ohne Aussicht auf praktische Anwendungsmöglichkeiten. Einige Benutzer kritisieren weiterhin, dass C++ an sich ein Sicherheitsrisiko darstelle und mit einem solchen neuen Projekt die Gelegenheit verpasst worden wäre, eine als sicherer geltende Sprache wie Rust einzusetzen.