3 ポイント 投稿者 GN⁺ 2024-03-01 | 1件のコメント | WhatsAppで共有
  • 従来のLinuxディストリビューションのディレクトリ慣習を大きく変え、システム構成をプログラムごとのディレクトリを中心に理解できるようにする実験的なディストリビューション
  • 別個のパッケージデータベースの代わりにファイルシステム自体をデータベースとして使い、プログラムは /Programs/Nano/8.3 のようなパスにバージョンごとに配置される
  • 最新リリース 017.01 は、前回のISOリリースから約5年ぶりとなるバグ修正アップデートで、この間に見つかったいくつかの重要な問題に対処
  • 創設者 Hisham Muhammad は25年間の運営から退き、プロジェクトはGitHubユーザー @fyrak1s が引き継ぐ
  • Live環境として直接起動することも、ハードドライブにインストールすることもでき、一般的なディストリビューションとは異なるファイルシステム構造を実際に試せる

ファイルシステムでパッケージを構成する方式

  • GoboLinux は、ファイルシステム階層全体を再定義する実験的なLinuxディストリビューション
  • 中核となるのは、別個のパッケージデータベースを置かずにファイルシステムをデータベースとして使う構造
    • 各プログラムは自身のディレクトリに入る
    • 例として /Programs/Nano/8.3/Programs/GCC/14.2.0 がある
  • 一般的なLinuxディストリビューションとは構造が異なるため、初めて触れるユーザーは先にドキュメントを読むとよい

017.01リリースと運営体制の移行

  • 現在のバージョンは 017.01
    • USBドライブやDVDから起動できるLive環境
    • ハードドライブにもインストール可能
    • ISOは Downloads から入手できる
  • v017.01 は約5年の空白を経て登場したバグ修正アップデート
    • 前回のISOリリース以降に発生したいくつかの重要な問題に対処
    • 詳細な変更点は release notes で確認できる
  • プロジェクト運営も変わった
    • 創設者であり25年間GoboLinuxを率いてきた Hisham Muhammad が正式に退任
    • プロジェクトは @fyrak1s の運営のもとで継続される
    • Lucas Correia Villa Real、別名 paranoidd は2021年6月までHishamとともにGoboLinuxを維持してきた
  • コミュニティの拠点はチャット、フォーラム、Wikiに分かれている

1件のコメント

 
GN⁺ 2024-03-01
Hacker Newsのコメント
  • GoboLinuxの設計に強い反射的な拒否感を覚える人なら、20年前の「I am not clueless」¹という文書に、その背景と論理がかなり多く含まれている
    まだ完全に拒否感が消えたわけではないが、以前ほど強くはなくなった ;)
    ¹ https://gobolinux.org/doc/articles/clueless.html

    • 文章の雰囲気はHTMXTailwindのドキュメントに似ている
      「私たちが違うことは分かっている。とても単純だ。慣れていないかもしれないが、理解し扱うのは簡単だ。使わなくてもいい。私たちはこれが好きで満足している」くらいに要約できる
    • リンク先の記事の make all programs relocatable の部分で、libprefix を使ってすべてのアプリを書き直す必要があると言っているが、ここでの libprefix が何を意味するのか気になる
      Web検索では使えそうな結果が出てこない
    • 反射的な拒否感のかなりの部分は、機能的な要素よりも見た目の設計から来ているのではないかと思う
      たとえば最初の反応のかなりの部分は大文字表記から来ていて、大文字のPの Programs はWindowsの Program Files を思い起こさせ、感情的な拒否感を与える
      libx11 の代わりに LibX11 と入力しなければならないなら、少しイラッとしそうでもある
      Linuxのファイルシステムは通常、大文字小文字を区別するが、パッケージ名は大文字小文字だけが違う重複を避けるだろうし、ユーザーフレンドリーな階層を目指すディストリビューションがルートに大文字小文字だけが違うディレクトリを置く可能性も低そうだ
      それでも例が /packages/libx11/1.6.9/packages/gcc/9.2.0 だったなら、初期反応はずっと少なかっただろうし、そのような名前でも利点はまったく減らなかったはずだ
  • GoboLinuxのアイデアが主流のLinuxコミュニティに根付かなかったのは本当に残念だ
    Linuxのファイルシステム構造は完全にめちゃくちゃだ

    • 同意するが、NixGuix、そして私が最も多く作業しているSpackが基本的に同じ方向を取りながら徐々に勢いを得ているのを見るのはうれしい
      きちんと動作させるのは常に些細なことではなく、効率的にするのはさらに難しい
      ここ数年になってようやく、大半のソフトウェア配布について、このモデルが実際に保守可能な水準に近づいたと感じている
    • Nixはますます人気を得ている
      GoboLinuxモデルでは /Programs/Xorg/7.0 のようなバージョンディレクトリを手動で管理しなければならないが、Nixはパッケージのインストールパスをビルドレシピのハッシュで決め、その問題をなくしている
    • 今のところ一貫して筋が通っているのは /home/tmp くらいだと思う
      残りは、置きたいものをどこにでも入れるガラクタ置き場に近い
    • そのアイデアは確かに自分に刺激を与えてくれた
      GoboLinuxは、Linuxでは本当に好きなようにやっていいのだと最初に示してくれたプロジェクトだった
    • /opt/srv、好みによっては /usr/local/opt は、GoboLinuxのように構成要素を1つずつ管理する利点をかなり提供している
      ディストリビューションの観点では、すべてそれなりに理にかなっている
      dpkg -S this-file と打てば、/usr 内のファイルがなぜ存在するのかすぐに分かるし、ディストリビューションが全体像を描く役割を果たしている
      どの部分が最もめちゃくちゃだと見ているのか気になる
  • 従来のパスをGoboLinuxの対応するパスにマッピングして、Unixの遺産との互換性を透過的に保っている点が興味深い
    特別な魔法はなく、/bin/System/Index/bin へのリンクで、/usr/bin/usr/sbin も同様にすべての「バイナリ」ディレクトリが同じ場所を指している
    そのおかげで、どの標準パスからアクセスしてもファイルが動作するため、実際のファイルは /usr/local/bin/foo にあるのにスクリプトが /usr/bin/foo を参照して壊れる一般的なディストリビューションより、むしろ互換性が高いかもしれない

  • よく分かっていないので聞くのだが、macOSはある程度こういう形で動いているのか?
    アプリケーションが常にドラッグ&ドロップで管理する1つの「ファイル」のように見える方式は本当に良かった
    Ubuntuで何がどこにあり、どこにインストールされるのか把握しようとすると、自分がバカになったように感じる

    • Ubuntuで何がどこにあり、どこへ入るのかを知るのが難しい問題は、Linuxのファイルマネージャがホームフォルダやマウントされたドライブではないファイルシステムの一部を隠そうとすることで、さらに悪化している
      なぜそうするのかは理解できる
      平均的なLinuxインストールのディレクトリ構造は、技術に詳しい人にとっても紛らわしい迷路であり、主要ディストリビューションが対象にする一般ユーザーにとってはさらにひどい
      しかし結局それは原因ではなく症状に対処するやり方であり、もっと多くのLinuxディストリビューションがGoboのようにファイルシステム構造の現代化を真剣に考えるべきだと思う
      自分で試してみたい気持ちもある
      目標は、合理的に自己説明的で、初心者を危険な領域から遠ざけるよう案内し、ファイルマネージャがほとんど何も隠さなくても問題ない構造を作ること
    • macOSのバンドルは良いアイデアだったし今でも良いが、アプリは依然として普通 ~/Library のような変な場所に何かを散らかす
      Minecraftランチャーのように、バンドルの中にすべてのものやワールド、保存ファイルまで入っている場合は面白くなる
    • 原則としてはアプリケーションが1つの「ファイル」のように見える点には同意するが、実際には多くのアプリが ~/Library/Library に複数のファイルを置く
      macOSでも、一部のアプリを削除するには複数段階の手動削除手順に従わなければならないことは珍しくない
      特にログイン項目を追加するアプリならなおさら重要だ
      Windowsの「プログラムの追加と削除」は、少なくともアンインストールを実行する中央の場所を提供しており、ほとんどのアプリがその方式にきちんと従っている
    • Fedoraではrpmデータベースの照会が簡単だ
      dpkgでも同じことはできないのか?
    • Macではまさにその点が本当に嫌いだ
  • 最初のディレクトリ名を大文字で始めるのはあまりよくない
    パスを探索するときに余計な作業のように感じるし、毎回文字や数字と一緒に Shift を押さなければならないのは、日常的なコマンドライン利用ではかなり面倒

    • 上でリンクされている記事によると、GoboLinux のデフォルトシェルのように適切に設定されたシェルでは、/Programs の入力は /usr とまったく同じキー入力数だという
      スラッシュ、小文字の p、Tab で済む
    • PowerShell や cmd.exe で移動するときにそれがまったく気にならないのは、シェルが助けてくれるから
      使い勝手を犠牲にして PDP-11 の貴重な tick とメモリを節約しろとは強制しない
      「大文字小文字の区別こそ最高!」というファンたちが、それはもともとシステムの制約から生まれた結果にすぎないことを見落としているのは、いつ見てもおかしい
      機能ではない
      さらに、この点は明示的に扱われている
      set completion-ignore-case On だけでも生活はかなり楽になる
      GoboLinux を使わなくても、大文字で始まるファイル名ごとに Shift を1回押さずに済むから
      あるいは、1977年のまま生き続けてもいい
      自分の VT100、自分のルールだ
      後で「なぜ通常の移動に bash をそのまま使わず別のシェルを入れるのか」という話を見たが、自分のシェルのこともよく分かっていないということだ
    • 一目でディレクトリか通常ファイルかを区別できる慣例としては気に入っている
      また、どのシェルでも大文字小文字を無視する補完は提供できるし、Fish はデフォルトでやってくれる
    • 大文字は FSH/レガシーディレクトリとの衝突を避けるためのもの
    • あまりよくない
      Windows っぽさが残る
  • このプロジェクトには、私たちの認知負荷をかなり減らせる可能性がある
    成功してほしい
    追記: 今見たら20年もののプロジェクトだった

  • あまりにも合理的で涙が出るほど
    ライブラリの複数コピーを重複排除する作業は、本当に必要ならファイルシステムが処理すればよい
    結局はファイルレベルの重複なので、そのレベルで解決すべき

  • 非常に出来の悪いクローズドソースアプリケーションは、ユーザーのシステムにあまりにも多くを期待する
    Steam クライアントがその例で、sh スクリプトではなく bash スクリプトを提供し、Linux のマウントユーザー空間コンテナ要件のために Debian/Ubuntu 式のファイル配置を強く前提とし、複数のコマンドについて GNU 専用の特殊なオプションまで要求する
    32ビットライブラリも多い
    それでも ABI はまだ制御できているようで、おそらく binutils gas の .symver ディレクティブを使っているのだと思う
    少なくとも現在の混乱は Steam が私たちの喉元に押し込んでいるもので、ゲームをしないディストリビューションでない限り避けにくい

    • ほとんどの人はゲームをしないし、Linux ユーザーの中でも多くはそもそもプロプライエタリアプリを使わないと思う
      ゲーマー層の中でも、かなりの人は専用のゲーミング PC を別に持っている可能性が高い
  • 私よりずっと賢い人が、これが snap/FlatpakNixOS のようなディストリビューションよりなぜ優れているのか、あるいは本当に優れているのかを説明してくれるとありがたい
    深く理解していない状態で表面的に見ると、この方式がいちばん単純に見える
    もちろん、私の知識不足を前提にした話だ

    • 各アプリを自分のフォルダに入れるということだけを指しているなら、それだけでは隔離には十分ではなく、どこまで推し進めるかによっては非常に無駄が多くなり得る
      Flatpak と NixOS がより複雑なのには、それなりの理由がある
      たとえば、ディスク上でまったく同じバージョンの依存関係を重複して保存しない
    • snap と Flatpak は配布により重点を置いており、「サンドボックス化」されている
      引用符を付けたのは、セキュリティ上の問題があるため
      NixOS は既存プログラムとの互換性を壊す一方、Gobo はそうではない
      しかし NixOS のパッケージリポジトリは Gobo より圧倒的によく管理されており、Gobo 側は不完全で何年も遅れている
      それでも、ここで挙げられているものはすべて、Android がアプリを保存する方式より遅れている
      Android では各アプリケーションを配布しやすい単一ファイルとして配布でき、適切にサンドボックス化され、自分のディレクトリを持つ
      さらに他の方式が見落としている点として、各アプリは自分の状態を保存するためのアプリディレクトリ配下のサブディレクトリを持ち、ユーザーごとにも分けられている
  • GoboLinux の開発者たちは、人間が理解できるファイルシステム配置を本当に「賢く」作り上げていた
    いま使われている旧式の UNIX 慣習は、8.3 形式のファイル名制限、ストレージ不足、1GB 超のファイル問題といった制約がもはやない時代には、かなり分かりにくいものだと思う
    以前、バージョン管理ソフトウェアをホストしていたサーバーで GoboLinux 012〜015 を数年動かしていたが、全体として非常に良かった
    障害になったのは、必要なパッケージがない場合にレシピを作らなければならない点だった
    GoboLinux のレシピ記述言語自体は理解しやすかったが、1つのパッケージが十数個、あるいは数十個のライブラリに依存していることが多く、それを追跡し、バージョンを合わせ、ライブラリやパッケージの URL を探し、さらにレシピを作るのにかなり時間を取られた
    結局 Debian に移行したが、今でも設定ファイルが /etc にあり、バイナリが /usr/bin/usr/local/bin に入っているのを見ると身構えてしまう
    systemd は面倒でタコのようなものだと見る立場だ
    関連する .service ファイルを探すために find を使うことはよくあり、1か所にあると信じることもできず、コマンドラインも直感的ではない
    それに対して Gobo では、サービスを管理するスクリプト群がとても単純で扱いやすかった
    それでも、必要なものを apt getdpkg -i ですぐインストールできる便利さが、GoboLinux のはるかに合理的で賢い設計を上回った
    最近はサポートされる Linux ディストリビューションの数が、かつての無数の選択肢から減り、ほぼ常に Debian や Ubuntu が標準で含まれるため、リポジトリ外であってもパッケージやプログラムをインストールできない可能性は低い
    macOS も確かに GoboLinux と似た方式をある程度採用しており、そのため最近のかなりユーザーに敵対的なバージョンになる前は、コマンドラインから macOS を扱うのはかなり簡単だった
    たとえば USB ドライブは /Volumes にあり、プログラムの設定ファイルは ~/Library 以下にある

    • ちなみにサービスがロードされているなら、systemctl status foo を実行するだけで、2行目以降にどのファイルが関係しているかを正確に教えてくれる
      たとえば systemctl status getty@tty1.service の出力には Loaded: loaded (/lib/systemd/system/getty@.service; enabled; preset: enabled) のように表示されるので、/lib/systemd/system/getty@.service がすぐ分かる