Oasis Linux
(git.sr.ht)- oasis est un petit système Linux qui lie statiquement tous les logiciels du système de base, avec une orientation plus proche de BSD que des distributions Linux habituelles
- Tous les paquets sont compilés avec samurai et les manifestes sont générés via des scripts Lua, ce qui implique un coût initial de packaging élevé mais offre des builds prévisibles et reproductibles ainsi que des builds incrémentaux au-delà des frontières entre paquets
- Le système utilise BearSSL comme bibliothèque TLS et de chiffrement, et s’en sert à l’échelle de tout le système grâce au support natif de BearSSL dans libcurl et à libtls-bearssl
- oasis n’a pas de gestionnaire de paquets ; on compose plutôt une spécification indiquant quels fichiers de quels paquets inclure, puis le système de build enregistre l’arborescence du système de fichiers résultante dans un dépôt git afin de pouvoir la fusionner dans
/ou la récupérer sur une autre machine - Parmi ses objectifs principaux : garder
/etcassez simple pour être compris dans son ensemble, et compiler avec le compilateur cproc, bien plus strict vis-à-vis de la norme ISO C et beaucoup plus petit que gcc ou clang
Vue d’ensemble d’oasis
- oasis est un petit système Linux, assez différent des autres systèmes d’exploitation Linux habituels, avec une direction plus proche de BSD
- Tous les logiciels du système de base sont liés statiquement, y compris le serveur d’affichage velox et le navigateur web netsurf
- Cela repose sur un mécanisme plus simple que l’édition de liens dynamique, évite les problèmes de mise à niveau des bibliothèques et produit des binaires entièrement autonomes, faciles à copier vers d’autres systèmes
Build et bootstrap
- Tous les paquets sont compilés avec samurai, et les manifestes de build sont générés à l’aide de scripts Lua
- Cette approche entraîne un coût initial de packaging important, mais un faible coût de maintenance, des temps de build proches de l’optimal, des builds prévisibles et reproductibles, moins de dépendances au moment du build et des builds incrémentaux au-delà des frontières entre paquets
- Pour le bootstrap, n’importe quel système POSIX avec git, lua, curl, un utilitaire sha256, les utilitaires de compression standard et un compilateur croisé
x86_64-linux-muslsuffit - Cela simplifie aussi la compilation croisée depuis des systèmes non Linux comme macOS ou OpenBSD
TLS, composition des paquets et extension du système
- BearSSL est utilisé comme bibliothèque TLS et de chiffrement du système
- BearSSL est très petit et bien conçu, mais n’a pas été largement adopté
- Grâce au support natif de BearSSL dans libcurl et à libtls-bearssl, une implémentation de remplacement de libtls basée sur BearSSL, oasis utilise BearSSL à l’échelle de tout le système
- Seuls certains paquets optionnels nécessitent encore LibreSSL
- oasis n’a pas de gestionnaire de paquets
- À la place, on définit via une spécification quels fichiers de quels paquets inclure dans le système, puis le système de build enregistre l’arborescence résultante dans un dépôt git
- Ce résultat peut être fusionné dans
/ou récupéré sur une autre machine - Bien que le projet vise à fournir un système complet, beaucoup de logiciels libres s’accordent mal avec ses objectifs ; plutôt que de recréer et maintenir un dépôt de plusieurs milliers de paquets, oasis a choisi l’intégration avec pkgsrc et nix
- Cela permet de garder le système de base petit et ciblé tout en étendant le système avec les logiciels nécessaires
Configuration et orientation de l’implémentation en C
- L’une des lignes directrices d’oasis est de conserver le répertoire
/etcsuffisamment simple pour qu’un administrateur système puisse le comprendre dans son ensemble et le personnaliser correctement - Dans la configuration par défaut, le fichier le plus complexe est le script d’initialisation système
/etc/rc.init, qui ne fait que 16 lignes - L’un des principaux objectifs d’oasis est d’être compilé avec le compilateur C cproc, beaucoup plus strict que gcc ou clang vis-à-vis de la norme ISO C et de plusieurs ordres de grandeur plus petit
- Ce travail est encore en cours, mais tous les paquets essentiels et la plupart des autres paquets se compilent déjà avec succès avec cproc
Principes
- La complexité logicielle doit être mesurée en incluant toutes les dépendances transitives
- Les exécutables doivent être liés statiquement
- Les composants logiciels doivent permettre une personnalisation ou une modification facile
- Les sources des paquets doivent être référencées par URL ou via des sous-modules git, et non incluses directement
/etcdoit rester assez simple pour être compris dans son ensemble- Les patches doivent être bien organisés, bien expliqués et toujours s’appliquer proprement
Installation et image QEMU
- Le guide d’installation se trouve sur le wiki
- oasis est un projet ambitieux et il reste encore beaucoup à faire
- Les utilisateurs doivent être habitués à compiler eux-mêmes le noyau et à ajuster le système en cas de problème
- Une image QEMU est fournie pour l’essayer sans l’installer directement
- L’archive contient le système de fichiers racine, le noyau Linux et un script d’exécution qemu
- Un
README.mdcontenant les instructions d’utilisation est également inclus ;./runlance le système en mode graphique et./run -sen mode série
Choix des logiciels inclus
- oasis privilégie, dès que possible, des implémentations de bibliothèques et d’outils plus petites et plus simples
- Les principaux choix sont les suivants
- musl à la place de glibc
- sbase à la place de coreutils
- ubase à la place de util-linux
- pigz à la place de gzip
- mandoc à la place de man-db
- bearssl à la place de openssl
- oksh à la place de bash
- sdhcp à la place de dhclient ou dhcpcd
- vis à la place de vim ou emacs
- byacc à la place de bison
- perp et sinit à la place de sysvinit ou systemd
- netsurf à la place de chromium ou firefox
- samurai à la place de ninja
- velox à la place de Xorg
- netbsd-curses à la place de ncurses
- Ces paquets sont regroupés en sets logiques
- La liste complète est disponible dans le répertoire pkg
- Même si le logiciel souhaité n’y figure pas, il y a de fortes chances qu’il puisse être installé via pkgsrc ou nix
Canaux de contact
- La mailing list est ~mcf/oasis@lists.sr.ht
- Le canal IRC est
#oasissur libera.chat - Vous pouvez l’utiliser pour les questions, les patches et les discussions générales
1 commentaires
Avis sur Lobste.rs
Le fait que tout soit entièrement lié statiquement est impressionnant
Ne liez pas bash en étant en colère ♪
bashJe me souviens avoir regardé ce projet vers 2020, juste avant que Wayland ne commence vraiment à s’imposer
Le fait qu’ils construisaient déjà une distribution entièrement liée statiquement, incluant même leur propre serveur d’affichage, était déjà assez impressionnant à l’époque, et c’est encore plus cool de voir que le projet est toujours vivant
Les captures d’écran sont ici : https://github.com/oasislinux/oasis/wiki
Ce serait bien de les mettre dans le README
Le fait que ce soit entièrement lié statiquement est assez impressionnant
Presque tous mes projets sont aussi liés statiquement, mais j’ai des exceptions pour tout ce qui touche au graphique, comme le serveur X ou OpenGL/Vulkan
La liste d’alternatives plus simples en bibliothèques/logiciels proposée par Oasis vaut aussi un petit coup d’œil
J’ai énormément appris sur Linux en installant Oasis sur mon laptop
Cela dit, il faut s’y préparer mentalement, et ce n’est pas simple, surtout quand on configure pkgsrc pour utiliser sway ou un autre bureau Wayland
La version suckless de coreutils n’est pas non plus compatible avec beaucoup de logiciels, donc il faut s’attendre à quelques problèmes
Ce que j’ai particulièrement apprécié, c’est qu’il était très facile de déboguer et de comprendre l’ensemble de l’espace utilisateur, et que l’approche pour construire un système reproductible paraît bien moins magique que nix
BearSSL n’a pas eu de release depuis longtemps, mais il y a encore quelques commits de temps en temps, y compris plusieurs le mois dernier
En revanche, il ne prend toujours pas en charge TLS 1.3, ce qui a conduit à son retrait dans curl 8.15 l’an dernier, même si TLS 1.2 est toujours considéré comme sûr
Du côté de curl, certains s’inquiétaient aussi qu’avec si peu de commits récents et de corrections de bugs, il ne puisse pas y avoir d’utilisateurs satisfaits, ce à quoi Thomas a répondu : « Désolé de ne pas réussir à introduire suffisamment de bugs dans mon code. J’essaierai d’être plus négligent la prochaine fois. »
Le README cité correspond à une ancienne version, et dans la 0.6, BearSSL est présenté comme un logiciel de niveau bêta : la plupart des fonctionnalités prévues ont été implémentées, et un usage en production serait assez audacieux, mais pas complètement insensé
À mon avis, le niveau d’exigence de Thomas Pornin pour ce qu’il appelle un « logiciel de qualité bêta » est plus élevé que ce que la plupart des gens considèrent comme prêt pour la production