「Plan 9 from Bell Labs」の版間の差分

削除された内容 追加された内容
Xqbot (会話 | 投稿記録)
m r2.7.3) (ロボットによる 変更: th:แพลนไนน์
CharHigh (会話 | 投稿記録)
m編集の要約なし
15行目:
|website = [http://plan9.bell-labs.com/plan9/ plan9.bell-labs.com]
| source_model = [[オープンソース]]
| supported_platforms = [[80x86|x86]], [[MIPSアーキテクチャ|MIPS]], [[DEC Alpha]], [[SPARC]], [[PowerPC]], [[ARMアーキテクチャ|ARM]]
}}
 
'''Plan 9 from Bell Labs'''(通称 '''Plan 9''')は、主に研究用に使われている[[分散オペレーティングシステム]]。[[ベル研究所]]の Computing Sciences Research Center で1980年代中ごろから2002年まで、[[UNIX]]の研究上の後継として開発された。Plan 9 は、ネットワークやユーザインタフェースまで含めたあらゆるシステムインタフェースを、個別のインタフェースではなくファイルシステムを通して統一的に表現することを特徴とする。Plan 9 は[[9P]]プロトコルを使い、ユーザーにワークステーション毎に独立した作業環境を提供することを目指している。現在もBell研究所とPlan 9コミュニティによって活発に開発がつづいている<ref>{{cite web | title=continuous work on Plan 9 | url=http://groups.google.com/group/comp.os.plan9/browse_thread/thread/c03099790faee58b | accessdate=2010/11/12}}</ref>。
 
Plan 9 は、[[UNIX]]の流れを汲む[[オペレーティングシステム]] (OS) の一種であり、開発に当たってUNIXの設計の問題点を改善することを念頭に置かれている<ref>[http://plan9.aichi-u.ac.jp/unix.html UNIX との違い]</ref>。
 
== 名称の由来 ==
28行目:
 
== 歴史 ==
Plan 9 はベル研究所内の主な研究用プラットフォームとしてUNIXを代替し、システムの使用とプログラミングについての本来のUNIXのモデル、特に分散[[マルチユーザー]]環境にいくつかの変更を加えることの研究対象ともなった。[[1980年代]]中ごろに始まった当初、Plan 9 はベル研究所内部のプロジェクトだった。
 
Plan 9 は[[ベル研究所]]の Computing Science Research Center のメンバーが開発した。そのグループは[[UNIX]]や[[C言語]]を開発したグループと同一である。当初チームは[[ロブ・パイク]]や[[ケン・トンプソン]]らが率い、Computing Techniques Research Department のリーダーとして[[デニス・リッチー]]が支援した。開発には、[[ブライアン・カーニハン]]、[[ビャーネ・ストロヴストルップ]]らも貢献している<ref name="Developers">{{cite web | last=McIlroy | first=Doug | year=1995 | url= http://cm.bell-labs.com/sys/man/preface.html | title=Preface to the Second (1995) Edition | publisher=Lucent Technologies | accessdate=2006-04-02}}</ref>。
 
[[1992年]]、大学向けに初めてリリースした。[[1995年]]、一般向けの商用OSとしてリリースした。[[1990年代]]末、ベル研究所を引き継いだ[[ルーセント・テクノロジー]]は、このプロジェクトの商業化を断念。[[2000年]]、[[オープンソース]]ライセンスで非商用リリースを行った。[[2002年]]、新たに[[フリーソフトウェア]]ライセンスで非商用リリースを行った。
 
[[ベル研究所]]の研究員や[[マサチューセッツ工科大学]]などの Plan 9 ユーザーコミュニティが、[[ISOイメージ]]の形で頻繁なマイナーリリースを継続している<ref name = "Availability">{{cite web | year=2006 | url= http://cm.bell-labs.com/plan9/ | title=Plan 9 from Bell Labs | publisher= Lucent Technologies | accessdate=2006-04-27}}</ref>。その開発はいまだにベル研究所がホスティングしている。開発ソースツリーは[[9P]]プロトコルか[[Hypertext Transfer Protocol|HTTP]]プロトコルでアクセスでき、インストールしたものを最新に保つのに使われている<ref name= "Staying up to date">{{cite web | year=2006 | url= http://cm.bell-labs.com/wiki/plan9/Staying_up_to_date/index.html | title=Staying up to date | publisher=Plan 9 community | accessdate= 2006-04-27}}</ref>。OS本体をISOイメージとしている以外に、アプリケーションやツールのリポジトリもベル研究所がホスティングしている。
 
== 概要 ==
53行目:
UNIXはそのような差異をなくそうとし、全ての[[入出力]]をファイル操作でモデル化しようとした。そのため、全デバイスドライバが制御手段として ''read'' および ''write'' 操作に対応する必要に迫られた。こうすることで、[[Mv (UNIX)|mv]]や[[Cp (UNIX)|cp]]などのユーティリティで、実装の詳細を気にすることなくデバイスからデバイスへデータを転送することができるようになった。しかし、UNIXでは多くの重要な概念(例えば、プロセス状態の制御など)はファイルにきれいにマッピングされなかった。[[ソケット (BSD)|ソケット]]や [[X Window System]] といった新たな機能が追加されたとき、それらはファイルシステムの外に存在するようになった。新たなハードウェア機能(ソフトウェアがCDのイジェクトを制御するなど)も、[[ioctl]][[システムコール]]などのハードウェア固有制御機構を使うようになった。
 
Plan 9 研究プロジェクトは、ファイル中心の見方への回帰を目標とし、それ以外の手法を排除した。Plan 9 のプログラムから見れば、ネットワークやユーザインタフェースのリソース(ウィンドウなど)も含めたあらゆるリソースが階層型ファイルシステムの一部となっており、それ以外の特別なインタフェースは使わない<ref name="Availability">{{cite web | year=2006 | url= http://plan9.bell-labs.com/plan9/ | title=Plan 9 from Bell Labs | publisher=Lucent Technologies | accessdate=2006-04-27 }}</ref>。
 
=== 分散アーキテクチャ ===
Plan 9 は単一のマシンにインストールして、自立したシステムとして使うこともできる。しかし、OSの個々の機能コンポーネントをそれぞれ別のハードウェアプラットフォームに配置することもできる。模範的は配置では、Rioという[[グラフィカルユーザインタフェース|GUI]]を動作させた軽量な端末をユーザーが使い、ネットワーク経由でCPUサーバに接続して、そちらで計算量の多いプロセスを実行し、さらに別のマシンに用意した永続的データストレージをファイルサーバとして使う。最近のデスクトップコンピュータでは、複数の[[仮想機械]]を動作させて、この環境を1台のマシン上に再現することができる。
 
== 設計 ==
Plan 9 設計者は[[マイクロカーネル]]と似たような目標を掲げていたが、実際のアーキテクチャや実現方法は異なる。Plan 9 の設計目標は次の項目を含む。
; ファイルとしてのリソース
: 全ての[[計算資源|リソース]]を階層型[[ファイルシステム]]内のファイルとして表現する。
68行目:
 
=== ファイルシステム、ファイル、名前 ===
Plan 9 では、[[ファイル (コンピュータ)|ファイル]]も[[画面]]も[[ユーザー]]も[[コンピュータ]]も、それぞれに固有のパス名が対応している。それらは全て既存のUNIXの手法で操作されるが、それに加えて任意のオブジェクトにパス名としての名前をつけることができる([[World Wide Web]] の[[Uniform Resource Identifier|URI]]システムに似ている)。UNIXでは、例えば[[プリンター]]などの機器は <code>/dev</code> 配下の名前で表されるが、ネットワーク経由のプリンターはそのように表されることはなく、直接接続しているプリンターだけである。Plan 9 ではプリンターはファイルとして仮想化され、ネットワーク上のあらゆるプリンターに任意のワークステーションから同じ方法でアクセスできる。
 
また Plan 9 では、実世界では同一のオブジェクトにユーザーごとに異なる名前を付けることができる。各ユーザーは各種オブジェクトを自分の名前空間に集め、個人的環境を生成できる。UNIXでは類似の概念として、別のユーザーからコピーされることでユーザーが特権を得るというコンセプトがあるが、Plan 9 ではそれを全てのオブジェクトに拡張している。ユーザーは容易に自分自身の「クローン」を生成することができ、それに変更を加え、それらが作成されたリソースに影響を与えることなく削除できる。
 
=== Union ディレクトリ ===
UNIXでは、「リンク」やファイルシステムの「マウント」といった考え方で各種リソース群からファイルシステムを構築できる。それらを利用すると、元々のディレクトリは見えなくなる。例えば、"net" というディレクトリに新たなファイルシステムをマウントすると、元々の "net" ディレクトリ配下の内容にはアクセスできなくなる。
 
Plan 9 は「unionディレクトリ」という考え方を導入した。これは、異なる媒体やネットワークにまたがるリソース群をまとめたディレクトリであり、他のディレクトリと透過的に連結することができる。例えば、他のコンピュータの <code>/bin</code> ディレクトリを手元のコンピュータの同名のディレクトリと連結し、ローカルとリモートのアプリケーションに透過的にアクセスできるようにすることができる。同様に、<code>/dev</code> に外部のデバイスやリソースをまとめると、全くコードを追加することなくネットワーク経由でデバイスを共有できる。
 
[[Linuxディストリビューション]]の [[Live CD]] の多くは、この機能の限定版である union mount という機能を実装しているものが増えている。
 
=== /proc ===
<code>/proc</code> ディレクトリには動作中プロセスの一覧があり、それぞれの状態を示している。この Plan 9 の「ファイルシステム」は[[Linux]]や他のオペレーティングシステムにも採用されている。プロセスは名前付きのオブジェクト(infoファイルやcontrolファイルのあるサブディレクトリ)として <code>/proc</code> 配下にあり、他のカーネルリソースと共に動的I/Oチャネルもあり、ユーザーはそれにコマンドを送ったり、データを読み取ったりできる。ユーザーは一部のシステムコールを使ったプログラムをコンパイルしてカーネルとやり取りする必要はなく、<code>[[Ls (UNIX)|ls]]</code> や <code>[[Cat (Unix)|cat]]</code> といったコマンドでプロセスを検索し、操作することができる。
 
他のマシンの <code>/proc</code> ディレクトリは他の特殊なファイルシステムと同様、ユーザーの名前空間にマウントでき、ローカルにあるかのようにそれを使うことができる。これにより、複数のマシンから成る分散コンピューティング環境ができる。ユーザーの机上にある端末、データを格納してあるファイルサーバ、高速CPUや認証や[[ゲートウェイ]]などのその他サーバ群などがあり、それら全てがユーザーが見慣れたディレクトリ階層を使っている。ユーザーは[[ファイルサーバ]]やサーバで動作中のアプリケーションやネットワーク上のプリンターなどを集め、端末上の個人的名前空間にそれらをまとめることができる。
 
=== /net ===
Plan 9 は多数の通信プロトコルやデバイスドライバのインタフェースとしてのシステムコールを持たない。例えば、<code>/net</code> はTCP/IP全体のAPIの役割を担っており、スクリプトやコマンドで操作可能で、制御ファイルに書き込むことでコネクションを読み書きできる。<code>/net/tcp</code> や <code>/net/udp</code> といったサブディレクトリはそれぞれのプロトコルへのインタフェースとして使うことができる。例えば、[[ネットワークアドレス変換|NAT]]を実装する場合、公開IPアドレスを持つ境界線上のマシンの <code>/net</code> をマウントし、内部ネットワークで Plan 9 の[[9P]]プロトコルを使い、プライベートIPアドレスの内部ネットワークから当該マシンへと接続する。[[Virtual Private Network|VPN]]を実装する場合は、インターネット上でセキュアな9Pプロトコルを使い、リモートのゲートウェイの <code>/net</code> ディレクトリをマウントすればよい。
 
<code>/net</code> で union ディレクトリを使う例を示す。[[オブジェクト指向プログラミング]]における継承のように、(リモートの) <code>/special</code> に対して、別のローカルなディレクトリを連結(重ね合わせ)する。すると同じ名前の制御ファイルはあとから重ねた方で隠され、新たな制御ファイルは追加された状態になる。言ってみれば union ディレクトリは、元の2つの親を継承した子オブジェクトのようなものである。オリジナルの機能は部分的に変更されることがある。これを <code>/net</code> ファイルシステムで考えると、<code>/net/udp</code> サブディレクトリを更新または隠蔽すると、UDPインタフェースにローカルなフィルタープロセスをかませて制御または拡張でき、<code>/net/tcp</code> は元のまま、おそらくリモートマシン上で動作させておくといったことができる。名前空間はプロセス単位に設定可能なので、信頼できないアプリケーションに対して制限を加えた <code>/net</code> union ディレクトリを見せることで、ネットワークアクセスを制限することができる。
94行目:
 
=== ネットワークと分散コンピューティング ===
Plan 9 はUNIXをベースとしているが、通信を中核機能としたシステムを構築できることを示すために開発された。全てのシステムリソースには名前があり、ファイルのようにアクセスでき、動作中の各プログラムに対応して動的に分散システムのビューを定義できる。この手法は、ユーザーやアプリケーションに提示するデータを保持するサーバ群を通常ファイルの集まりのように見せることで、アプリケーション設計の汎用性とモジュール性を改善する。
 
Plan 9 の[[透過性 (情報工学)|ネットワーク透過性]]サポートの鍵となる部分は、[[9P]] というプロトコルである。9Pプロトコルとその実装は、名前付きのネットワークオブジェクト同士を結びつけ、ファイルのようなシステムインタフェースとして提示する。9Pは高速なバイト指向[[分散ファイルシステム]]であり(ブロック指向ではない)、リモートマシン上のNFSサーバが提示するオブジェクトだけでなく、任意のオブジェクトを仮想化できる。このプロトコルはプロセスやプログラムやデータと通信するのに使われ、ユーザインタフェースとネットワークの両方を含んでいる。第4版では 9P2000 に改称された。
 
=== Unicode ===
103行目:
== 実装 ==
[[ファイル:Rio in Plan 9 install.png|thumb|rioをGUIとして使ったインストール画面]]
インストール可能な実行環境が[[80x86|x86]]向けに用意されている。また、[[MIPSアーキテクチャ|MIPS]]、[[DEC Alpha]]、[[SPARC]]、[[PowerPC]]、[[ARMアーキテクチャ|ARM]]などのアーキテクチャにも移植されている。システムは [[国際標準化機構|ISO]]/[[ANSI]] [[C言語|C]] の方言の一種で書かれている。いくつかのアプリケーションは[[:en:Alef (programming language)|Alef]]という独自の言語で元々は書かれていたが、後でシステムと同じC言語の方言で書き直されたものもある。[[POSIX]]対応アプリケーションを移植可能であり、[[ソケット (BSD)|ソケット]]は ANSI/POSIX Environment APE 経由でエミュレートできる。最近では、Plan 9 上で[[Linux]]用バイナリを実行できる ''linuxemu'' というアプリケーションも開発中である。
 
[[IBM]]の[[スーパーコンピュータ]] [[Blue Gene]] にも移植されている<ref name="BGPlan9">[http://go.cs.bell-labs.com/fastos/doc/lanl.bglport.pdf Plan9 BG Presentation]</ref>。
 
== 影響 ==
Plan 9 はUNIXの中核的概念、すなわち全てのシステムインタフェースをファイル群で表現するということ、が現代的分散システムとして実装でき、機能することを示した。Plan 9 の一部機能、例えば[[UTF-8]]は他のオペレーティングシステムにも実装された。[[Linux]]などのUnix系オペレーティングシステムは[[9P]]、Plan 9 のファイルシステムやシステムコール体系も部分的に実装した。また、Plan 9 のアプリケーションやツールを集めた Plan 9 from User Space はUnix系システムに移植され、ある程度の人気を得ている。Glendix は、Linuxカーネルの周囲の[[GNU]]のシステムプログラムを Plan 9 内のプログラムで置き換えようとするプロジェクト(あるいは、逆に Plan 9 のカーネルを Linux に置き換えるプロジェクト)である。
 
しかし、Plan 9 はUNIXほどの人気を得ることはなく、研究用ツールという位置づけに終始した。Plan 9 に対しては、「オペレーティングシステム研究での興味深い論文を生成するためのデバイスとして主に機能している」という批判もある<ref name="ESRPlan9" />。[[エリック・レイモンド]]は著書 ''The Art of Unix Programming'' で、Plan 9 が広まらない背景について、次のように考察している。
: Plan 9 が失敗したのは単に、Unix がそれ以前のシステムを凌駕したほど Plan 9 は注目に値する改良ではなかったからである。Plan 9 に比べると Unix はガタピシ言って錆付いたところもあるが、与えられた仕事はちゃんとやっており、現在の位置に留まるだけの資格がある。野心的なシステムアーキテクトへの教訓がここにある。よりよいソリューションにとって最も危険な敵は、すでに存在する十分うまく動作するコードベースである。<ref name="ESRPlan9">{{cite web | last=Raymond | first=Eric S. | authorlink=エリック・レイモンド| url= http://www.faqs.org/docs/artu/plan9.html | title=Plan 9: The Way the Future Was | accessdate= 2006-03-28 }}</ref>
 
Plan 9 の支持者や開発者は、採用を妨げていた問題は既に解決され、当初の目標としていた分散システム、開発環境、研究用プラットフォームには十分な完成度であり、今後徐々に広まっていくだろうと主張している。[[Inferno (オペレーティングシステム)|Inferno]]は仮想機械上で動作するため、混在グリッド環境の一部として Plan 9 の技術をもたらす原動力になるとしている<ref name="9grid">{{cite web | year=2006 | url= http://cm.bell-labs.com/wiki/plan9/9grid/ | title=9grid (Plan 9 wiki) | work=Plan 9 wiki | accessdate=2006-03-28}}</ref><ref name="VitaNuova">{{cite web | year=2004 | url= http://www.vitanuova.com/solutions/grid/news/evotecoai.pdf | title="Press Release: Vita Nuova Supplies Inferno Grid to Evotec OAI | format=PDF | publisher=Vita Nuova Holdings Limted | accessdate=2006-03-28}}</ref><ref name="Rutgers">{{cite web | year=2004 | url= http://www.vitanuova.com/solutions/grid/news/rutgers.pdf | title="Press Release: Rutgers University Libraries Install Inferno Data Grid" | format=PDF | publisher=Vita Nuova Holdings Limited | accessdate=2006-03-28}}</ref><ref name="YorkBio">{{cite web | year=2004 | url= http://www.vitanuova.com/solutions/grid/news/Yorkbiology.pdf | title="Press Release: The University of York Department of Biology install Vita Nuova's Inferno Data Grid" | format=PDF | publisher=Vita Nuova Holdings Limited | accessdate=2006-03-28}}</ref>。
 
== ライセンス ==