UNIX

概説

Unixオペレーティングシステムは、サーバやワークステーションだけでなく、携帯機器でも広く使われている。またUnix環境とクライアントサーバモデルは、個々のコンピュータによるコンピュータ処理を、コンピュータネットワークで連係されたコンピュータ処理に変革し、インターネット構築の重要な要素ともなった。
もともとUnixはベル研究所内部の開発プロジェクトであった。1973年のOSに関するシンポジウム以降、このOSはベル研究所外部にも知られるようになる。特に1980年代には、教育機関等でUnixが広がり、ユーザーが自前のツールをその上で作り、それを同僚などと共有する形が定着した。
Unixは当初は、MulticsのようなマルチタスクOSではなく、一度に一つのプログラムしか動かせないシングルタスクOSであった。当初はパイプの概念もなかった。その後の発展の中で、徐々に「パイプ」「マルチタスク」などが実装されていった。また、Unixは当初は移植性は低かったが、徐々に特定のプラットフォームへの依存性を減少させ、1978年には、PDP-11以外のプラットフォームで動作するようになった。その後移植が徐々に進み、Unixが動作するプラットフォームが増えていった。
今日のUnixは移植性、マルチタスク、タイムシェアリング方式によるマルチユーザなどを重視して設計されている。Unixシステムは、様々なコンセプトで特徴付けられている。データの格納にプレーンテキストを使用する事、階層型のファイルシステム、各種の周辺装置やある種のプロセス間通信 (IPC) をファイルとして扱う事、多数のソフトウェアツールを組み合わせて使用する事、簡単なプログラムはコマンドラインインタプリタのパイプを使ってつなげることができ、単一の多機能プログラムで同等機能を実装するのとは逆の発想であること、などである。これらのコンセプトはUNIX哲学として知られている。カーニハンとロブ・パイクはこれを『UNIXプログラミング環境』 (The Unix Programming Environment) という本で「システムのパワーは、プログラム自身からではなくプログラム間の関係から生じるという考え方」としている。ただし、これらの"哲学"は全てが当初から存在したわけではなく、Unixの発展の中で段階的に形成されたものである。商用Unixの中には、単一で多機能なアプリケーションも見られ、この哲学が一貫してUnixに関するすべての関係者で共有・実現されていたわけでもない。
Unixでは、「オペレーティングシステム」は主となる制御プログラムであるカーネルと、多数のユーティリティより構成される。カーネルは、プログラムの開始や停止、ファイルシステムの取り扱い、他の多くのプログラムが共用する共通的な「低レベル」のタスク、そして重要なスケジューリングなどのサービスを提供する。これらのアクセスを調停するために、カーネルはシステムへの特権を持ち、システムは「ユーザー領域」と「カーネル領域」に分けられる。
カーネルの肥大化の潮流を逆転させ、より少ないユーティリティで最大のタスクを実行できるシステムに戻る目的で、マイクロカーネルのコンセプトが登場した。またコンピュータが1つのハードディスクと入出力用の端末から構成されていた時代には、Unixのファイルモデル（ストリーミングデータ）は最適な入出力として働いた。しかし現代のシステムではネットワークや新しい装置が求められ、グラフィカルユーザインタフェースが開発され、ファイルモデルはマウスなどが発生させる非同期イベントの取り扱いのタスクには不適当と判明し、1980年代には非同期入出力やIPCのメカニズムに加えて、ソケット、共有メモリ、メッセージキュー、セマフォなどが追加された。また通信プロトコルなどの機能はカーネルの外に移動した。
Unixは現在では、サーバーやパーソナルコンピュータの一部に加え、携帯電話などの組み込みシステムから、メインフレームやスーパーコンピュータなどの一部にも使われている。

歴史

Unixの歴史は、1960年代中ごろに、マサチューセッツ工科大学(MIT)、ベル研究所、General Electric(GE)がGEのメインフレームコンピュータGE-645用にMulticsと呼ばれるタイムシェアリングオペレーティングシステムを共同開発していたことにさかのぼる。
Multicsは多くの革新的技術を導入したが、同時に、多くの問題を抱えてもいた。
Multics の目指すものに賛同しても、巨大で複雑なものになっていくことに嫌気がさしたベル研究所は、プロジェクトから徐々に距離をおくようになった。最後までMulticsに関与して いたケン・トンプソン等はプロジェクトをより小規模な形に再構成してとりあえず動作する形で完成させることを決めた。
開発は、当時ベル研究所内に使われない状態でおいてあったPDP-7を借りて行われた。
この時点では、OSの開発にはベル研究所からの資金提供はなく、OSには名前も付けられていなかった。
できあがったOSは、MulticsのようなマルチタスクOSではなく、後のMS-DOSのような、一度に一つのプログラムしか動かせないシングルタスクのOSであった。この特徴から、新しいOSは、ブライアン・カーニハンによって、MulticsのMulti(多数の)をUni(単一の)に変えてUnicsと名付けられた 。後につづりがUnixと変更された。このつづりの変更の経緯について、カーニハンは「思い出せない」と言っているが、当時の開発グループ内では比較的年長者であったピーター・ノイマンは「法務上の理由であろう」と語っている。
PDP-7は古いマシンであり問題が多かった。このため、開発グループでは、当時の最新機種であったPDP-11を購入し、その上でUnixが動作するようになった。
1971年のUnixバージョン1はPDP-11/20上で動作した。
バージョン3までのUnixはアセンブリ言語で開発された。1973年に公開されたバージョン4において、UnixはC言語で書き直された。
この時点でのUnixはPDP-11に依存したコードが多く含まれており、移植性は低かった。UnixがPDP-11以外のコンピュータに移植されるまでには5年間を要し、
1978年に、Interdata 8/32上で動作するようになった。
ベル研究所ではその後もUnixの改良が続けられ、パイプやマルチタスクなどの機能が追加されていった。これらの、ベル研究所で開発された初期のUnixは、現在ではResearch Unixと呼ばれている。
1970年代末から1980年代初頭にかけて、Unixは学術分野だけではなく産業分野でも使われるようになっていき、HP-UX, Solaris, AIX, Xenix等のOSが作られた。
1980年代の末には、AT&T Unixシステムズ・ラボラトリーズとサン・マイクロシステムズが共同でUNIX System V Release 4 (SVR4)を開発した。これは、後の多くの商用Unixの母体となった。
1990年代には、BSDやLinuxといったUnixあるいはUnix系OSが、コンピュータ・ネットワークを通じて世界中の開発者の協力を得て開発され、人気を得ることになった。
2000年には、アップル社がUnixに基づいてDarwinというコアに基づくMac OS Xを開発した。
今日、Unixはサーバー、ワークステーション、モバイル機器などで広く使われている。

標準化

1980年代後半から始まったオペレーティングシステム標準化の動きはPOSIXとなって結実し、あらゆるオペレーティングシステムの共通のベースラインとなっている。IEEEは主要なUnixシステムに共通する構造からPOSIXを作り、1988年に最初のPOSIX標準を公表した。1990年代初め、よく似た標準化が業界団体Common Open Software Environment (COSE) イニシアティブによって開始され、The Open Groupの管理するSingle UNIX Specificationとなった。1998年、POSIXとSingle UNIX Specificationの共通定義を提供するため、IEEEとThe Open GroupはAustin Groupを立ち上げた。
1999年、互換性を達成するため、いくつかのUnixシステムベンダーはSVR4のExecutable and Linkable Format (ELF) をオブジェクトファイルおよび実行ファイルの標準規格とすることに合意した。これによって、同一CPUアーキテクチャでの各種Unixシステムでバイナリ互換性の大部分が確保されることになった。
Unix系オペレーティングシステム（特にLinux）におけるディレクトリ構成の標準としてはFilesystem Hierarchy Standardがある。

フリーなUnix系OS

UNIXが商用の「閉じた」OSとなっていく中で、現在につながるフリーソフトウェア/オープンソースのムーブメントが勃興し、UNIX同様の操作性と機能を提供するフリーなOSが生み出された。
多くのUNIX系OSがオープンソースで開発されているが、以下に挙げるOSは、ライセンスなどの問題からUNIXとは公称しない。

GNU/Linux

1983年にリチャード・ストールマンはフリーソフトウェア財団 (Free Software Foundation; FSF) を設立し、GNU (Gnu's Not Unix) プロジェクトを開始した。このプロジェクトの目的は、再配布自由・改変自由なUNIXクローンのOSを作成することであった。このプロジェクトにより、多くのUNIXシステム上で動作するソフトウェア、例えばEmacsやGCC等が作成され、これらソフトウェアは多くのUNIXシステムで使用されるようになった。しかしながら、OSの中核をなす "Hurd" の完成に手間取った（Hurdは現在も開発中）。
1991年にリーナス・トーバルズがLinuxカーネルを開発した。Linuxカーネルの特徴として、POSIXに準拠するように設計されたこと、GNUプロジェクトによって開発された様々なツールが動作するように作成されたこと、またライセンスにGPLが採用されたこと等が挙げられる。その結果、GNUプロジェクトの開発したソフトウェア等と共に、完全フリーのUNIXクローンとして利用されるようになった。有名な商用ディストリビューションとしてかつてRed Hat Linuxが存在し、現在ではRed Hat Enterprise LinuxやSUSE Linux等がある。
なおLinuxという名称は本来カーネルのみの名称にすぎず、OSとして完成させるための他のシステムの多くはGNUプロジェクトの産物である。そのためFSF側ではOSとしての名称は「GNU/Linux」とすべきだと主張しており、この名称を採用した最も有名かつ完全にフリーなディストリビューションのひとつとして「Debian GNU/Linux」、およびそこから派生した「Ubuntu」などがある。ただし、Ubuntuにはフリーなソフトウェアの精神と相容れない仕様が多いため、フリーソフトウェア信奉者から批判されることも少なくない。
Linuxカーネルを利用した派生OSにAndroid他がある。

オープンソース系BSD

4.3BSD Network Release 2 (Net/2) に起源を持つのがFreeBSD・NetBSD・OpenBSD・DragonFly BSD・TrueOSのいわゆるBSD系Unixである。FreeBSDは安定性重視、NetBSDは新機能対応と移植性に優れ、OpenBSDはセキュリティを重視し、DragonFly BSDはマルチCPU構成での高性能という特徴を有し、TrueOSはカジュアルユーザにおいて簡単に導入して使えることを目指しており、特にFreeBSDはウェブ・ホスティングなどで標準的に使用されている。
USLとの和解以降これらBSD系UNIXはライセンス問題を排除した4.4BSD-Lite2をベースに移行し、いずれもフリーなOSとなっている。
オープンソース系BSDをベースとした商用OSとしてはアップルの「macOS」が知られており、中核部分を「Darwin」としてソース公開している。

2038年問題

Unixでは、システム時刻の値を1970年1月1日の午前0時0分0秒からの秒数で表しており、これをUNIX時間と呼ぶ。この値のデータ型は time_t で、歴史的に「符号つき long」と定義されている。32ビットのシステムでは、2038年1月19日にこの値が1個の0に31個の1が続く最大値 (0x7FFFFFFF) となり、1秒後には1個の1と31個の0が続く値 (0x80000000) となる。するとシステム時刻は、実装によって（符号ビットを無視するか否かによって）1901年または1970年にリセットされる。
1970年より前の時刻をUNIX時間で表すことは滅多にないため、time_t を符号なし32ビット整数と定義し直すという対策が考えられる。しかし、それでは単に問題を2106年2月7日に遅延させるだけであり、時刻の差を計算するソフトウェアでバグを生じる可能性がある。
この問題に対処しているバージョンもある。例えば、SolarisやLinuxの64ビット版では、time_t は64ビットとなっており、OS自身も64ビットのアプリケーション群も約2920億年間正しく動作する。64ビット版Solarisで既存の32ビットアプリケーションを動作させることもできるが、その場合は問題が残ったままである。一部ベンダーは標準の time_t はそのままにして、64ビットの代替データ型とそれを使用するAPIを別途用意している。NetBSDでは、次のメジャーバージョンである 6.x で32ビット版でも time_t を64ビットに拡張することを決定した。従来の32ビットの time_t を使用しているアプリケーションは、バイナリ互換性レイヤーを作って対応する。

ブランディング

1993年10月、Unix System Vのソースについての権利を保有していたノベルは、登録商標の権利をX/Open（現在のThe Open Group）に移管し、1995年にはUNIX関連事業をSCOに売却した。ノベルが実際のソフトウェアの著作権もSCOに売却したのかについては2006年に裁判となり、最終的にノベルが勝利した。SCO側は控訴したが、2011年8月30日に裁判所が棄却したため、裁判は終結した。
アメリカなどで、登録商標としてのUNIXはThe Open Group が保有している。現在、日本における「UNIX」という商標は複数の区分で登録されており、電子計算機関連においてアメリカン テレフォン アンド テレグラム カムパニーやエックス/オープン・カンパニー・リミテッドの登録もある。
日本では、日本マランツ（現在は合併してディーアンドエムホールディングス）が、電気機器分野でUNIXという名前で先行して商標登録を行なっていたため、UNIXという商標の権利関係がはっきりしていなかったことがあった。このことから、書籍などでの商品名などの登録商標についての断り書き一覧などで「UNIXオペレーティングシステムは,AT&Tのベル研究所が開発し,AT&Tがライセンスしています.」（『Life with UNIX』邦訳版での例）などのように書かれたことがあった。現在も日本マランツは音響機器用に「unix」を使用している。他の国でも同様に分野を限定して同じ商標を別の意味で登録することができ、本棚、インクペン、瓶詰めの膠（にかわ）、おむつ、ヘアドライヤー、食品コンテナなどで登録された例がある。
Single UNIX Specificationに完全に準拠しているとThe Open Groupに認められたシステムだけがUNIXを名乗ることができる。そのため認証を受けていないシステムは「Unix系」と呼ばれる。
The Open Groupは "UNIX" を特定のOS実装ではなく、OSのクラスを指すものと定義している。すなわち、Single UNIX Specificationに準拠しているとThe Open Groupに認められたシステムのみがUNIX 98やUNIX 03といった登録商標を付けることを許されており、そのためにベンダーは認証料と毎年のロイヤルティを支払わなければならない。認証を受けたOSとしては、AIX、HP-UX、IRIX、Solaris、Tru64（かつての "Digital UNIX"）、A/UX、macOS、z/OSの一部などがある。
認証を受けていないシステムを表すため、（また、ジャーゴンファイルのUN*Xの項目によれば、商標であることを標示するための「ᵀᴹ」を避けるために）、「UN*X」のようにグロブ記法を使って表記されることがある。ジャーゴンファイルの記述によれば、法的にはUNIXと書いてもᵀᴹを付けることは強制されないのだが、この記法は広く使われてしまっている（ジャーゴンファイル訳本の『ハッカーズ大辞典』初版にある「逆にアスタリスクを使うと権利侵害になるらしい」という記述は誤訳なので注意）。
The Open Groupは商標の普通名称化を防ぐため、UNIX という語には常に「システム」などの語をつけて使って欲しいとしている。
本来の形は "Unix" なのだが、Unix という形もよく使われている。これについてデニス・リッチーは、Association for Computing Machinery (ACM) の開催した第3回OSシンポジウムにUnixの論文を送る際「troffと新たな組版システムを開発したばかりでスモールキャピタルを印字できることに興奮して、それを使ってしまったため」だとしている。当時の多くのOSは大文字のみで名称を記述するのが一般的だったため、多くの人は習慣的に大文字のみで "UNIX" と記述した。
UnixやUnix系の複数のブランドを総称するため、Unixの複数形が時折使われることがある。最も一般的な複数形は Unixes だが、Unixをラテン語の名詞の第3格変化として扱い複数形を Unices する例もよく見られる。古英語的に Unixen とする例はまれだが、ときおり見かける。