chouett0's note

掃きだめ的なsomething

UNIXとLinuxとBSDと色々

はじめに

この記事の内容はUNIXLinuxBSDとその他色々なOSの違いや成り立ちを忘れないよう、自分なりに理解するためのまとめです。新たな発見も無ければ間違いが多く含まれていると思われます。

UNIX

UNIXとは、言わずと知れた現在にUbuntuRHELなどのLinuxの誕生に影響を与えたOSです。1969年に米国のAT&Tベル研究所で開発が行われ、1971年に初めて公開されました。当時はアセンブラ言語での実装が一般的であったため、初期のUNIXアセンブラ言語で記述されていましたが後にC言語で改めて実装がなされました。オペレーションシステムを高級言語で記述するという試みは、先駆的であり他のプラットフォームへの移植をようにしました。
UNIX高級言語で記述された初めての言語」と言われますが、実は最初はアセンブラ言語で実装されていた、と言うのは初耳でした。さらに、当時では高級言語でOSが記述されるという事自体が一般的ではない(と言うよりもCの実装が今より使える言語ではなかった?)と言うことも意外でした。

UNIXの誕生にはさらに深い歴史があり、1960年代中ごろにマサチューセッツ工科大学ベル研究所、General Electric(GE)がGEのメインフレームコンピュータ用に開発した「Multics」というタイムシェアリングシステム、つまりは複数ユーザで様々な処理を行うことができるシステムを共同開発していました。しかし、革新的かつタイムシェアリングシステムという様々な処理を行うというコンセプトからわかるように、機能が増えていっていくに比例してその複雑さは増す一方となりついにはベル研究所Multics開発から離脱します。そこで、よりシンプルなシステムを開発しようとして生まれたのがUNIXです。つまりは、UNIXMulticsの複雑さを複雑さを解消する目的で開発されたということです。
このことから、UNIXMulticsの影響を受けて開発されたのだろうと解釈しました。また、「UNIX」という名称の由来も初期のUNIX、このころは「Unics」というシステムはMulticsと違いシングルタスクでのみしか動作できなかったのでMultiの逆で単一という意味の「Unit」から生まれたようです。 余談ですが、UNIXAT&Tの様々な事情によりソースコードが公開され、大学や企業に広まったようです。

GNU

初期のUNIXの公開から約10年後の1983年にリチャード・ストールマンによって、「フリーソフトウェアのみで構成されたUNIXの完全互換ソフトウェア」を開発するという目標の元作り出されたGNUは、ライブラリ、コンパイラテキストエディタUnixシェル、Windowシステムなどを備えていたものの、低水準の要素であるデーモンやカーネルデバイスドライバといったものは利用できなかったようです。後にLinuxを世に送り出すリーナス・トーバルズは、GNUカーネルが利用できなかったこともLinuxを開発した要因の一つであると述べています。
この記事を書くまでGNUについて詳しく調べてみたことがなかったのですが、GNUはOSでありLinuxとはまた違ったコンセプトで開発されたということがわかりました。さらに、LinuxUNIXを無料で利用するために誕生したという話を聞いていたので、意外なものが関係しているのだなと思いました。

BSD

1970年代後半から1980年代にかけて、カリフォルニア大学バクレー校のCSRGはUNIXの派生版としてBSDを開発しましたが、UNIXの利用者のライセンスを制限する、つまりは現代でいうところの著作権のようなものの関係がありBSDを公開することができなくなってしまいました。そこで、ライセンスに関わる部分を削り必要な部分を書き換えました。さらに、386で動かすコードを補って1992年にウィリアム・ジョリッツによってリリースされたのが386BSDであり、NetBSDFreeBSDの祖先となるシステムです。当時、現代的なマルチプロセスやメモリ保護などの機能が実装できる安価な32bitパーソナルコンピュータが普及され始めたこともあり、BSDのようなUNIXの移植が行われるようになりLinuxの開発にも影響しました。 BSDの成り立ちが私の中で一番あいまいで、BSDUNIXの関係性がイマイチ理解できていませんでしたが 、BSDLinuxの開発にも影響していたということは知らなかったのでなるほどなと思いました。また、この頃から今のようなPCが徐々に世に出ていくと考えるとなかなか面白くもあり時代が変わっていくのだなと感じます。

Linuxの誕生

上記BSDでもあるように、1990年代には比較的安価で買えるIntel 80386CPUを搭載した32bitPC/AT互換パーソナルコンピュータが普及し始めていました。その当時ヘルシン大学の学生であったリーナスはオペレーティングシステムについて強い好奇心を抱いていました。そこで彼はその安価なコンピュータを使用してUNIX互換の動作をするOSを動作させたいと考えますが、商業UNIXは高価であり、ここでは登場していませんがMINIXという教育用のOSは制限が多かったため、彼の思うようにはいきませんでした。そこで、自作のターミナルエミュレータファイルシステムなどのUNIX互換APIを実装して独自のOSカーネルを開発しました。これが後のLinuxカーネルになっていきます。
Linuxの開発はMINIX上で行われていたため、MINIXで動作するソフトウェアはLinuxでも動作可能でしたが後にLinux上でLinuxの開発が行えるようになると、MINIXコンポーネントGNUのプロダクトによって置き換わっていきました。
当時のLinuxの実装は単純であり他のUNIX互換のシステムと比べても見劣りするもので、機能面でLinuxは劣っていたものの自由なUNIX互換カーネルを利用でき、かつライセンスなどの問題が発生しないシステムは当時Linuxのみであった。
当時の、PCで動作するフリーのUNIX環境を求めるユーザたちの多くはMINIXを利用していたため、リーナスはMINIXメーリングリスト上でLinuxを公開しGPLの下で利用しました。ちょうど32bit PC/AT互換パーソナルコンピュータが普及し始めた時期であったためGPLでの改良が可能であったため、多くの開発者たちへ改良を促しました。その結果として開発者たちはLinuxカーネルをより良いものにしていくと同時に、GNUコンポーネントと統合する作業を行い、今のLinuxの形となりました。 今でこそ多くのOSの素となっているLinuxですが、当初は他のOSとは比較できないほど未熟であったのにも関わらずフリーかつLinuxの開発に影響を与えたGNUよりも早い段階で独自のカーネルを形にしていたというところを武器にして負けず劣らずな戦いを繰り広げていたというのはとても面白いですね。また、やはりOSSとしての利点として多くの開発者たちの手によってより良く改良されていったのも要因の一つなのかもしれませんね。さらに、上記BSDのライセンス問題を解消してリリースされたFreeBSDの公開が1994年11月であるのに対して、Linuxが公開されたのが1990年代前半というタイミングもLinuxの広まった要因の一つのように思えます。ここからは私の想像になってしまいますが、一般的に「Linux」と呼ばれているOSは、ここまで書いてきた「Linuxカーネル」を指すものでありRHELDebianは「Linuxカーネル」に独自のプログラムを追加したものなのではないかなと思います。

MINIX

Linuxでたびたび出てきたMINIXについても少しだけメモしておきたいと思います。
MINIXは、アンドリュー・タネンバウムによって作られたUNIX系のOSです。コンピュータ科学におけるオペレーティングシステムの教育という目的に重点を置いた設計で、企業ライセンスなどが無いように書かれたものでしたが、コンパイラにライセンスの問題がある、教育目的なので教科書として広く配布するために商業出版を必要とした関係もありライセンスには制限がありました。

まとめ

知っていたようで意外に知らないことも多く、特にUNIXが初めはアセンブラで書かれていたことに驚きました。
BSDの歴史やライセンスの問題、MINIXMulticsなどのあまり聞きなれないOSなど深く調べれば調べるほど様々な情報が得られ
よりコンピュータについての興味が生まれてくるので現代の技術も大切ですが歴史についても調べてみるのも良いかもしれないなと感じました。
特に、歴史の関連性などがまだ調べられていないのでいつか調べてみたいと思います。

参考文献

Unixの歴史 - Wikipedia

Linux - Wikipedia