Oasis Linux
(git.sr.ht)- oasis ist ein kleines Linux-System, das die gesamte Software des Basissystems statisch linkt und damit eher in Richtung BSD als in Richtung vertrauter Linux-Distributionen geht
- Alle Pakete werden mit samurai gebaut, und die Manifeste werden mit Lua-Skripten erzeugt; der anfängliche Packaging-Aufwand ist dadurch hoch, dafür gibt es vorhersagbare und reproduzierbare Builds sowie inkrementelle Builds über Paketgrenzen hinweg
- Als System-TLS- und Kryptobibliothek wird BearSSL verwendet; dank nativer BearSSL-Unterstützung in libcurl und libtls-bearssl nutzt das System BearSSL durchgängig
- oasis hat keinen Paketmanager; stattdessen wird per Spezifikation festgelegt, welche Dateien welcher Pakete enthalten sein sollen, und das Build-System schreibt den resultierenden Dateisystembaum in ein Git-Repository, das sich nach
/zusammenführen oder auf andere Maschinen übertragen lässt - Ein zentrales Ziel ist es,
/etcso einfach zu halten, dass man es vollständig verstehen kann, und mit dem deutlich kleineren cproc-Compiler zu bauen, der strenger am ISO-C-Standard ist als gcc oder clang
Überblick über oasis
- oasis ist ein kleines Linux-System und unterscheidet sich deutlich von anderen vertrauten Linux-basierten Betriebssystemen; die Ausrichtung ist näher an BSD
- Die gesamte Software des Basissystems ist statisch gelinkt; dazu gehören auch der Display-Server velox und der Webbrowser netsurf
- Es verwendet einfachere Mechanismen als dynamisches Linken, vermeidet Probleme bei Bibliotheks-Upgrades und erzeugt vollständig in sich geschlossene Binärdateien, die sich leicht auf andere Systeme kopieren lassen
Build und Bootstrap
- Alle Pakete werden mit samurai gebaut, und die Build-Manifeste werden mit Lua-Skripten erzeugt
- Dieser Ansatz verursacht anfangs beträchtlichen Packaging-Aufwand, senkt aber den Wartungsaufwand und bietet nahezu optimale Build-Zeiten, vorhersagbare und reproduzierbare Builds, weniger Build-Time-Abhängigkeiten sowie inkrementelle Builds über Paketgrenzen hinweg
- Für das Bootstrap reicht ein beliebiges POSIX-System mit git, lua, curl, einem sha256-Dienstprogramm, den üblichen Komprimierungswerkzeugen und einem
x86_64-linux-musl-Cross-Compiler - Dadurch wird auch Cross-Compiling auf Nicht-Linux-Systemen wie macOS oder OpenBSD einfacher
TLS, Paketkonfiguration und Systemerweiterung
- BearSSL wird als System-TLS- und Kryptobibliothek eingesetzt
- BearSSL ist sehr klein und gut geschrieben, wird aber nicht breit eingesetzt
- Über die native BearSSL-Unterstützung von libcurl und die BearSSL-basierte libtls-Alternative libtls-bearssl verwendet oasis BearSSL systemweit
- Nur einige optionale Pakete benötigen weiterhin LibreSSL
- oasis hat keinen Paketmanager
- Stattdessen wird über eine Spezifikation festgelegt, welche Dateien welcher Pakete ins System aufgenommen werden, und das Build-System schreibt den resultierenden Dateisystembaum in ein Git-Repository
- Dieses Ergebnis kann nach
/zusammengeführt oder auf andere Maschinen übertragen werden - Obwohl ein vollständiges System angestrebt wird, gibt es viel freie Software, die nicht gut zu diesen Zielen passt; statt ein neues Repository mit Tausenden Paketen aufzubauen und zu pflegen, setzt man daher auf die Integration mit pkgsrc und nix
- So bleibt das Basissystem klein und fokussiert, während sich das System bei Bedarf mit zusätzlicher Software erweitern lässt
Konfiguration und C-Umsetzung
- Eine der Leitlinien von oasis ist, das Verzeichnis
/etcso einfach zu halten, dass ein Systemadministrator alles vollständig verstehen und sinnvoll anpassen kann - Die komplexeste Datei in der Standardkonfiguration ist das System-Init-Skript
/etc/rc.init, und es ist nur 16 Zeilen lang - Ein Hauptziel von oasis ist, mit dem C-Compiler cproc zu bauen, der deutlich strenger am ISO-C-Standard ist als gcc oder clang und mehrere Größenordnungen kleiner ist
- Diese Arbeit ist noch im Gange, aber alle Kernpakete und die meisten anderen Pakete lassen sich bereits erfolgreich mit cproc bauen
Prinzipien
- Softwarekomplexität sollte einschließlich aller transitiven Abhängigkeiten gemessen werden
- Ausführbare Dateien sollten statisch gelinkt sein
- Softwarekomponenten sollten einfache Anpassungen oder Modifikationen erlauben
- Paketquellen sollten per URL oder Git-Submodul referenziert und nicht direkt eingebunden werden
/etcsollte so einfach sein, dass man es vollständig verstehen kann- Patches sollten gut organisiert und gut erklärt sein und sich immer sauber anwenden lassen
Installation und QEMU-Image
- Eine Installationsanleitung gibt es im Wiki
- oasis ist ein ambitioniertes Projekt, und es bleibt noch viel zu tun
- Nutzer sollten damit vertraut sein, den Kernel selbst zu bauen und das System bei Problemen anzupassen
- Es gibt ein QEMU-Image, mit dem man das System testen kann, ohne es direkt zu installieren
- Das Archiv enthält das Root-Dateisystem, den Linux-Kernel und ein qemu-Startskript
- Ebenfalls enthalten ist eine
README.mdmit Informationen zur Nutzung;./runstartet im Grafikmodus und./run -sim seriellen Modus
Auswahl der enthaltenen Software
- oasis verwendet, wo immer möglich, kleinere und einfachere Implementierungen von Bibliotheken und Werkzeugen
- Wichtige Entscheidungen sind unter anderem:
- musl statt glibc
- sbase statt coreutils
- ubase statt util-linux
- pigz statt gzip
- mandoc statt man-db
- bearssl statt openssl
- oksh statt bash
- sdhcp statt dhclient oder dhcpcd
- vis statt vim oder emacs
- byacc statt bison
- perp und sinit statt sysvinit oder systemd
- netsurf statt chromium oder firefox
- samurai statt ninja
- velox statt Xorg
- netbsd-curses statt ncurses
- Diese Pakete sind in logische sets gruppiert
- Die vollständige Liste findet sich im Verzeichnis pkg
- Falls gewünschte Software fehlt, lässt sie sich wahrscheinlich über pkgsrc oder nix installieren
Kontaktkanäle
- Die Mailingliste ist unter ~mcf/oasis@lists.sr.ht erreichbar
- Der IRC-Kanal ist
#oasisauf libera.chat - Er kann für Fragen, Patches und allgemeine Diskussionen genutzt werden
1 Kommentare
Lobste.rs-Meinungen
Beeindruckend ist, dass alles vollständig statisch gelinkt ist
Verlinke
bashnicht im Zorn ♪bashwird wohl ein Projekt namens oksh gelinktIch erinnere mich, dass ich mir dieses Projekt um 2020 angesehen habe, kurz bevor Wayland wirklich Fuß fasste
Schon damals war es ziemlich beeindruckend, dass sie eine vollständig statisch gelinkte Distribution inklusive eigenem Display-Server bauten, und noch cooler ist, dass das Projekt immer noch lebt
Screenshots gibt es hier: https://github.com/oasislinux/oasis/wiki
So etwas hätte ich gern im README
Dass es vollständig statisch gelinkt ist, ist ziemlich beeindruckend
Auch meine Projekte sind fast alle statisch gelinkt, mit Ausnahme von Grafikthemen wie X-Server oder OpenGL/Vulkan
Auch die von Oasis vorgeschlagene Liste einfacherer Bibliotheks-/Software-Alternativen ist einen kurzen Blick wert
Bei der Installation von Oasis auf meinem Laptop habe ich wirklich viel über Linux gelernt
Man muss sich allerdings darauf einstellen, und besonders das Einrichten von pkgsrc ist nicht einfach, wenn man sway oder andere Wayland-Desktops nutzen will
Auch die suckless-Version von coreutils ist mit viel Software nicht kompatibel, also sollte man mit Problemen rechnen
Besonders gut fand ich, dass sich der gesamte User-Space sehr leicht debuggen und verstehen ließ, und als Ansatz für ein reproduzierbares System wirkt es deutlich weniger magisch als nix
BearSSL hatte lange kein Release mehr, aber es gibt gelegentlich Commits, auch im letzten Monat waren ein paar dabei
TLS 1.3 wird allerdings noch nicht unterstützt, weshalb es letztes Jahr in curl 8.15 entfernt wurde; TLS 1.2 gilt weiterhin als sicher
Im curl-Umfeld gab es auch die Sorge, dass bei so wenigen aktuellen Commits und Bugfixes keine zufriedenen Nutzer existieren könnten, worauf Thomas antwortete: „Es tut mir leid, dass ich in meinem Code nicht genügend Bugs erzeugen konnte. Beim nächsten Mal mache ich ihn schlampiger.“
Das zitierte README stammt aus einer älteren Version; in 0.6 wird BearSSL als Software auf Beta-Niveau beschrieben, bei der die meisten geplanten Funktionen implementiert sind, und der Einsatz in Produktion sei ziemlich mutig, aber keine völlig verrückte Entscheidung
Meiner Meinung nach liegt die Messlatte, die Thomas Pornin mit „Software in Beta-Qualität“ anlegt, höher als das, was die meisten Menschen als produktionsreif ansehen