GNU

歴史

GNUオペレーティングシステムの開発はマサチューセッツ工科大学 (MIT) 人工知能研究所でリチャード・ストールマンによりGNUプロジェクトとして開始され、1983年9月27日にnet.unix-wizardsおよびnet.usoftというニュースグループで彼が公式に発表した。ソフトウェア開発が始まったのは1984年1月5日であり、この日はそれまでストールマンが勤務していたMIT人工知能研究所が、GNUの所有権を主張することやフリーソフトウェアとしての配布へ干渉することを阻止するために彼が同研究所を辞めた日でもある。ストールマンが選んだGNUという名称には様々な言葉遊びが含まれており、その中にはThe Gnuという歌も含まれている。
GNUの目標は、完全にフリーソフトウェアで構成されるオペレーティングシステムを実現することであった。ストールマンは1960年代や1970年代のコンピュータユーザーのように、ユーザーを自由にしたいと考えていた。その自由とは、使っているソフトウェアのソースコードを使って研究できる自由であり、ソフトウェアを他の人々と共有できる自由であり、ソフトウェアを修正できる自由であり、修正版を配布できる自由である。この哲学は後にGNU宣言として1985年3月に公表された。
GNU宣言の中でストールマンは「基本的カーネルは存在するが、Unixをエミュレートするにはより多くの機能が必要だ」としている。ここでストールマンが想定したカーネルは、マサチューセッツ工科大学が開発したRPC型カーネルTrixである。これは作者がフリーソフトウェアとして配布しており、Version 7 Unixと互換性があった。そして1986年12月、開発者らはこのカーネルに修正を加える作業を開始しようとした。しかし、開発者らはこれが出発点としてはふさわしくないと判断した。何故ならTRIXは「不明確で高価な68000マシン」でしか動作せず、使用するにはまず他のアーキテクチャへの移植が必須だったからである。
ストールマンはIncompatible Timesharing System (ITS) に関わっていた。ITSはPDP-10コンピュータアーキテクチャ用にアセンブリ言語で書かれた初期のオペレーティングシステムだが、PDP-10自体が開発・製造されなくなったために消えていった。このためストールマンは移植性のあるソフトウェアが必要だと考えていた。そのため、GNUの開発にはシステムプログラミング言語としてCとLISPを使用し、さらにGNUをUNIX互換にする決定がなされた。当時UNIXは既にプロプライエタリなオペレーティングシステムとして広く使われていた。UNIXの設計はモジュール性が高く、部分ごとに再実装することが可能だった。
GNUに必要なソフトウェアの大部分は一から書かれたが、TeX組版システムやX Window System、さらにMachマイクロカーネルといった共有可能なサードパーティーフリーソフトウェアコンポーネントは既存のものを流用した。なおMachは（GNUの公式カーネルである）GNU Hurdの、GNU Machコアの基礎を形成している。前述したサードパーティーコンポーネントを除くGNUのコードの大部分はボランティアが書いたものであり、具体的には個人が余暇時間内や会社の業務内で書いた部分、および教育機関や非営利団体が書いた部分で構成されている。1985年10月、ストールマンはフリーソフトウェア財団 (FSF) を創設した。1980年代後半から1990年代にはFSFがソフトウェア開発者を雇い、GNUで必要となるソフトウェア作成を行わせた。
GNUプロジェクトの初期の計画では、BSD 4.4-Liteのカーネルを採用することになっていた。しかし、バークレーのプログラマの協力が得られなかったため、ストールマンは1988年にカーネギーメロン大学が開発したMachカーネルを採用することにした。ただし、MachにはAT&T由来のコードが使われていたため、それを取り除いてフリーソフトウェアとして使えるようになったのは1990年である。HurdのアーキテクトだったThomas Bushnellは後に、BSDカーネルの採用を見送ったことでプロジェクトは大きく後退しており、そういう意味でもBSDカーネルを採用すべきだったと述べている。
カーネルの設計は、GNUの中でもUNIXから最も大きく異なる部分である。GNUのカーネルはマルチサーバ型マイクロカーネルであり、従来のUNIXカーネルの持つ機能をサーバと呼ばれる複数のプログラムで構成している。Machのマイクロカーネルは非常に低レベルのカーネル機能しか提供していないため、GNUプロジェクトではカーネルの上位レベルの部分を一種のユーザープログラムの集合体として開発しなければならなかった。この集合体を当初Alixと呼んでいたが、Thomas BushnellはHurdと呼ぶことを好み、Alixの名はそのサブコンポーネントに移され、最終的には使われなくなった。その後、Hurdの開発は技術的問題がいくつも発生し、なかなか進展しない状況になった。
GNUが有名になるにつれて、GNUに興味を持つ企業が現れはじめた。それらの企業は開発援助をしたり、GNUのソフトウェアや技術サポートを組み合わせて商売するようになっていった。その中で最も成功した企業としてはシグナスソリューションズが知られている（同社は現在、レッドハットの一部となっている）。
1992年、最重要コンポーネントであるカーネルのGNU Hurdを除く全てのコンポーネントが完成した。1991年にはリーナス・トーバルズが独自にLinuxカーネルの開発を始めており、1992年にはLinuxのバージョン0.12がGNU General Public Licenseライセンスでリリースされ、この最後の空白を埋めた。LinuxとGNUを組み合わせることで、世界初の完全にフリーソフトウェアで構成されたオペレーティングシステムとなった。LinuxカーネルはGNUプロジェクトの一部ではないが、その開発にはGCCなどのGNU製プログラミングツールが使われている。
2002年にストールマンはGNU/Hurdのリリースについて楽観的声明を発表したが、開発は2016年現在も続いている。Hurdの最新リリースはバージョン0.9である。動作はそれなりに安定しており、重要なアプリケーションを使うのでなければ十分使えるレベルである。

コンポーネント

GNUシステムの基本コンポーネントにはGNUコンパイラコレクション (GCC)、GNU Cライブラリ (glibc) およびGNU Core Utilities (Coreutils) だけでなく、GNUデバッガ (GDB)、GNU Binutils (binutils)、GNU Bashシェル、およびGNOMEデスクトップ環境も含まれる。GNUの開発者はGNUアプリケーションやユーティリティのLinuxへの移植に貢献しており、それらのアプリケーションやユーティリティはBSDの派生、SolarisそしてmacOSといったLinux以外のオペレーティングシステムでも広く利用されている。
GNUのプログラムの多くは、Microsoft WindowsやmacOSといったプロプライエタリプラットフォームを含む他のオペレーティングシステムに移植されている。GNUのプログラムはプロプライエタリUNIX上の相当するソフトウェアよりも信頼性が高いことが示されている。
2015年11月の時点で、公式GNU開発サイトにホストされたGNUのパッケージ数は合計で466個存在する（終了したパッケージも含む。それらを除くと383個である）。

GNUの派生

GNUプロジェクトの公式カーネルはGNU Hurdマイクロカーネルである。しかしながら、2012年の時点でLinuxカーネルがLinux-libreという形で公式にGNUプロジェクトの一部となった。Linux-libreは、Linuxカーネルから全てのプロプライエタリコンポーネントを削除した派生物である。
FreeBSDのカーネルのようなLinux以外のカーネルも、実用的なオペレーティングシステムを構成するGNUソフトウェアと連携して機能する。FSFはGNUツールやユーティリティと共に利用されるLinuxはGNUの派生とみなすべきであると主張しており、そのようなシステムをGNU/Linuxという用語で表現するよう奨励している（なおこのことがGNU/Linux名称論争の原因となっている）。GNUプロジェクトはgNewSense、TrisquelおよびParabola GNU/Linux-libreといったLinuxを用いた派生を支持している。カーネルとしてHurdを使用しない派生でLinux以外のカーネルを用いるものとしては、BSDカーネル上にGNUの初期計画を実現した、Debian GNU/kFreeBSDやDebian GNU/NetBSDがある。さらにGNUをNetBSDやOpenSolarisなどのカーネルで動作させる移植プロジェクトもある。

コピーライト、GNUライセンスと管理

フリーソフトウェア財団は既存のプロジェクトへの小規模な変更のリリースをパブリックドメインとすることが無難だと考えているが、GNUプロジェクトでは、その貢献者に対してGNUパッケージの著作権をフリーソフトウェア財団に譲渡することを推奨している。ただしこれは必須ではない。パッケージのメンテナは自身が維持するGNUパッケージの著作権を維持することができるが、使用される（GNU GPLのような）ライセンスは著作権保持者しか強制させることができないので、この場合はフリーソフトウェア財団ではなく著作権保持者がライセンスを強制する。
GNUに必要なソフトウェアの開発のため、ストールマンはユーザーがフリーソフトウェアを共有し変更する自由を保障することを目的とした、GNU General Public Licenseと呼ばれるライセンスを書いた（最初はEmacs General Public Licenseと呼ばれた）。彼はジェームズ・ゴスリンとのUniPressと呼ばれるプログラムに対するGNU Emacsプログラムにおけるソフトウェアコードの使用についての論争をめぐる経験をふまえてこのライセンスを書いた。1980年代のほとんどの期間において、Emacs General Public LicenseやGCC General Public LicenseのようにGNUパッケージごとに個別のライセンスが存在した。1989年にFSFはGNUプロジェクトのソフトウェアだけでなく全てのソフトウェアに使用できる単一のライセンスであるGNU General Public License (GPL) を発表した。
現在GPLはGNUソフトウェアのほとんどで使われており、GNUプロジェクトとは関係のないフリーソフトウェアでもよく使われている。GPLは最も一般的に使用されるフリーソフトウェアライセンスである。GPLでは、著作物の受領者はそれを実行し、複製し、修正し、再配布できるが、その再配布物のライセンスに制限を加えることを許さない。この思想はコピーレフトと呼ばれることが多い。
1991年、GNU Cライブラリをプロプライエタリ・ソフトウェアとリンクできるようにするためにLibrary General Public Licenseとして知られるGNU Lesser General Public License (LGPL) が書かれ、さらにGNU GPLのバージョン2がリリースされた。2000年には文書用にGNU Free Documentation Licenseが書かれた。GPLとLGPLは2007年にバージョン3に修正され、ユーザーが自身のデバイスで修正されたソフトウェアの実行を妨げるハードウェアの制限からユーザーを保護するための条項が追加された。
GNUプロジェクトのライセンスは、GNU独自のソフトウェアパッケージだけではなく、GNUが直接的には作成していないソフトウェアプロジェクト(あるいはパッケージ)でも使用されている。GNUソフトウェアと組み合わせて使用されることが多いソフトウェア、例えば、Linuxカーネルなどがその代表である。一方、対照的に、Unix系のGUI環境を構築するX Window Systemは、Linuxディストリビューションでも標準的に使用されてきたソフトウェアパッケージであるが、こちらはGNUライセンスではなく、パーミッシブ・ライセンスに基づいてライセンスされる。前者が多数派であり、後者は少数派である。

ロゴ

GNUのロゴはヌーの頭である。元々はEtienne Suvasaによって描かれ、現在ではAurelio Heckertがデザインした大胆でシンプルなバージョンが好まれている。これはGNUソフトウェアや印刷されたり電子化されたGNUプロジェクトの文書に表示され、フリーソフトウェア財団のマテリアルにも使われる。
なお本章で示したGNU30周年記念ロゴは公式ロゴの修正バージョンであり、2013年9月にGNUプロジェクト30周年記念としてフリーソフトウェア財団によって作成されたものである。