- LinuxはカーネルとしてGNUのツール群と組み合わさることでOSとして機能します。
- 一方UNIXは最初からカーネルとツールが一体のシステムとして設計されました。
- そのためLinuxは「カーネルの名前」、UNIXは「OS全体の名前」として使われます。
- UNIXはのちに規格化され、現在もmacOSなどが認証を取得しています。
1. カーネルとOSは別物
「LinuxはOSじゃない、カーネルだ」という言葉を聞いたことがあるでしょうか。
技術者の間では常識に近い話ですが、「じゃあUNIXは?」と聞かれると、答えに詰まる人も少なくありません。
この二つは似たものとして語られがちですが、生まれ方が根本的に違います。
そもそもOSとは何でしょうか。
OS研究の標準的な教科書である『Operating System Concepts』によれば、OSはコンピュータのハードウェアを管理するソフトウェアであり、アプリケーションの基盤を提供しながらユーザーとハードウェアの間を仲介します。
つまり、OSには、二つの側面があり、一つはリソースアロケータとしての側面で、CPU・メモリ・I/Oデバイスといったリソースを管理し競合する要求を調停します。
もう一つはコントロールプログラムとしての側面で、プログラムの誤った実行や不正な使用を防ぎます。
OSとカーネルの違いについては、「常時稼働しているただ一つのプログラムがカーネルであり、それ以外はシステムプログラムかアプリケーションである」ともあります。
1.1. 特権モードとユーザーモード
現代のCPUには二つの動作モードがあります。
ハードウェアを直接操作できる「特権モード」と、
安全のために制限された「ユーザーモード」です。
カーネルは特権モードで動き、メモリの割り当て、プロセスの管理、ハードウェアとの通信を担います1。
ブラウザ、シェル、テキストエディタといった日常的に触れるプログラムは、すべてユーザーモードで動いています。
カーネルだけがあっても、画面に何かを表示することも、ファイルを操作することもできません。
カーネルにユーザー空間のツール群が組み合わさって、初めて「OS」として機能するわけです。
2. LinuxとUNIXの出自の違い
では、LinuxとUNIXはそれぞれどちらに当たるのでしょうか。
それは、それぞれの作られ方を見ていくことで明らかになります。
2.1. Linuxは「カーネル単体」として生まれた
歴史の順序とは前後しますが、先にLinuxの誕生を見てみましょう。
1991年、フィンランドの学生リーナス・トーバルズは、自分のPC用に小さなカーネルを書き、インターネット上に公開しました2。
彼が作ったのはカーネルだけで、シェルもコマンドも含まれていませんでした。
当時すでに、リチャード・ストールマンが率いるGNUプロジェクトがシェルのbash、コンパイラのgcc、各種コマンドといったユーザー空間のツールを揃えていました3。
しかし肝心のカーネルが未完成だったため、システム全体が動く状態ではありませんでした。
Linuxカーネルの登場で、この「頭のないシステム」に頭がつきます。
GNUのツール群とLinuxカーネルを組み合わせることで、完全に動作するフリーのOSが実現しました。
これがのちにUbuntuやFedoraといったディストリビューションへと発展していきます。
基本的には Linux という名前が指しているのは、この組み合わせ全体ではなく、カーネルだけです。
「Linux」と「OSとしてのLinux」は、厳密には別物です。
この経緯があるため、たとえばストールマン氏は今も「GNU/Linux」と呼ぶべきだと主張しています4。
2.2. UNIXは「OS込み」で誕生した
これに対して、UNIXの出発点はまったく異なりました。
1969年、AT&Tのベル研究所でケン・トンプソンとデニス・リッチーらが開発を始めたUNIXは、最初からカーネルとユーザーツールが一体になったシステムとして設計されました5。
シェルのsh、ファイル操作コマンドのlsやcp、テキストエディタのed、そしてパイプによるコマンド連携の仕組みまでが、最初のパッケージに含まれていました。
「これがUNIXです」と渡された時点で、すでにOSとして使えるものが揃っていたわけです。
カーネルだけを切り出して「こちらがUNIX本体です」と言う必要が、そもそもありませんでした。
Linuxにあった「カーネルとツールの出自の分離」が、UNIXには存在しなかった。
これが、UNIXをOSと呼ぶことに誰も違和感を持たない理由です。
3. UNIXはやがて「規格」になった
UNIXがOSとして扱われる理由がもう一つあります。
1980〜90年代、UNIXは多くの企業に移植され、それぞれの「方言」が生まれました。
BSD、Solaris、HP-UXなど、互いに似ているが互換性のないUNIX系OSが乱立した時代です。
この混乱を整理するために、「Single UNIX Specification」という標準規格が定められました6。
この規格に合格したシステムだけが、公式に「UNIX」を名乗れます。
現在ではAppleのmacOSもこの認証を受けています7。
注目したいのは、この認証がカーネルだけを対象にしていない点です。
コマンドの挙動、ファイルシステムの構造、APIの仕様など、OS全体の振る舞いが審査されます。
UNIXという言葉は、誕生から現在の規格まで一貫して、システム全体を指す言葉として使われてきました。
3.1. 整理すると
| Linux | UNIX | |
|---|---|---|
| 誕生のかたち | カーネル単体 | カーネルとツール群の一体型 |
| ツール群の出自 | 別プロジェクト(GNU等) | 同じチームが同時に開発 |
| 「OS」としての呼び方 | ディストリビューション名で呼ぶ | UNIX自体がOSを指す |
| 現在の位置づけ | カーネルの名前 | OSの規格・系譜 |
同じ「UNIX系」と呼ばれるLinuxとUNIXですが、その生い立ちはこれだけ違います。
「LinuxはOSではなくカーネルだ」という言い方が生まれたのは、Linuxが最初からカーネル単体として世に出たからで、UNIXにはその必要がなかっただけです。
どちらが優れているという話ではなく、誕生の文脈が違ったということです。
- x86アーキテクチャでは、この動作モードの区別を「保護リング」と呼び、カーネルはRing 0(最高特権)で動作する。ユーザープロセスはRing 3で動作し、ハードウェアへの直接アクセスが制限されている。 – Protection ring – Wikipedia
- 1991年8月25日、トーバルズはUsenetのニュースグループ「comp.os.minix」に投稿し、開発中のOSについて公告した。投稿には「just a hobby, won’t be big and professional like gnu(趣味のプロジェクトで、GNUのように大きく専門的にはならない)」と書かれていた。バージョン0.01のリリース日は同年9月17日とされている。 – Linux kernel – Wikipedia
- GNUプロジェクトは1983年9月27日にストールマンがUsenetへの投稿で発表し、1984年1月に開発を開始した。GNUはフリーソフトウェアのみで構成されたUnix互換OSを目指すプロジェクトで、名称は「GNU’s Not Unix!」の再帰的頭字語。 – GNU Project – Wikipedia
- ストールマンは1996年からGNU/Linuxという名称を公に主張し始め、同年発表のエッセイ「Linux and the GNU System」でその論拠を説明した。FSFは、Linuxという名称はカーネルだけを指すべきであり、OSとしての呼称にはGNUの貢献が欠かせないと主張している。 – Why GNU/Linux? – GNU Project
- UNIXの最初の完全版は1971年11月にリリースされ、「UNIX Programmer’s Manual」として文書化された。開発のきっかけは、MITとベル研究所が共同で進めていたMulticsプロジェクトからの離脱であり、トンプソンが使われていなかったPDP-7でゲームを動かすために小さなOSを書いたことが発端とされている。 – History of Unix – Wikipedia
- Single UNIX Specificationは、1994年にX/OpenがSpec 1170として最初に発表した。X/OpenはOSFと1996年に合併してThe Open Groupを設立し、以降はThe Open GroupがUNIX商標と認証を管理している。 – Single UNIX Specification – Wikipedia
- AppleがUNIX認証を最初に取得したのはMac OS X 10.5 Leopardで、2007年10月26日に認証された。以降、ほぼ毎年のメジャーリリースで認証を更新しており、macOS 15.0 Sequoiaも認証済みである。 – Single UNIX Specification – Wikipedia