1.1 初期の開発(1969年~1970年代)

Unixの起源は、1969年にAT&Tベル研究所でケン・トンプソン、デニス・リッチーらによって始められた。当初はPDP-7上で動作するシンプルなファイルサーバーとして開発されたが、すぐに本格的なオペレーティングシステムへと成長した。1970年には「UNICS」(Uniplexed Information and Computing Service)という名称が用いられ、後に「Unix」と略された。

1.1.1 Multicsプロジェクトからの派生

Unixは、ベル研究所が参加していたMultics(Multiplexed Information and Computing Service)プロジェクトの挫折から生まれた。Multicsは大規模で野心的なタイムシェアリングシステムだったが、複雑さゆえに成功しなかった。トンプソンはMulticsのコンセプト(階層ファイルシステム、シェルなど)を簡略化し、小型コンピュータでも動作する実用的なシステムとしてUnixを設計した。

1.2 C言語による再実装と普及

1972年から1973年にかけて、デニス・リッチーが開発したC言語を用いてUnixカーネルが書き直された。これにより、Unixはアセンブリ言語から高級言語で記述された初めての移植性の高いOSとなった。Cによる再実装は、異なるハードウェアへの移植を容易にし、Unixの普及を加速させた。

1.3 AT&Tのライセンス政策と学術界への拡散

AT&Tは独占禁止法の制約下でコンピュータ事業への参入が制限されていたため、Unixを低価格で教育機関に提供した。1970年代後半には、カリフォルニア大学バークレー校をはじめとする多くの大学がUnixを入手し、改良を加えた。このソースコード付きの配布が、後のBSDやLinuxの基盤となった。

1.4 BSDとSystem Vの分裂

1980年代初頭、AT&TはUnixの商業化に乗り出し、System III、System Vをリリースした。一方、バークレー校は独自の改良版であるBSD(Berkeley Software Distribution)を開発し、TCP/IPやviエディタなどの重要な機能を追加した。この2つの系統は互換性のない方向に進化し、後の「Unix戦争」を引き起こした。

1.5 標準化POSIX

分裂による混乱を収束するため、1980年代後半からIEEEが標準化に取り組み、POSIX(Portable Operating System Interface)が策定された。POSIXはシステムコールやAPIの共通仕様を定め、異なるUnix系OS間の互換性を確保した。これにより、アプリケーションの移植性が大幅に向上した。

2.1 モジュール性と単一目的のツール

Unixの基本理念は「小さなプログラムが一つの仕事をうまくやる」ことにある。各ツールは単一の機能に特化し、複雑な処理はツールの組み合わせで実現する。これにより、システム全体の理解が容易になり、拡張性が高まった。

2.2 すべてはファイル

Unixでは、通常のデータファイルに加え、デバイス、プロセス情報、ネットワークソケットなどもファイルとして抽象化される。これにより、同一のシステムコール(open, read, write, close)で様々なリソースにアクセスでき、操作の統一性が実現された。

2.3 シェルとパイプによる連携

ユーザーとの対話にはシェル(コマンドインタプリタ)が使われる。パイプ()は、あるプログラムの出力を別のプログラムの入力に直接つなげる仕組みであり、小さなツールを組み合わせて強力な処理を行うことを可能にした。この設計は、スクリプト言語による自動化やデータ処理パイプラインの基盤となった。

3.1 カーネル

Unixカーネルは、ハードウェアを直接制御し、プロセス管理、メモリ管理、ファイルシステムなどの基本機能を提供する。カーネルは保護されたメモリ空間で動作し、ユーザープログラムからの不正アクセスを防ぐ。

3.1.1 プロセス管理

プロセスは実行中のプログラムのインスタンスであり、Unixはマルチタスクとタイムシェアリングをサポートする。各プロセスには一意のPID(プロセスID)が割り当てられ、fork()とexec()システムコールにより生成・実行される。プロセス間通信(IPC)にはパイプ、シグナル、共有メモリなどが利用される。

3.1.2 メモリ管理

Unixは仮想記憶を採用し、各プロセスに独立したアドレス空間を提供する。ページング機構により物理メモリを効率的に管理し、スワッピングによってメモリ不足に対処する。動的メモリ割り当てはカーネル内で行われる。

3.1.3 ファイルシステム

Unixのファイルシステムは階層的なディレクトリ構造を持ち、ルート(/)を頂点とする単一のツリー状に構成される。iノードによって各ファイルのメタデータ(所有者、パーミッション、サイズなど)が管理され、ディレクトリはファイル名とiノードの対応表として機能する。

3.2 システムコール

ユーザープログラムがカーネルの機能を利用するためのインターフェースがシステムコールである。代表的なものに、ファイル操作(open, read, write, close)、プロセス制御(fork, exec, wait)、メモリ管理(brk, mmap)などがある。システムコールはライブラリラッパーを介して呼び出される。

3.3 ユーザーランド

カーネル以外の部分、すなわちシェルやユーティリティ、ライブラリなどが動作する領域をユーザーランドと呼ぶ。ここで実行されるプログラムは、システムコールを通じてカーネルとやり取りする。

3.3.1 シェル(sh, bash, zshなど)

シェルはコマンドを解釈し実行するユーザーインターフェースである。伝統的なBourneシェル(sh)を起源とし、bash(Bourne Again SHell)はLinuxの標準、zshはmacOSのデフォルトシェルとして広く使われる。いずれもパイプ、リダイレクト、スクリプト機能を備える。

3.3.2 基本ユーティリティ

Unixには標準的なコマンド群が多数含まれる。ファイル操作(cp, mv, rm, ls)、テキスト処理(cat, grep, sed, awk)、システム管理(ps, kill, mount)、通信(telnet, ftp, ssh)などが代表的であり、これらのツールがシステムの基本的な作業を支える。

4.1 BSD系

BSD(Berkeley Software Distribution)は、カリフォルニア大学バークレー校で開発されたUnix派生システムの一群である。TCP/IPネットワーキング、viエディタ、Cシェルなど、現代のUnixに不可欠な要素を多数導入した。

4.1.1 FreeBSD

FreeBSDは、高性能と安定性を重視して開発されたBSD系OSである。特にサーバー用途やネットワーク機器で広く使われ、ZFSファイルシステムやjailによる仮想化などの先進機能を備える。

4.1.2 NetBSD

NetBSDは、「Of course it runs NetBSD」の標語で知られ、極めて高い移植性を目標とする。多くのハードウェアプラットフォームに対応しており、組込みシステムやレガシーハードウェアでも動作する。

4.1.3 OpenBSD

OpenBSDは、セキュリティを最優先するBSD系OSである。コードレビューと脆弱性対策に徹底して取り組み、OpenSSHやOpenNTPDなど、安全なネットワークツールの開発元としても有名である。

4.2 System V系

System Vは、AT&Tがリリースした商用Unixの標準系統である。1980年代にSystem V Interface Definition(SVID)が策定され、多くのベンダーがこれを採用した。

4.2.1 AIX

AIX(Advanced Interactive eXecutive)はIBMが開発したSystem VベースのUnixである。主にIBM Power Systems上で動作し、高度な論理ボリューム管理(LVM)や信頼性の高いクラスタリング機能を持つ。

4.2.2 HP-UX

HP-UXはヒューレット・パッカード(現HPE)が自社のPA-RISCおよびItaniumアーキテクチャ向けに開発したUnixである。ミッションクリティカルなシステムで長年使用されてきた。

4.2.3 Solaris

Solarisはサン・マイクロシステムズ(現オラクル)が開発したUnixであり、当初はSystem V Release 4をベースとしていた。DTraceやZFS、ゾーンによるコンテナ仮想化など、革新的な技術を多数搭載した。

4.3 Linux(Unix系)

Linuxは、リーナス・トーバルズが1991年に開発を開始したUnix系オペレーティングシステムである。ソースコードは完全に独立して書かれたが、Unixの設計思想とAPIを模倣しており、POSIX準拠である。

4.3.1 GNU/Linux

LinuxカーネルにGNUプロジェクトのユーティリティやライブラリを組み合わせたものがGNU/Linuxである。Debian、Red Hat Enterprise Linux、Ubuntuなどの多くのディストリビューションが存在し、サーバー、デスクトップ、クラウドで広く使われている。

4.3.2 Android

Androidは、LinuxカーネルをベースにGoogleが開発したモバイル向けOSである。独自のアプリ実行環境(ART)やセキュリティモデルを持つが、カーネルレベルではUnixの設計を継承している。

5.1 ルートディレクトリと主要なサブディレクトリ

Unixのファイルシステムは一つのルートディレクトリ「/」を頂点とする。主要なサブディレクトリとして、/bin(基本コマンド)、/etc(設定ファイル)、/dev(デバイスファイル)、/usr(ユーザー用プログラムとデータ)、/var(可変データ)、/tmp(一時ファイル)などが標準的に配置される。この構造はFilesystem Hierarchy Standard(FHS)として定義されている。

5.2 iノードとリンク

各ファイルは一意のiノード番号で識別され、iノードには所有者、パーミッション、サイズ、データブロックの位置などが格納される。ディレクトリエントリはファイル名とiノード番号の対応表である。ハードリンクは同一iノードを複数のディレクトリエントリから参照する仕組みで、シンボリックリンクは別のファイルへのパスを格納する特殊なファイルである。

5.3 マウントとVFS

異なる記憶装置やファイルシステムをツリーに統合する操作をマウントと呼ぶ。カーネルはVFS(Virtual File System)という抽象化層を持ち、ext4、XFS、ZFSなど異なるファイルシステムを透過的に扱えるようになっている。デバイスファイル(/dev)やプロセス情報(/proc)もVFSを通じてアクセスされる。

6.1 POSIX

POSIX(Portable Operating System Interface)は、IEEE 1003規格として定義された、Unix系OSのAPIおよびシェル、ユーティリティの標準セットである。これにより、同じソースコードを異なるUnix系システムでコンパイルして動作させることが可能になった。POSIXはC言語の標準ライブラリとも連携する。

6.2 Single UNIX Specification

Single UNIX Specification(SUS)は、The Open Groupによって維持される元祖Unixの仕様であり、POSIXを拡張したものである。SUSに完全準拠したシステムのみが「UNIX」の商標を使用できる。現在のSUSはバージョン4(POSIX.1-2008)以降が主流である。

6.3 現在の認証状況

現在、正式にUNIX認証を受けているシステムは限られている。macOSは認証を受けており、商用Unixの多くもSUSに準拠する。一方、Linuxディストリビューションは認証コストの高さから取得していないが、実質的にPOSIX互換である。FreeBSDも一部のバージョンが認証されている。

7.1 オープンソース運動への貢献

Unixのソースコードが学術機関に広く配布されたことは、オープンソースの精神の基盤となった。特に、BSDライセンスやGNU General Public License(GPL)といった自由ソフトウェアライセンスは、Unixの配布文化から生まれた。LinuxやFreeBSDなどのプロジェクトは、Unixの設計を継承しつつ、完全に自由なソフトウェアとして発展した。

7.2 他のオペレーティングシステムへの影響

Unixの設計思想は、macOS(XNUカーネルの基盤)、Solaris、HP-UXなど多くの商用OSに直接影響を与えた。また、Windows NT系カーネルも一部の設計(階層的ファイルシステム、セキュリティモデル)にUnixの影響を受けている。さらに、Unixのシェルとツール群は、GitやDockerなどモダンな開発ツールのインターフェースにも継承されている。

7.3 現代におけるUnixの位置づけ

21世紀の現在、本来のAT&T Unixは商用市場ではほとんど使われていないが、その精神と技術はLinux、macOS、BSD系OSの中に生き続けている。クラウドコンピューティング、サーバー仮想化、組み込みシステム、モバイルOSなど、あらゆる分野でUnix系システムが基盤を提供している。Unixの「シンプルさ」と「組み合わせの哲学」は、現代のソフトウェア設計においても高い価値を保ち続けている。