System V, BSD Unix と Linux OSの始まりについて

今からUnix/Linux OSを使ってみたいという知人がいます。
OSを使って何が出来るかに関しては、いろんな場所に情報があるので興味に応じて自分で調べてもらうとして、Unixがどんな成り立ちがだったのかを説明することにしました。
以下の文章は、知人に送ったものに更に調査を加えてたもの。せっかく時間を掛けて書いたので、この場に公開しておくことにします。

細かいところは違っているかも知れませんが、流れとしてはだいたい合っていると思います。


Unix OSの始まり

Unix OSは、AT&Tのベル研究所で1970年頃開発されたDECのミニコンPDP上で動作するように設計されたマルチユーザーマルチタスクOSです。開発当時OSのソースコードはすべてC言語で書かれ、Cだけで開発してそのままコンパイルして使えることが特徴でした。
当時AT&Tは独占禁止法の関係でOSを開発することは出来ても、販売することは出来ず、ソースコードを企業に有償で公開していました。1970年代当時マルチユーザーマルチタスク可能な環境はメインフレームだけであり、それより小規模なコンピュータ環境でC言語が使えてしかもマルチタスクなんて存在しない時代。そもそも、CPUは存在していたもののワンチップCPUは4bit, 8bit の時代で、マルチタスクに必要なメモリ管理機構はまだワンチップCPUに含まれていません。C言語なんて重くて使えやしない。

SYSTEM V Unix

DEC、Apollo、Sun、HP、IBM という少数企業がAT&Tからのソースコードを元に新しいハードウェアを作ってUnix OSを事業化しました。(その他、IBM PC ATハードウェアを利用するベンチャーものが複数あります。)この時のソースコードの延長線上にあるのが SYSTEM V系のUnix。(Sunはちょっと違う。)現在だと、DEC Ultrix、Apollo Domainは最終的にHPのHP-UXとなり、SunOSは Oracle Solarisとなり、IBMのAIXはそのままAIXとして残った。V というのは、SYSTEM I →II→III→IVときてVという意味。これらのUS企業の他、NEC、Sony、SGIなどもSYSTEM V系のUnix OSを搭載したシステムを販売していました。

その後AT&T がUnixのライセンスを手放して、Novellが買ってSYSTEM Vライセンスがらみのゴタゴタが一旦クリアになりましたが、今、正式にSYSTEM V Unixのライセンスを持っている企業がどこなのかは、私は知らない。

BSD Unix

AT&T ベル研から(企業ではなく)同様のソース提供を受けたのがカリフォルニア大学バークレー校。

企業とは異なり、大学研究室の中で自由な拡張が行われたのがバークレーバージョンのBSD。多くのテキスト系コマンドやネットワークプログラムが開発されました。

SYSTEM VはATT&Tと企業間ライセンスの元で拡張されますが、BSDは自由。そのうち、BSDの方が人気が出ることになり、BSD OSは販売まで始めてしまいました。アプリやネットワークはAT&Tソースとは無関係なので問題ありませんが、カーネルは元々AT&Tのソースコードが含まれているのでAT&Tの許可もないの販売までするとは、もうUCBには使わせない!と裁判になりました。
しかし、UCBがBSDソースコードを詳細まで検討したところ、SYSTEM Vのカーネルソースコードなんてもう殆ど使われてないか誰が書いても同じになるコードじゃん。と判明。怪しいソースコードとグレート思われるソースコードを削除したり、新たに書いたたものを 4.4BSD-Lite としてソースリリースしました。これが今あるBSD系Unixの元となっています。

裁判の方は、AT&TがUnixソースライセンスをノベルに販売しUCBと和解。その後は4.4BSD-Liteを元に、初めに386BSD、FreeBSD、NetBSD、OpenBSD へ分化され開発が続けられています。
ここら辺は、ASCII発行のBSD Magazine 1999年1号 の特集 BSDの過去・現在・未来 や2000年5号に詳しく書いてあります。

この頃のCPUは、Intel 80286, 80386、Motrola 68020, 68030。ここら辺でようやくCPUがワンチップでメモリ管理機能を持ち始め、オプションの別チップで、浮動小数点ユニットが使えるようになり、マルチユーザーマルチタスクOSをサポート可能なCPUが安く販売されるようになりました。これが1980年代、90年代頭。
おかげで自作PCの時代が始まり、個人でUnixステーションを持てる時代が訪れました。

Linux

フィンランドヘルシンキ大学の学生であったリーナスさんが、自分のパソコンでマルチタスクOSのタスク処理を調査するために研究開発を始めたのが Linux の始まり。パブリックなftpサーバーにソースを置いて、ネットニュースとメーリングリストで議論を始めたことから研究者の間で広まり始めました。スクラッチからビルドしたため、OSソースコードはUnix ライセンスとは関係なし。これに、GNUソースコードを加えてカーネル+ユーティリティとしてSunOSとSolarisの関係風に使用できるようにしたのがLinuxディストリビューション。カーネルとライブラリがLinuxの最小構成ですが、ユーティリティとの組み合わせによって複数のディストリビューションが存在しています。
Linuxディストリビューションに付属していたリーナスさんがLinuxを開発し始めた当時のメモのようなドキュメントを読むと、苦労話が載っていてとっても面白い。

https://linuxjf.osdn.jp/JFdocs/linux-history/

最近のUnix事情

そして、現在、PCハードウェアはワークステーションハードウェアと同等以上となり、i386, amd64用OSを仮想で動かすことさえ出来るようになりました。

SYSTEM V系Unixは元々のAT&Tベル硏ライセンスを元に企業が開発を続け、HP-UXやSolaris など商用Unixとして販売されています。
BSDはUnixを源流に持ちますが、Unixライセンスに縛られない複数のBSD系OSとして企業やコミュニティーが開発を続けています。
同様にLinuxもUnixライセンスに縛られないOSとして開発が続けられています。

BSDとLinuxがなぜ無料で利用できるように配布されているかというと、以上の事情によるもの。

Unixライセンスに縛られないといっても、それはカーネルソースに関しての話で、OSの改造、ユーティリティの開発にはお金が掛かるわけで、全て無料で入手できるかどうかは開発者の考え方次第です。純粋にカーネルソースとGNUツールだけで構成されているディストリビューションなら無料で入手、使用できるかもしれませんが、サポートまで無料で受けられるわけではありませんので、サポートを含めた有償のLinux配布バージョン、有償のBSDというものは存在しています。
BSDの場合、堅牢な環境を目指して(当初)Intel CPU(とAlpha)だけで動作していたのがFreeBSD、
幅広いCPUに対応することを目指したのが、NetBSD、
頑強なセキュリティをOSレベルで提供することを目指したのがOpenBSD でした。(これ以外のBSDもあります。)

身近なUnix

馴染みやすいBSDとしては、MacOSがFreeBSDコマンドをそのまま採用していて、Darwin はFreeBSDのコマンドとオプションまで同一です。Windows10の場合は、WSL(Windows Subsystem for Linux)として Linux実行環境が組み込まれていて、コマンドをそのまま使用できる他、CPUが同じならバイナリがそのまま動きます。

Unixのコマンドを試したり、シェルプログラミングしたいのなら特にUnix OSをインストールする必要は無し。

プログラムの互換性に関して

SYSTEM VもBSDもLinuxも、有名どころのソフトウェアは、GNUなどをベースにポートされているため、ソースコードからビルドすることによりBSDでもLinuxで動くのが普通です。例えば、Apache、MySQL など。汎用ではなくハードウェアをコントロールするようなドライバーを含むソフトウェアは、OSを限定する場合があります。

どのUnixを使えばいいか?

さて、現在存在するUnix系OSというのは、こういうトレンドで成長してきたので、Unix系OS上で何かソフトウェアを開発したい場合、ハードウェアに依存する条件がない限りは、どのOS上で開発してもあまり違いはありません。ソースコードを多少修正する程度で別のUnixに持っていっても動くはず。ソフトウェアエンジニアにとって、今はとっても楽な時代。MacOSなんて、そのままUnixサーバーに出来るくらい。そんな事したら、Macがもったいないけどね。

OSの基本部分は、ディストリビューションによって大きく違うので、立ち上げたい環境に応じて技術取得が必要となります。Linux一つ取ってみても、RedHat と Debian は設定の仕方が違うしCPUアーキテクチャが異なるx86_64 PCとRaspberry Pi 2/3/4 では同じDebian Linuxでもインストール方法が全く異なります。
LinuxとBSDだともっと違って来る場合があります。

ソフトウェア開発よりも、ゲーム機、携帯電話、スマートフォンなどあらゆるハードウェアでUnix系OSを動かしたい人もいるでしょう。
Unixシステムを構築する人間はいろいろと経験が必要というのはこういう理由から。OSの利用だけを行う人間から見ると、そういう構築のしがらみには価値がなくて、興味は外からどうコンテンツにアクセス出来るかが興味の対象ということになり、Unix OSを使ってみたいといっても、サーバー構築者とソフトウェアエンジニアは対極から物事を見ることになり、いつも争いが絶えないわけです。

プラットフォームエンジニアになるのか、ソフトウェアエンジニアになるのかは興味次第。


メモはここまで。
書いていて、当時を思い出しましたよ。

コメントを残す