GoboLinux

**GoboLinux**（ゴーボーリナックス）とはフリーかつオープンなソフトウェアオペレーティングシステムであり、その最も有名な特徴としては伝統的なLinuxファイルシステムの再構成が挙げられる。ほとんどのUnix系システムと違いFilesystem Hierarchy Standardに準拠しないため、GoboLinuxシステムの各プログラムは自身の（固有の設定を含む）ファイルを全て発見できる独自のサブディレクトリツリーに格納される。このため、プログラム "Foo" に固有のファイルとライブラリは全て`/Programs/Foo`に格納される。GoboLinux開発者はこれによってシステムがより綺麗になるとしている

## 概要
**GoboLinux**のファイルシステム階層構造は、ほとんどのUnix系オペレーティングシステムで採用されている伝統的なファイルシステム階層構造からの根本的な脱却を象徴している。伝統的なファイルシステム階層構造とは（実行可能ファイル用に`/bin`があり設定ファイル用に`/etc`があるというように）特定の種類のファイルを共通の標準サブディレクトリにまとめて格納する階層構造であり、パッケージ管理システムはどのファイルがどのプログラムに属しているかを追跡するためにこの階層構造を使用する。GoboLinuxにおける各プログラムのファイルは、各プログラム専用のサブディレクトリに配置される。GoboLinuxの作成者は「ファイルシステム自体がパッケージデータベースである」と言っており、GoboLinuxパッケージシステムはパッケージデータベースとしてファイルシステム自体を使用する。これによってより簡単で、より散らかりにくいディレクトリツリーを生成することが可能だと言われている。GoboLinuxは伝統的なLinuxファイルシステム階層構造と完全な互換性を維持しながらこれを完全に達成するためにシンボリックリンクを使用し、必要に応じて*GoboHide*と呼ばれるカーネルモジュールを使用する。

GoboLinuxの作成者らは、自らの設計により伝統的なファイルシステム階層構造からの脱却という「モダニズム」だけではなく、それ以外の「モダニズム」も導入されると発言している。このようなモダニズムの例としては、（実行可能ファイルの置き場所となる`/bin`、`/usr/bin`および`/usr/local/bin`のような）類似の伝統的ディレクトリ間における若干の区分けを排除することが挙げられる。GoboLinuxの設計者は、設計にモダニズムが導入されることで他のLinuxディストリビューションにくらべシェルスクリプトが動かなくなることが減ると主張している。GoboLinuxではユーザーが同じプログラムの異なるバージョンを同時にインストールすること（さらには同時に実行すること）ができる。さらに存在しないファイルへの参照は単に壊れたリンクとなり結果としてアクティブにならないため、GoboLinuxはパッケージ管理インデックスがファイルシステムと必ず同期すると言われている。さらにGoboLinuxのファイルシステムを変更することで、System VやBSDスタイルのinitシステムを使用しない全く新しいブートシステムのような、既存のものとは異なる新システムを導入できる。

## ファイル階層構造

GoboLinuxの設計はNeXTSTEP、AtheOSおよびBeOSのような初期のシステムに影響された。これらのシステムは全て、UNIXとの互換性をかなりの程度まで維持しながら独自のファイルシステム構造を採用したものである。GoboLinuxツリーのルートにはPrograms、Users、System、Files、Mount、Depotの6個のディレクトリが存在する。それぞれの内容を以下に示す。

* **/Programs/** - このディレクトリにはシステムにインストールされたプログラムごとに1つのディレクトリが含まれる。各プログラムのディレクトリには1つ以上のバージョンのディレクトリが順番に含まれ、必要に応じてSettingsおよびVariableサブディレクトリも含まれる。Programs配下パスの例としては、`/Programs/Bash/3.0/bin/bash`や`/Programs/Xorg-Server/Settings/X11/xorg.conf`が挙げられる。
* **/Users/** - このディレクトリには各ユーザーのホームディレクトリが含まれる。ユーザー "harley" のホームディレクトリは`/Users/harley`である。
* **/System/** - このディレクトリには重要なシステムファイルが含まれる。システムファイルのほとんどはシステムアプリケーション（例えば`/System/Settings/passwd`）とGoboLinuxスクリプト（例えば`/System/Index`）が管理する。
** **/Index/** - ファイルシステムインデックス:`/Programs`配下にあるファイルへのシンボリックリンクと共に、以下のディレクトリが含まれる:
*** **bin/** - 各プログラムの`bin`ディレクトリにあるファイルへのリンクが含まれる。
*** **include/** - このディレクトリには各プログラムの`include`ディレクトリからのファイルへのリンクが含まれる。
*** **lib/** - 各プログラムの`lib`ディレクトリにあるファイルへのリンク。
*** **share/** - 各プログラムの`share`ディレクトリにあるファイルへのリンク。
** **Environment/** - 環境ファイルへのリンク。各プログラム自身が固有の環境変数を登録できるようにするために、環境ファイルはキャッシュファイルにコンパイルされシェルによりロードされる。
** **Tasks/** - 各プログラムのブートタスクである`Resources/Tasks`ディレクトリへのリンク。
** **Settings/** - 設定ファイルと各プログラムの`Settings`ディレクトリにあるファイルへのリンク。
*** **BootScripts/** - システムブート中に使用されるスクリプト。これは`/Programs/BootScripts`配下にあるディレクトリ`Settings/BootScripts`へのシンボリックリンクである。
** **Variable/** - ログ、テンポラリ、トランジェントおよびスプールファイルといった多目的ファイル。
*** **tmp/** - テンポラリファイル。
** **Kernel/** - カーネル関連のディレクトリ。
*** **Boot/** - オペレーティングシステムブートストラップ中に使用されるプログラムと設定ファイル。ここはカーネルイメージとブートローダ設定ファイルが置かれる場所である。
*** **Devices/** - デバイスファイル（Udevにより管理される）。
*** **Modules/** - カーネルリリースにより編成される、様々なカーネルモジュールが含まれる。
*** **Objects/** - （カーネル2.6シリーズのsysfsファイルシステムに導入された）カーネルデバイスツリーのビューを提供する。
*** **Status/** - カーネルステータスファイル（`proc`ファイルシステムにより管理される）。
* **/Files/** - Filesには、プログラムが使用するがプログラム自身の一部ではない構造化されたデータが格納される。これらのファイルは通常フォント、コーデック、およびプラグイン（またはその他パッケージ管理を必要としないであろうファイル）のようにスタンドアローンなエンティティである。加えて、各プログラムはサイト固有のデータを保存するためにプログラム自身のサブディレクトリを定義するかもしれない。例として、*Compile*（GoboLinuxパッケージコンパイルフロントエンドツール）は自身のサブディレクトリを定義する。
* **/Mount/** - 追加のローカルファイルシステムやリモートファイルシステム用のマウンティングポイント。一般的なサブディレクトリはCD-ROM、フロッピーおよびZipである。
* **/Depot/** - ユーザーファイル用のリポジトリ。このリポジトリはユーザーが適当に編成するように意図されている。`/Depot`のサブディレクトリは標準GoboLinux階層構造の一部とみなされない。

## "Compile" プログラム
***Compile***はソースコードtarballのダウンロード、解凍、コンパイルと、それらの結果として得られた実行可能コードのインストールを、"recipes" として知られる単純なコンパイルスクリプトを使用して（`Compile foo`のように）全て1つのコマンドで行うプログラムである。

Compileシステムは、FreeBSD Ports collectionを基盤とするGentooのPortageシステムとやや類似しているところがある。しかしながら、PortageはFilesystem Hierarchy Standardと互換性のある伝統的なファイルシステム階層構造用に作られている。一方Compileは、GoboLinux独自のファイルシステム階層構造の効能をパッケージ管理の領域に拡張する。このためGoboLinuxでは、ファイルシステム自体がパッケージ管理データベースの一種として自ずから役立つことになる。

CompileプログラムはGoboLinuxバージョン011に導入された。それ以前はGentooのパッケージ管理システムをGoboLinuxに移植し、*GoboPortage*という名前のもとにSourceForge.netプロジェクトとしてその移植を開発することについての議論があった。

Compileのその他の機能を以下に示す:
;各プログラム自身におけるダウンロードサイトの使用:ディストリビューションのリポジトリ（またはそのミラー）はrecipesのダウンロード用にしか使用されない。recipesは即座にダウンロードすることやバッチでダウンロードすることができる。
;最小限度で宣言型指向のコンパイルスクリプト:典型的な "configure; make; make install" ソフトウェアは、大幅にメンテナンスがし易くなるよう2行にスクリプト化されることが多い。
;GoboLinuxスタイル依存性のサポート:ユーザーが「手動で」コンパイルしたソフトウェアは検出機構により考慮される。
;パス不可知論:rootlessなGoboLinuxインストール（つまり任意のGoboLinux以外のディストリビューションにおけるホームディレクトリへのインストール）で動作する。

## 伝統的ディストリビューションとの違い
### ファイル階層構造
GoboLinuxの階層構造では、ファイルはシンボリックリンクを使用して`/System/Index`をルートとするインデックスライクな構造で機能的カテゴリに分類されている。全ての実行可能ファイルは`/System/Index/bin`配下にアクセス可能であり、全てのライブラリは`/System/Index/lib`配下にアクセス可能であるなどといった具合である。これにより、`/usr`に格納される特に重要ではないファイルと、ルートディレクトリのサブディレクトリに直接格納される極めて重要な緊急ファイルとの間に生ずる区分けのような、Filesystem Hierarchy Standardの伝統的区分けの多くは排除される。GoboLinuxの開発者らは、これらの区分けはかつては大変有用であったが、GoboLinuxのスキーマではもはや必要ないと主張している。

### シンボリックリンク
一般的なUNIXディレクトリのほとんどとGoboLinuxツリーとを関連付けるシンボリックリンクが存在するため、`/etc`、`/var/log`および`/usr/bin`のような期待通りのディレクトリを見つけることができる。これらのシンボリックリンクは`/System/Index`ツリー内に存在する、機能的に同等なファイルを指し示しているため、（`/bin/sh`や`/etc/passwd`といった）伝統的に決まっているパス名は正しく解決される。これらのUNIXと互換性のあるディレクトリは、GoboHideはLinuxに隠しファイルのサポートを実装するための*GoboHide*と呼ばれるカスタムカーネル修正を使用することでビューから隠蔽されている。GoboHideは美的利用のみに使用されるため、オプション機能である。

### ブートシステム
BSDスタイルやSystem Vスタイルのinitを使用するほとんどのLinuxディストリビューションと異なり、GoboLinuxは独自の初期化手順を使用する。`/System/Settings/BootScripts`にはブート手順の全体について命令するファイルがいくつか存在する。`/System/Settings/BootScripts`に含まれる`BootUp`と`Shutdown`は、それぞれシステムブートやシャットダウンを行う。加えて、`/System/Settings/BootScripts`にはシステムを初期化する様々な方法を指定するための「ランレベル」スクリプト（例えばシングルユーザー用の`Single`、マルチユーザー用の`Multi`、グラフィックモードによるブート用の`Graphical`など）を定義することもできる。「ランレベル」スクリプトはブートローダーメニューから制御できる。`/System/Settings/BootOptions`ファイルはスクリプト以外のファイルから場所固有の設定を分離する。アプリケーション固有のタスクは`/System/Tasks`から見つけることができ、これらはブートスクリプトと呼ばれる。

## リリース
リリースは八進法を基盤とする表記で番号付けされる。著者によると、八進表記であれば多くの自由ソフトウェアのバージョン番号でよく見受けられるように先頭にゼロを付けることができ（先頭のゼロはその数が八進表記であることを表すのが普通であるため）、さらに1999年のLinuxディストリビューションに発生した「バージョン番号競合」に対処法できるためにこのスキームを選んだとのことである。十進数として読む場合に八進数を使うと当然の事ながら8リリースごとに「バージョン衝突」が発生する。リリースの中には他のリリースよりも安定しているものもあるという意味合いを避けるために、バージョン013までGoboLinuxは「ポイントリリース」を作成しなかった。この伝統は、バグ修正に焦点を当てた014のアップデートである、バージョン014.01で破られた。

* 017.01 - 2025年3月31日 : Linuxカーネルバージョン6.12.16
* 017 - 2020年5月24日 : Linuxカーネルバージョン5.6.10
* 016.01 - 2017年4月4日 : Linuxカーネルバージョン4.9.16
* 016 - 2016年12月15日 : Linuxカーネルバージョン4.8.2、Awesomeデスクトップ。
* 016-beta - 2016年11月8日
* 016-alpha - 2016年10月10日
* 015 - 2014年5月7日 : */System/Index*階層を導入。Linuxカーネルバージョン3.14.2、Enlightenment 18デスクトップ。
* 015-beta - 2014年3月4日
* 015-alpha - 2014年1月21日
* 014.01 - 2008年3月30日 : Updates of 014のアップデートで、バグ修正といくつかのパッケージのアップデートを組み込んだ。
* 014 - 2007年12月31日 : パッケージのアップデート、バグ修正、そしてGoboLinux管理ツールの新しいバージョンを組み込んだ。
* 013 - 2006年11月2日 : ファイルシステムイベントをリスンしアクションを自動で行うよう割り当てるためのツールである、*Listener*を導入。
* 012 - 2005年6月6日 : グラフィカルシステム管理ツールの*[http://gobolinux.org/index.php?lang=en_US&page=manager Manager]*を導入。
* 011 - 2004年6月7日 : GoboLinuxパッケージコンパイルツールである*[https://gobolinux.org/index.php?page=compile Compile]*を導入。
* 010 - 2004年1月7日 : Live CDデスクトップ環境を通じてアクセス可能なグラフィカルインストーラーの追加。
* 007 - 2003年10月22日 : `Resources`と呼ばれるパッケージ毎のメタデータディレクトリを追加。
* 006 - 2003年5月9日 : *[http://www.gobolinux.org/?page=doc/articles/gobohide GoboHide]*の導入とプログラムのサンドボックス化されたインストールを採用。
* 005 - 2003年 : GoboLinuxが世に送り出される。
* バージョン005以前のリリースは初期開発者グループのみが使用していた。

## 移植
Gobolinuxは公式にはx86-64用のみ(015以前はi686用のみ)が作成されており、i386への移植を行うプロジェクトが存在したが、休眠してしまいその移植は不完全なままである（このプロジェクトは015-alphaリリースから休眠状態となった）。Gobolinuxの移植はARMアーキテクチャやSuperHといった組み込みアーキテクチャのために作成され、移植作業はBootstrapというツールで容易に成し遂げられた。このツールは移植作成を自動化するため特別に開発されたものである。

## 脚注

## 外部リンク
* 
* 
*