1 points par GN⁺ 1 시간 전 | 1 commentaires | Partager sur WhatsApp
  • 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 /etc assez 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-musl suffit
  • 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 /etc suffisamment 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
  • /etc doit 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.md contenant les instructions d’utilisation est également inclus ; ./run lance le système en mode graphique et ./run -s en 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 #oasis sur libera.chat
  • Vous pouvez l’utiliser pour les questions, les patches et les discussions générales

1 commentaires

 
GN⁺ 1 시간 전
Avis sur Lobste.rs
  • Le fait que tout soit entièrement lié statiquement est impressionnant
    Ne liez pas bash en étant en colère ♪

    • Il semble qu’ils lient un projet appelé oksh à la place de bash
  • Je 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

    • Ravi d’apprendre que ça a été une bonne expérience d’apprentissage
      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