LinuxとGNUシステム
リチャード・ストールマン著多くのコンピュータ利用者は、毎日GNUシステムの変更版を使っていますが、気がついていません。ひょんなことから今日広く使われているGNUの版は、“Linux”としばしば呼ばれ、多くの利用者は、それが基本的にはGNUプロジェクトで開発されたGNUシステムであることを知りません。
たしかに、Linuxというものは存在し、人びとはそれを使っています。ただし、それは単に使っているシステムの一部です。Linuxはカーネルです: システムの中のプログラムで、ほかのプログラムの実行のためにマシンのリソースを割り当てます。カーネルは、オペレーティング・システムの重要な部分ですが、それだけでは役に立ちません。カーネルは完全なオペレーティング・システム全体のコンテクストで初めて機能します。Linuxは通常GNUオペレーティング・システムと組み合わせて使われます。システム全体は基本的にはGNUであり、それにLinuxが加えられたものです。いわゆる“Linux”ディストリビューションは、すべて、本当はGNU/Linuxのディストリビューションなのです。
カーネルとしてのLinuxと、こちらもまた“Linux”と呼んでいるシステム全体との区別を、多くの利用者は、分かっていないのです。名称のあいまいな使い方は理解を促進しません。そのような利用者は、リーナス・トーバルズがオペレーティング・システム全体を1991年に少しの助けとともに開発したと、しばしば考えています。
ふつう、プログラマたちはLinuxはカーネルであると知っています。しかし、システム全体もまた“Linux”と呼ばれていることをふつうに聞いているので、カーネルからシステム全体が名づけられるのにふさわしい歴史をしばしば想像してしまいます。たとえば、リーナス・トーバルズがカーネルLinuxを書き上げて、その利用者がLinuxと一緒に動く他の自由ソフトウェアを探し回ってみたところ、(どういうわけか)Unixライクなシステムを作るのに必要なものはすでにほぼすべてそろっていた、というようなことを多くは信じています。
かれらが見つけたのは偶然の産物ではありません。それはまだ完全ではないGNUシステムだったのです。追加することで完全なシステムを構成するのに十分なだけの自由ソフトウェアが入手可能だったのは、GNUプロジェクトが1984年以来、そうした完全なシステムを作るべく作業してきたからでした。GNU宣言によって、GNUと呼ばれる自由のUnixライクなシステムを開発するという目標が打ち出されました。また、GNUプロジェクトの最初の声明において、GNUシステムの原案の一部が概説されています。Linuxが開始されるまでに、GNUはほぼ完成していたのです。
多くの自由ソフトウェアプロジェクトでは、ある特定の目的を持ったある特定のプログラムを開発するというのが目標になっています。たとえば、リーナス・トーバルズはUnixライクなカーネル(Linux)を書くことを目指していましたし、ドナルド・クヌースはテキストフォーマッタ(TeX)を書くことを目標にしていました。ボブ・シェイフラーはウィンドウシステム(Xウィンドウ・システム)の開発を目標にしました。プロジェクトからのある特定のプログラムによって、この種のプロジェクトの貢献を測るというのは自然なことです。
もし、わたしたちがこのようなやり方でGNUプロジェクトの貢献を測ろうとすると、どういう結論に至るでしょうか。あるCD-ROM販売業者によると、かれらの「Linux ディストリビューション」中ではGNUソフトウェアが全ソースコードの約28%という、単一の寄与としては最大で、またその中には、それ無しではシステムが成立しえない本質的かつ重要なコンポーネントが含まれていました。Linux自体は大体3%でした。(2008年において、割合は同様です。gNewSenseの“main”リポジトリ)で、Linuxは1.5%、GNUパッケージは15%です。) ですから、誰がそのシステム内のプログラムを書いたかという判断基準でそのシステムの名前を一つ選ぶということであれば、もっともふさわしい選択は“GNU”ということになるでしょう。
しかし、これは、この問題を深く考える方法ではないでしょう。GNUプロジェクトはなにか特定のソフトウェアパッケージを開発するプロジェクトではありませんでしたし、今もそうではありません。わたしたちはCコンパイラを開発しましたが、GNUプロジェクトは、Cコンパイラの開発をするプロジェクトではありませんでした。わたしたちはテキストエディタを開発しましたが、GNUプロジェクトはテキストエディタを開発するプロジェクトではなかったのです。GNUプロジェクトは、完全な自由のUnixライクなシステム: GNUを開発することを目標としたのです。
多くの人々がシステムの自由ソフトウェアに多大な貢献をしてきましたし、それらはみな称賛に値します。しかしそれが単なる有用なプログラムの寄せ集めではなく、統合されたシステムであるのは、GNUプロジェクトがそれをシステムとしてまとめ上げる目標を立てたからです。わたしたちは自由で完全なシステムを構成するのに必要なプログラムのリストを作り、そのリストに載っているものすべてを組織的に探し、書き、あるいは書いてくれる人を探しました。わたしたちは、アセンブラやリンカといった、重要だがあまりエキサイティングではない(1)コンポーネントを書きました。それら無しではシステムはありえないからです。システム・コンポーネントのいくつか、プログラミング・ツールは、プログラマの間でそれ自身、人気が出ました。しかし、ツールではない [2]たくさんのコンポーネントもわたしたちは書きました。チェスのゲーム、GNU Chessも開発しました。完全なシステムにはゲームも必要ですから。
90年代はじめまでに、わたしたちはカーネル以外のシステム全体を組み立てていました。また、Machの上で動くGNU Hurdというカーネルのプロジェクトをわたしたちは開始していました。このカーネルの開発の困難さは予想をはるかに超えるものでした。2001年にGNU Hurdは確かに動くようになりましたが、一般の使用に供するのに十分と言えるまでには、まだまだ長い道のりがあります。
幸運なことに、Linuxがあったので、わたしたちはHurdを待つ必要はありませんでした。1992年にトーバルズがLinuxを自由ソフトウェアとしてから、それはGNUシステムの最後の主要なギャップに適合したのです。そして、LinuxをGNUシステムに組み合わせ、完全なシステムを作ることができるようになりました: Linuxも含んだGNUシステムのバージョンです。別の言葉で言えば、GNU/Linuxシステムです。
それらを一緒に動くようにするということは、とるにたらない仕事ではありませんでした。いくつかのGNUのコンポーネント [3]は、Linuxとともに動くのに相当な変更が必要となりました。ディストリビューションとして完全なシステムに統合し、「箱から出してすぐに」使えるとするのも大変な作業でした。どうシステムをインストールし、起動するかという問題を扱う必要があったからです。— そういう段階にまだ到達していなかったので、それは、わたしたちがそれまで取り組んだことのなかった問題でした。ですから、様々なシステム・ディストリビューションを開発した人々が重要な仕事をたくさんしました。しかし、それは、ものごとの本質として、誰かによって必ずなされなければならない仕事だったのです。
GNUプロジェクトは、GNU/Linuxシステムを、GNUシステムそれ自体と同じく、支持しています。FSFは、GNU CライブラリのLinux関連の拡張の書き直しに資金援助し、いま、それらはうまく統合され、最新のGNU/Linuxシステムでは現在のライブラリのリリースを変更なしで利用するようになりました。FSFは、また、Debian GNU/Linux の開発の初期段階に資金提供をしました。
今日、たくさんのGNU/Linuxシステムの異なる変種(「ディストロ」としばしば呼ばれます)があります。そのほとんどが不自由なプログラムを含みます。—開発者は、むしろLinuxに関連した“オープンソース”の理念にしたがい、GNUの“自由ソフトウェア”の理念にしたがいません。しかし、完全に自由なGNU/Linuxディストロもあるのです。FSFは、こういったディストリビューションのいくつかにコンピュータ設備を提供しています。
自由なGNU/Linuxディストリビューションを作るのは単にさまざまな不自由なプログラムを除去するだけの問題ではありません。近年では、通常の版のLinuxには不自由なプログラムも入っているからです。これらのプログラムはシステムが起動したときにI/Oデバイスにロードされることが意図され、Linuxの「ソースコード」のなかに長い数列として含まれています。自由なGNU/Linuxディストリビューションを保守するには、いまや、自由な版のLinuxも保守することが必然的に伴うのです。
GNU/Linuxを使うかどうかは別にして、どうか“Linux”という名称をあいまいに使うことで一般大衆を混乱させないでください。Linuxはカーネルであり、システムに不可欠の重要なコンポーネントの一つです。全体としてのシステムはGNUシステムであり、Linuxが追加されたものなのです。この組み合わせについて語るときには、“GNU/Linux”と呼んでください。
参照として、“GNU/Linux” についてリンクを張りたいときは、このページとこちら https://www.gnu.org/gnu/th-gnuproject.htmlが良い選択です。カーネルのLinuxについて述べ、参照としてリンクを加えたいときには、https://foldoc.org/linuxが使うのに適したURLです。
あとがき
GNUのほかに、別にプロジェクトがもう一つあり、Unixライクなオペレーティング・システムを独立に作り上げています。このシステムはBSDとして知られ、カリフォルニア大学バークレー校において開発されました。80年代にはこれは不自由でしたが、90年代はじめに自由となりました。今日存在する自由なオペレーティングシステム [4]はGNUシステムの変種か、BSDシステムの一種と考えてまず間違いありません。
BSDはGNUのひとつの版かどうか(GNU/Linuxのように)、と、聞かれることがままあります。BSDの開発者たちは、GNUプロジェクトの例に触発されて、かれらのコードを自由ソフトウェアとしました。GNUの活動家によって励まされてきましたが、かれらのコードにはGNUとほとんど重複するところがありません。今日のBSDシステムもいくつかのGNUプログラムを使っています。GNUシステムとその変種がいくつかのBSDソフトウェアを使っているのと同様に。しかし、全体から見れば、この二つは別々に進化してきたものです。BSDの開発者はカーネルを書き、GNUシステムに加えたわけではありません。ですから、GNU/BSDというような名前は状況に則したものではないでしょう。 [5]
脚注
- エキサイティングではないが重要なコンポーネントには、GNUアセンブラ(GAS)、リンカー(GLD) (両方とも今はGNU Binutilsパッケージに入っています)、GNU tar、などを含め、たくさんのものが含まれます。
- たとえば、Bourne Again SHell (BASH)、PostScriptインタプリタGhostscript、GNU Cライブラリはプログラミング・ツールではありません。GNUCash、GNOME、GNU Chessもそうではありません。
- たとえば、GNU Cライブラリです。
- これが書かれてから、だいたい全部が自由なウィンドウズライクなシステムが開発されましたが、技術的にはこれはまったくGNUあるいはUnixに似たものではありませんから、この問題に関係しません。Solarisのカーネルのほとんどは自由になりましたが、自由なシステムをそれから作りたいとすると、カーネルの足りない部分を置き換えるほかに、これもまた、GNUかBSDに載せる必要があるでしょう。
- 一方、この論説が書かれて何年かたった後、GNU Cライブラリは、BSDカーネルのいくつかの版に移植されました。これにより、GNUシステムをBSDのカーネルと組み合わせることが簡単になりました。GNU/Linuxのように、まさにこれらはGNUの変種です。ですから、たとえば、システムのカーネルに応じて、GNU/kFreeBSDやGNU/kNetBSDのように呼ばれます。ふつうの典型的なデスクトップ利用者がGNU/LinuxとGNU/*BSDを区別することはほとんどできないでしょう。
さらに詳しい情報はGNU/LinuxのFAQ と なんでGNU/Linux?もご覧ください。