1 ポイント 投稿者 GN⁺ 2 시간 전 | 1件のコメント | WhatsAppで共有
  • oasis は、ベースシステムのすべてのソフトウェアを 静的リンク する小規模な Linux システムで、一般的な Linux ディストリビューションよりも BSD に近い方向性を持つ
  • すべてのパッケージは samurai でビルドし、Lua スクリプト でマニフェストを生成するため、初期のパッケージ化コストは大きいものの、予測可能で再現性のあるビルドと、パッケージ境界をまたぐ増分ビルドを実現する
  • システム TLS と暗号ライブラリには BearSSL を採用し、libcurl のネイティブ BearSSL サポートと libtls-bearssl を通じてシステム全体で BearSSL を使用する
  • oasis には パッケージマネージャー がなく、どのパッケージのどのファイルを含めるかを仕様として構成し、ビルドシステムが生成されたファイルシステムツリーを git リポジトリに記録して / にマージしたり、別のマシンから取得したりできる
  • /etc を全体像を把握できるほど単純に保ち、gcc や clang よりも ISO C 標準に厳密で、はるかに小さい cproc コンパイラでビルドすることを主要な目標としている

oasis 概要

  • oasis は小規模な Linux システムであり、一般的な他の Linux ベース OS とはかなり異なり、BSD により近い方向性を持つ
  • ベースシステムのすべてのソフトウェアが 静的リンク され、ディスプレイサーバー velox と Web ブラウザ netsurf も含まれる
  • 動的リンクより単純な仕組みを使い、ライブラリ更新の問題をなくし、他のシステムへ簡単にコピーできる完全自己完結型バイナリを作り出す

ビルドとブートストラップ

  • すべてのパッケージは samurai でビルドされ、ビルドマニフェストは Lua スクリプト で生成される
  • この方式は初期のパッケージ化コストこそ相当大きいが、保守コストは小さく、ほぼ最適に近いビルド時間、予測可能で再現性のあるビルド、削減されたビルド時依存関係、パッケージ境界をまたぐ増分ビルドを提供する
  • ブートストラップには、git、lua、curl、sha256 ユーティリティ、標準的な圧縮ユーティリティ、x86_64-linux-musl クロスコンパイラを備えた任意の POSIX システムがあれば十分
  • macOS や OpenBSD のような非 Linux システムでもクロスコンパイルが容易になる

TLS、パッケージ構成、システム拡張

  • BearSSL がシステム TLS および暗号ライブラリとして使われる
  • BearSSL は非常に小さくよく書かれているが、広く採用されているわけではない
  • libcurl のネイティブ BearSSL サポートと、BearSSL ベースの libtls 代替実装である libtls-bearssl により、oasis はシステム全体で BearSSL を使用する
  • 一部の オプションパッケージ だけが、なお LibreSSL を必要とする
  • oasis には パッケージマネージャー がない
  • その代わり、どのパッケージのどのファイルをシステムに含めるかを 仕様 として構成し、ビルドシステムが生成されたファイルシステムツリーを git リポジトリに記録する
  • この結果は / にマージしたり、別のマシンから取得したりできる
  • 完全なシステム提供を目指しているが、目標に合わない自由ソフトウェアも多いため、数千のパッケージリポジトリを新たに作って維持する代わりに、pkgsrcnix との連携を選んでいる
  • これにより、ベースシステムを小さく集中した状態に保ちつつ、必要なソフトウェアでシステムを拡張できる

設定と C 実装の方向性

  • oasis の指針の 1 つは、/etc ディレクトリをシステム管理者が全体を理解し、適切にカスタマイズできるほど単純に保つこと
  • デフォルト設定で最も複雑なファイルはシステム初期化スクリプト /etc/rc.init だが、長さはわずか 16 行しかない
  • oasis の主要目標は、gcc や clang よりも ISO C 標準にずっと厳密で、サイズが何桁も小さい C コンパイラ cproc でビルドすること
  • この作業はまだ 進行中 だが、すべての中核パッケージと大半のその他のパッケージは cproc で正常にビルドできている

原則

  • ソフトウェアの複雑さは、すべての推移的依存関係を含めて測定すべき
  • 実行ファイルは静的リンクされるべき
  • ソフトウェア構成要素は容易なカスタマイズや修正を許容すべき
  • パッケージソースは URL または git サブモジュールで参照すべきであり、直接同梱すべきではない
  • /etc は全体を理解できるほど単純であるべき
  • パッチはよく整理され、適切な説明を備え、常にクリーンに適用できるべき

インストールと QEMU イメージ

  • インストールガイドは wiki にある
  • oasis は野心的なプロジェクトであり、まだやるべきことが多く残っている
  • 利用者は自分でカーネルをビルドし、問題が起きたときにシステムを調整することに慣れている必要がある
  • 自分でインストールせずに試せる QEMU イメージ が提供されている
  • アーカイブにはルートファイルシステム、Linux カーネル、qemu 実行スクリプトが含まれている
  • 使い方を記した README.md も含まれ、./run はグラフィックモードで起動し、./run -s はシリアルモードで起動する

同梱ソフトウェアの選定

  • oasis は可能な限り、より小さく単純なライブラリやツール実装を採用する
  • 主な選択は次のとおり
    • glibc の代わりに musl
    • coreutils の代わりに sbase
    • util-linux の代わりに ubase
    • gzip の代わりに pigz
    • man-db の代わりに mandoc
    • openssl の代わりに bearssl
    • bash の代わりに oksh
    • dhclient または dhcpcd の代わりに sdhcp
    • vim または emacs の代わりに vis
    • bison の代わりに byacc
    • sysvinit または systemd の代わりに perp と sinit
    • chromium または firefox の代わりに netsurf
    • ninja の代わりに samurai
    • Xorg の代わりに velox
    • ncurses の代わりに netbsd-curses
  • これらのパッケージは論理的な sets にまとめられている
  • 全一覧は pkg ディレクトリで確認できる
  • 望むソフトウェアがなくても、pkgsrc や nix を通じてインストールできる可能性が高い

連絡チャネル

  • メーリングリストは ~mcf/oasis@lists.sr.ht にある
  • IRC チャンネルは libera.chat の #oasis
  • 質問、パッチ、一般的な議論に利用できる

1件のコメント

 
GN⁺ 2 시간 전
Lobste.rs の意見
  • 完全に 静的リンク されている点が印象的
    怒った勢いで bash をリンクするな ♪

    • bash の代わりに oksh というプロジェクトをリンクしているようだ
  • 2020年ごろ、Wayland がちょうど定着する前にこのプロジェクトを見た記憶がある
    独自のディスプレイサーバーまで含んだ 完全静的リンクのディストリビューション を作っていて、その当時もかなり印象的だったし、まだ生きているのがさらにすごい

  • スクリーンショットはこちら: https://github.com/oasislinux/oasis/wiki
    こういうのは README に入れてくれるとよい

  • 完全静的リンク という点がかなり印象的
    自分のプロジェクトもほぼ全部静的リンクだが、X サーバーや OpenGL/Vulkan のようなグラフィックス関連は例外になっている
    Oasis が提示している、よりシンプルなライブラリ/ソフトウェアの代替一覧も少し見る価値がある

  • ノートPCに Oasis をインストールしながら、Linux について本当に多くを学んだ
    ただし相当な覚悟が必要で、特に sway や他の Wayland デスクトップを使おうとして pkgsrc を設定するときは簡単ではない
    suckless 版 coreutils も多くのソフトウェアと互換性がないので、問題は予想しておくべきだ
    特によかったのは、ユーザー空間全体をデバッグして理解するのがとても簡単だったことで、再現可能なシステムを作るアプローチとしては nix よりずっと魔法っぽさが少ないと感じる

    • 良い学習体験だったと聞けてうれしい
      BearSSL は長いあいだリリースがなかったが、ときどきコミットはあり、先月にもいくつかあった
      ただし TLS 1.3 をまだサポートしていないため、昨年 curl 8.15 で削除され、TLS 1.2 は依然として安全と見なされている
      curl 側では、最近のコミットやバグ修正が少ないなら満足しているユーザーなどいないのでは、という懸念もあったが、Thomas は「自分のコードに十分なバグを作れず申し訳ない。次はもっと雑にやってみる」と答えた
      引用されていた README は古いバージョンのもので、0.6 では BearSSL を ベータ段階のソフトウェア と見なし、予定していた機能の大半は実装済みで、本番利用はかなり大胆だが完全に狂った選択ではないと説明している
      私の考えでは、Thomas Pornin の言う「ベータ品質のソフトウェア」の基準は、たいていの人が考える本番投入可能よりも高い