「Plan 9 from Bell Labs」の版間の差分
WikitanvirBot (会話 | 投稿記録) m r2.7.1) (ロボットによる 追加: hy:Plan 9 from Bell Labs |
Baudanbau20 (会話 | 投稿記録) m →脚注・出典 |
||
(33人の利用者による、間の43版が非表示) | |||
1行目: | 1行目: | ||
⚫ | |||
{{Infobox OS| |
{{Infobox OS| |
||
|name = Plan 9 from Bell Labs |
|name = Plan 9 from Bell Labs |
||
|screenshot = [[ファイル:Plan 9 Fourth Edition rio interaction screenshot.png|220px|rioをGUIとして使ったPlan 9画面]] |
|||
|screenshot = |
|||
|caption = |
|caption = rioをGUIとして使ったPlan 9画面 |
||
|developer = [[ベル研究所]] |
|developer = [[ベル研究所]] |
||
|family = Unixの後継 |
|family = Unixの後継 |
||
|source_model = [[フリーソフトウェア]]/[[オープンソース]] |
|source_model = [[フリーソフトウェア]]/[[オープンソース]] |
||
|latest_release_version = Fourth Edition |
|latest_release_version = Fourth Edition |
||
|latest_release_date = |
|latest_release_date = {{Start date and age|2015|01|10}}<ref>{{cite web |
||
|url = http://plan9.bell-labs.com/plan9checksums.txt |
|||
|archive-url = https://web.archive.org/web/20170601074943/http://plan9.bell-labs.com/plan9checksums.txt |
|||
|archive-date = 2017-06-01 |
|||
|title = plan9checksums |
|||
|access-date = 2019-07-25 |
|||
|publisher = Bell Labs |
|||
|quote = Sat Jan 10 04:04:55 EST 2015 ... plan9.iso.bz2 |
|||
}}</ref> |
|||
|kernel_type = [[ハイブリッドカーネル|ハイブリッド]] |
|kernel_type = [[ハイブリッドカーネル|ハイブリッド]] |
||
|ui = [[Rio (program)|rio]] / [[rc]] |
|ui = [[Rio (program)|rio]] / [[rc]] |
||
|license = |
|license = {{仮リンク|Lucent Public License|en|Lucent Public License}} |
||
2021: [[MIT License|MIT]]<ref>{{cite web |title=Plan 9 License |url=http://p9f.org/license.html |website=p9f.org |access-date=14 June 2021 |archive-date=14 June 2021 |archive-url=https://web.archive.org/web/20210614163403/http://p9f.org/license.html |url-status=live}}</ref><ref name="plan9 copyright transfer" /><br />2014: [[GNU General Public License|GPL-2.0-only]]<ref>{{cite web |title=Plan9License |url=http://akaros.cs.berkeley.edu/files/Plan9License |website=akaros.cs.berkeley.edu |access-date=14 June 2021 |quote=''The University of California, Berkeley, has been authorised by Alcatel-Lucent to release all Plan 9 software previously governed by the Lucent Public License, Version 1.02 under the GNU General Public License, Version 2.''|archive-date=13 February 2014 |archive-url=https://web.archive.org/web/20140213172858/http://akaros.cs.berkeley.edu/files/Plan9License}}</ref><br />2002: [[Lucent Public License|LPL-1.02]]<ref>{{cite web |title=Lucent Public License Version 1.02 |url=http://plan9.bell-labs.com/plan9dist/license.html |website=plan9.bell-labs.com |access-date=14 June 2021 |archive-date=3 October 2003 |archive-url=https://web.archive.org/web/20031003143445/http://plan9.bell-labs.com/plan9dist/license.html}}</ref><br />2000: Plan 9 OSL<ref>{{cite web |title=Plan 9 Open Source License - Version 1.4 - 09/10/02 |url=http://plan9.bell-labs.com/plan9dist/license.html |website=plan9.bell-labs.com |access-date=14 June 2021 |archive-date=18 December 2002 |archive-url=https://web.archive.org/web/20021218022657/http://plan9.bell-labs.com/plan9dist/license.html}}</ref><ref>{{cite web |title=Plan 9 Open Source License - Version 1.2 - 10/29/00 |url=http://plan9.bell-labs.com/plan9dist/license.html |website=plan9.bell-labs.com |access-date=14 June 2021 |archive-date=6 December 2000 |archive-url=https://web.archive.org/web/20001206083100/http://plan9.bell-labs.com/plan9dist/license.html}}</ref><ref>{{cite web |title=Plan 9 Open Source License - Version 1.1 - 09/20/00 |url=http://plan9.bell-labs.com/plan9dist/license.html |website=plan9.bell-labs.com |access-date=14 June 2021 |archive-date=26 October 2000 |archive-url=https://web.archive.org/web/20001026141512/http://plan9.bell-labs.com/plan9dist/license.html}}</ref><ref>{{cite web |title=Plan 9 Open Source License Agreement |url=http://plan9.bell-labs.com/plan9dist/license.html |website=plan9.bell-labs.com |access-date=14 June 2021 |archive-date=16 August 2000 |archive-url=https://web.archive.org/web/20000816164219/http://plan9.bell-labs.com/plan9dist/license.html}}</ref> |
|||
|working_state = Current |
|working_state = Current |
||
|website = [ |
|website = [https://9p.io/plan9/ https://9p.io/plan9/] |
||
⚫ | |||
| source_model = [[オープンソース]] |
|||
⚫ | |||
}} |
}} |
||
'''Plan 9 from Bell Labs'''(通称 '''Plan 9''')は、主に研究用に使われている[[分散オペレーティングシステム]]。[[ベル研究所]]の Computing Sciences Research Center で1980年代中ごろから2002年まで、[[UNIX]]の研究上の後継として開発された。Plan 9 は、ネットワークやユーザインタフェースまで含めたあらゆるシステムインタフェースを、個別のインタフェースではなくファイルシステムを通して統一的に表現することを特徴とする。Plan 9 は[[9P]]プロトコルを使い、ユーザーにワークステーション毎に独立した作業環境を提供することを目指している |
{{Lang|en|'''Plan 9 from Bell Labs'''}}(通称 {{Lang|en|'''Plan 9'''}})は、主に研究用に使われている[[分散オペレーティングシステム]]。[[ベル研究所]]の {{Lang|en|Computing Sciences Research Center}} で1980年代中ごろから2002年まで、[[UNIX]]の研究上の後継として開発された。Plan 9 は、ネットワークやユーザインタフェースまで含めたあらゆるシステムインタフェースを、個別のインタフェースではなくファイルシステムを通して統一的に表現することを特徴とする。Plan 9 は[[9P]]プロトコルを使い、ユーザーにワークステーション毎に独立した作業環境を提供することを目指している。 |
||
Plan 9 は、[[UNIX]]の流れを汲む[[オペレーティングシステム]]の一種であり、開発に当たってUNIXの設計の問題点を改善することを念頭に置かれている<ref>[http://plan9.aichi-u.ac.jp/unix.html UNIX との違い]</ref>。 |
Plan 9 は、[[UNIX]]の流れを汲む[[オペレーティングシステム]] (OS) の一種であり、開発に当たってUNIXの設計の問題点を改善することを念頭に置かれている<ref>[http://plan9.aichi-u.ac.jp/unix.html UNIX との違い]</ref>。 |
||
== 名称の由来 == |
== 名称の由来 == |
||
Plan 9の"9"には、UNIX version 8の次の版 |
Plan 9の"9"には、UNIX version 8の次の版という意味もあると言われている(UNIX version 9と10も作られているが)。 |
||
また、''Plan9 from Bell Labs''と |
また、フルネームを''Plan9 from Bell Labs''だとしているが、これは[[エド・ウッド]]の[[B級映画|史上最低の映画と評された]][[サイエンス・フィクション|SF]]映画 [[プラン9・フロム・アウタースペース|Plan 9 from Outer Space]] から来ている<ref>{{cite web | last = Raymond | first = Eric | title = The Art of UNIX Programming | url= http://www.faqs.org/docs/artu/plan9.html#ftn.id3015199 | accessdate = 2007-05-07 }}</ref>。また、プロジェクトのマスコットキャラクターGlendaの名も、同じくエド・ウッド作品[[グレンとグレンダ]]にちなむ。初期の(つまり間に合わせの)ウインドウシステムの[[:en:8½ (Plan 9)|8½]]は(9に足りてない、という意味もあるが)[[フェデリコ・フェリーニ]]の名画「[[8 1/2]]」に掛けており、[[ハッカー]]流ジョークの側面でもUNIXの後継であることをうかがわせる。 |
||
== 歴史 == |
== 歴史 == |
||
Plan 9 |
Plan 9はベル研究所内の主な研究用プラットフォームとしてUNIXを代替し、システムの使用とプログラミングについての本来のUNIXのモデル、特に分散[[マルチユーザー]]環境にいくつかの変更を加えることの研究対象ともなった。[[1980年代]]中ごろに始まった当初、Plan 9はベル研究所内部のプロジェクトだった。 |
||
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年、新たに[[フリーソフトウェア]]ライセンスで非商用リリースを行った。 |
[[1992年]]、大学向けに初めてリリースした。[[1995年]]、一般向けの商用OSとしてリリースした。[[1990年代]]末、ベル研究所を引き継いだ[[ルーセント・テクノロジー]]は、このプロジェクトの商業化を断念。[[2000年]]、[[オープンソース]]ライセンスで非商用リリースを行った。[[2002年]]、新たに[[フリーソフトウェア]]ライセンスで非商用リリースを行った。 |
||
[[ベル研究所]]の研究員や[[マサチューセッツ工科大学]]などの Plan 9 |
[[ベル研究所]]の研究員や[[マサチューセッツ工科大学]]などの 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イメージとしている以外に、アプリケーションやツールのリポジトリもベル研究所がホスティングしている。 |
||
== 概要 == |
== 概要 == |
||
46行目: | 53行目: | ||
したがって、UNIXの設計当初になかった[[コンピュータネットワーク|ネットワーク]]の利用を前提とし、[[端末]]、[[CPU]][[サーバ]]、[[ファイルサーバ]]、[[認証]]サーバを分けることで[[コンピュータセキュリティ|セキュリティ]]の向上を狙う。また、ファイルサーバは毎日のスナップショットを保存し、ユーザーレベルでのバックアップ作業をほぼ不要なものとした。 |
したがって、UNIXの設計当初になかった[[コンピュータネットワーク|ネットワーク]]の利用を前提とし、[[端末]]、[[CPU]][[サーバ]]、[[ファイルサーバ]]、[[認証]]サーバを分けることで[[コンピュータセキュリティ|セキュリティ]]の向上を狙う。また、ファイルサーバは毎日のスナップショットを保存し、ユーザーレベルでのバックアップ作業をほぼ不要なものとした。 |
||
当初はMOジュークボックスなどの利用を考えており、[[ハードディスク]]はMOジュークボックスの[[キャッシュ]]という考え方だった。最近ではハードディスクの大容量化と低廉化が進んでいるため、MOジュークボックスの代わりにハードディスクを使えるようになりつつある。 |
当初はMOジュークボックスなどの利用を考えており、[[ハードディスク]]はMOジュークボックスの[[キャッシュ (コンピュータシステム)|キャッシュ]]という考え方だった。最近ではハードディスクの大容量化と低廉化が進んでいるため、MOジュークボックスの代わりにハードディスクを使えるようになりつつある。 |
||
=== 全てのリソースはファイルである === |
=== 全てのリソースはファイルである === |
||
UNIX以前、多くのオペレーティングシステムはそれぞれのデバイスにアクセスするのに、それぞれ異なる機構を用意していた。例えば、[[ディスクドライブ]]にアクセスする[[アプリケーションプログラミングインタフェース|API]]は、シリアルポートでデータ送受信をするためのAPIとは全く異なるし、[[プリンター]]にデータを送信するAPIとも全く異なっていた。 |
UNIX以前、多くのオペレーティングシステムはそれぞれのデバイスにアクセスするのに、それぞれ異なる機構を用意していた。例えば、[[ディスクドライブ]]にアクセスする[[アプリケーションプログラミングインタフェース|API]]は、シリアルポートでデータ送受信をするためのAPIとは全く異なるし、[[プリンター]]にデータを送信するAPIとも全く異なっていた。 |
||
UNIXはそのような差異をなくそうとし、全ての[[入出力]]をファイル操作でモデル化しようとした。そのため、全デバイスドライバが制御手段として ''read'' および ''write'' 操作に対応する必要に迫られた。こうすることで、[[Mv (UNIX)|mv]]や[[Cp (UNIX)|cp]]などのユーティリティで、実装の詳細を気にすることなくデバイスからデバイス |
UNIXはそのような差異をなくそうとし、全ての[[入出力]]をファイル操作でモデル化しようとした。そのため、全デバイスドライバが制御手段として ''read'' および ''write'' 操作に対応する必要に迫られた。こうすることで、[[Mv (UNIX)|mv]]や[[Cp (UNIX)|cp]]などのユーティリティで、実装の詳細を気にすることなくデバイスからデバイスにデータを転送することができるようになった。しかし、UNIXでは多くの重要な概念(例えば、プロセス状態の制御など)はファイルにきれいにマッピングされなかった。[[ソケット (BSD)|ソケット]]や [[X Window System]] といった新たな機能が追加されたとき、それらはファイルシステムの外に存在するようになった。新たなハードウェア機能(ソフトウェアがCDのイジェクトを制御するなど)も、[[ioctl]][[システムコール]]などのハードウェア固有制御機構を使うようになった。 |
||
Plan 9 |
Plan 9研究プロジェクトは、ファイル中心の見方への回帰を目標とし、それ以外の手法を排除した(その一部は、外のUnixへ与えた影響が限定的であった、ベル研版UNIXのバージョン8, 9, 10から引き継がれたものである)。Plan 9のプログラムから見れば、ネットワークやユーザインタフェースのリソース(ウィンドウなど)も含めたあらゆるリソースが階層型ファイルシステムの一部となっており、それ以外の特別なインタフェースは使わない<ref name="Availability"/>。 |
||
=== 分散アーキテクチャ === |
=== 分散アーキテクチャ === |
||
Plan 9 |
Plan 9は単一のマシンにインストールして、自立したシステムとして使うこともできる。しかし、OSの個々の機能コンポーネントをそれぞれ別のハードウェアプラットフォームに配置することもできる。模範的な配置では、Rioという[[グラフィカルユーザインタフェース|GUI]]を動作させた軽量な端末をユーザーが使い、ネットワーク経由でCPUサーバに接続して、そちらで計算量の多いプロセスを実行し、さらに別のマシンに用意した永続的データストレージをファイルサーバとして使う。最近のデスクトップコンピュータでは、複数の[[仮想機械]]を動作させて、この環境を1台のマシン上に再現することができる。 |
||
== 設計 == |
== 設計 == |
||
Plan 9 |
Plan 9設計者は[[マイクロカーネル]]と似たような目標を掲げていたが、実際のアーキテクチャや実現方法は異なる。Plan 9の設計目標は次の項目を含む。 |
||
; ファイルとしてのリソース |
; ファイルとしてのリソース |
||
: 全ての[[計算資源|リソース]]を階層型[[ファイルシステム]]内のファイルとして表現する。 |
: 全ての[[計算資源|リソース]]を階層型[[ファイルシステム]]内のファイルとして表現する。 |
||
68行目: | 75行目: | ||
=== ファイルシステム、ファイル、名前 === |
=== ファイルシステム、ファイル、名前 === |
||
Plan 9 |
Plan 9では、[[ファイル (コンピュータ)|ファイル]]も[[画面]]{{要曖昧さ回避|date=2023年6月}}も[[ユーザー (コンピュータ)|ユーザー]]も[[コンピュータ]]も、それぞれに固有のパス名が対応している。それらは全て既存のUNIXの手法で操作されるが、それに加えて任意のオブジェクトにパス名としての名前をつけることができる([[World Wide Web]]の[[Uniform Resource Identifier|URI]]システムに似ている)。UNIXでは、例えば[[プリンター]]などの機器は <code>/dev</code> 配下の名前で表されるが、ネットワーク経由のプリンターはそのように表されることはなく、直接接続しているプリンターだけである。Plan 9ではプリンターはファイルとして仮想化され、ネットワーク上のあらゆるプリンターに任意のワークステーションから同じ方法でアクセスできる。 |
||
また Plan 9 |
また Plan 9では、実世界では同一のオブジェクトにユーザーごとに異なる名前を付けることができる。各ユーザーは各種オブジェクトを自分の名前空間に集め、個人的環境を生成できる。UNIXでは類似の概念として、別のユーザーからコピーされることでユーザーが特権を得るというコンセプトがあるが、Plan 9 ではそれを全てのオブジェクトに拡張している。ユーザーは容易に自分自身の「クローン」を生成することができ、それに変更を加え、それらが作成されたリソースに影響を与えることなく削除できる。 |
||
=== Union ディレクトリ === |
=== Union ディレクトリ === |
||
UNIXでは、「リンク」やファイルシステムの「マウント」といった考え方で各種リソース群からファイルシステムを構築できる。それらを利用すると、元々のディレクトリは見えなくなる。例えば、"net" というディレクトリに新たなファイルシステムをマウントすると、元々の "net" ディレクトリ配下の内容にはアクセスできなくなる。 |
UNIXでは、「リンク」やファイルシステムの「マウント」といった考え方で各種リソース群からファイルシステムを構築できる。それらを利用すると、元々のディレクトリは見えなくなる。例えば、"net" というディレクトリに新たなファイルシステムをマウントすると、元々の "net" ディレクトリ配下の内容にはアクセスできなくなる。 |
||
Plan 9 |
Plan 9は「unionディレクトリ」という考え方を導入した。これは、異なる媒体やネットワークにまたがるリソース群をまとめたディレクトリであり、他のディレクトリと透過的に連結することができる。例えば、他のコンピュータの <code>/bin</code> ディレクトリを手元のコンピュータの同名のディレクトリと連結し、ローカルとリモートのアプリケーションに透過的にアクセスできるようにすることができる。同様に、<code>/dev</code> に外部のデバイスやリソースをまとめると、全くコードを追加することなくネットワーク経由でデバイスを共有できる。 |
||
[[Linuxディストリビューション]]の |
[[Linuxディストリビューション]]の[[Live CD]]の多くは、この機能の限定版である union mount という機能を実装しているものが増えている。 |
||
=== /proc === |
=== /proc === |
||
<code>/proc</code> ディレクトリには動作中プロセスの一覧があり、それぞれの状態を示している。 |
<code>/proc</code> ディレクトリには動作中プロセスの一覧があり、それぞれの状態を示している。いわゆる「プロセスファイルシステム([[procfs]])」と呼ばれるもので、標準化はされておらず詳細は異なるが、[[Linux]]その他多くのUnixでも採用されている。プロセスは名前付きのオブジェクト(infoファイルやcontrolファイルのあるサブディレクトリ)として <code>/proc</code> 配下にあり、他のカーネルリソースと共に動的I/Oチャネルもあり、ユーザーはそれにコマンドを送ったり、データを読み取ったりできる。ユーザーは一部のシステムコールを使ったプログラムをコンパイルしてカーネルとやり取りする必要はなく、<code>[[Ls (UNIX)|ls]]</code> や <code>[[Cat (UNIX)|cat]]</code> といったコマンドでプロセスを検索し、操作することができる。 |
||
他のマシンの <code>/proc</code> ディレクトリは他の特殊なファイルシステムと同様、ユーザーの名前空間にマウントでき、ローカルにあるかのようにそれを使うことができる。これにより、複数のマシンから成る分散コンピューティング環境ができる。ユーザーの机上にある端末、データを格納してあるファイルサーバ、高速CPUや認証や[[ゲートウェイ]]などのその他サーバ群などがあり、それら全てがユーザーが見慣れたディレクトリ階層を使っている。ユーザーは[[ファイルサーバ]]やサーバで動作中のアプリケーションやネットワーク上のプリンターなどを集め、端末上の個人的名前空間にそれらをまとめることができる。 |
他のマシンの <code>/proc</code> ディレクトリは他の特殊なファイルシステムと同様、ユーザーの名前空間にマウントでき、ローカルにあるかのようにそれを使うことができる。これにより、複数のマシンから成る分散コンピューティング環境ができる。ユーザーの机上にある端末、データを格納してあるファイルサーバ、高速CPUや認証や[[ゲートウェイ]]などのその他サーバ群などがあり、それら全てがユーザーが見慣れたディレクトリ階層を使っている。ユーザーは[[ファイルサーバ]]やサーバで動作中のアプリケーションやネットワーク上のプリンターなどを集め、端末上の個人的名前空間にそれらをまとめることができる。 |
||
=== /net === |
=== /net === |
||
Plan 9 |
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 ディレクトリを見せることで、ネットワークアクセスを制限することができる。 |
<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 ディレクトリを見せることで、ネットワークアクセスを制限することができる。 |
||
91行目: | 98行目: | ||
このような機構は、異なるシステム上で異なる言語で書かれたファイルシステムや「オブジェクト」を容易に連結でき、プログラマからはファイルシステムの名前付けやアクセス制御やセキュリティの大部分が透過的となる。 |
このような機構は、異なるシステム上で異なる言語で書かれたファイルシステムや「オブジェクト」を容易に連結でき、プログラマからはファイルシステムの名前付けやアクセス制御やセキュリティの大部分が透過的となる。 |
||
類似の機構として |
類似の機構として4.4BSDの portal<ref>[http://static.usenix.org/publications/library/proceedings/neworl/full_papers/stevens.a Portals in 4.4BSD]</ref>がある。UDPは実装されていない、(慣習であって本質的な違いではないが)マウントポイントが <code>/net</code> ではなく <code>/p</code> である、といった点が違う。 |
||
=== ネットワークと分散コンピューティング === |
=== ネットワークと分散コンピューティング === |
||
Plan 9 |
Plan 9はUNIXをベースとしているが、通信を中核機能としたシステムを構築できることを示すために開発された。全てのシステムリソースには名前があり、ファイルのようにアクセスでき、動作中の各プログラムに対応して動的に分散システムのビューを定義できる。この手法は、ユーザーやアプリケーションに提示するデータを保持するサーバ群を通常ファイルの集まりのように見せることで、アプリケーション設計の汎用性とモジュール性を改善する。 |
||
Plan 9 |
Plan 9の[[透過性 (情報工学)|ネットワーク透過性]]サポートの鍵となる部分は、[[9P]]というプロトコルである。9Pプロトコルとその実装は、名前付きのネットワークオブジェクト同士を結びつけ、ファイルのようなシステムインタフェースとして提示する。9Pは高速なバイト指向[[分散ファイルシステム]]であり(ブロック指向ではない)、リモートマシン上のNFSサーバが提示するオブジェクトだけでなく、任意のオブジェクトを仮想化できる。このプロトコルはプロセスやプログラムやデータと通信するのに使われ、ユーザインタフェースとネットワークの両方を含んでいる。第4版では 9P2000 に改称された。 |
||
=== Unicode === |
=== Unicode === |
||
102行目: | 109行目: | ||
== 実装 == |
== 実装 == |
||
[[ファイル: |
[[ファイル:Plan 9 Fourth Edition installing file system screenshot.png|thumb|rioをGUIとして使ったインストール画面]] |
||
インストール可能な実行環境が[[ |
インストール可能な実行環境が[[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>。 |
[[IBM]]の[[スーパーコンピュータ]] [[Blue Gene]] にも移植されている<ref name="BGPlan9">[http://go.cs.bell-labs.com/fastos/doc/lanl.bglport.pdf Plan9 BG Presentation]</ref>。 |
||
== 影響 == |
== 影響 == |
||
Plan 9 |
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 |
しかし、Plan 9はUNIXほどの人気を得ることはなく、研究用ツールという位置づけに終始した。Plan 9に対しては、「オペレーティングシステム研究での興味深い論文を生成するためのデバイスとして主に機能している」という批判もある<ref name="ESRPlan9" />。[[エリック・レイモンド]]は著書 ''The Art of Unix Programming'' で、Plan 9が広まらない背景について、次のように考察している。 |
||
: 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 |
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>。 |
||
== ライセンス == |
== ライセンス == |
||
[[GNU |
[[GNUプロジェクト]]はPlan 9のライセンス<ref>[http://plan9.bell-labs.com/plan9/license.html Lucent Public License]</ref>を[[フリーソフトウェア]]ライセンスだとは認めていなかったが、2003年6月にそのライセンスに変更が加えられ、[[GNU General Public License|GPL]]とは整合性を持たないながらも、[[フリーソフトウェア]]と認められるようになった<ref>[http://www.gnu.org/licenses/license-list.html Various Licenses and Comments about Them - GNU Project - Free Software Foundation (FSF)]</ref>。[[Open Source Initiative|OSI]]も[[オープンソース]]ライセンスと認めており、[[Debianフリーソフトウェアガイドライン]]には合格している。[http://plan9.bell-labs.com/plan9/download.html 全ソースコード]がそのライセンスでフリーで入手可能である。 |
||
⚫ | |||
{{脚注ヘルプ}} |
|||
⚫ | |||
<ref name="plan9 copyright transfer">{{cite web |last1=Sorace |first1=Anthony |title=Transfer of Plan 9 to the Plan 9 Foundation |url=https://marc.info/?l=9fans&m=161650489113326|website=marc.info |access-date=2020-04-14 |archive-date=13 April 2021 |archive-url=https://web.archive.org/web/20210413225220/https://marc.info/?l=9fans&m=161650489113326}}</ref> |
|||
}} |
|||
== 関連項目 == |
== 関連項目 == |
||
* [[Acme |
* [[Acme (テキストエディタ)]] - プログラマ用ユーザインタフェース |
||
* [[9P]] - ファイルシステム・プロトコル |
* [[9P]] - ファイルシステム・プロトコル |
||
* [[Inferno (オペレーティングシステム) |
* [[Inferno (オペレーティングシステム)]] - Plan 9 から派生した分散OS |
||
⚫ | |||
⚫ | |||
== 外部リンク == |
== 外部リンク == |
||
⚫ | |||
=== ベル研究所 === |
=== ベル研究所 === |
||
* [http://plan9.bell-labs.com/ |
* [https://web.archive.org/web/20150831234945/http://plan9.bell-labs.com/plan9/ Plan 9 from Bell Labs](公式サイト、[[英語]]) |
||
** [ |
** [https://9p.io/plan9/img/plan9bunnywhite.jpg イメージキャラクター「Glenda」]([[JPEG]]画像) |
||
* [http://doc.cat-v.org/plan_9/ その他の関連文書など(英語)] |
* [http://doc.cat-v.org/plan_9/ その他の関連文書など(英語)] |
||
* [http://doc.cat-v.org/plan_9/2nd_edition/README README for 2nd Edition] by [[ブライアン・カーニハン|Brian W. Kernighan]] |
* [http://doc.cat-v.org/plan_9/2nd_edition/README README for 2nd Edition] by [[ブライアン・カーニハン|Brian W. Kernighan]] |
||
155行目: | 166行目: | ||
* [http://ninetimes.cat-v.org Ninetimes] Plan 9、Inferno、Unix といったベル研究所製OSに関するニュースサイト |
* [http://ninetimes.cat-v.org Ninetimes] Plan 9、Inferno、Unix といったベル研究所製OSに関するニュースサイト |
||
* [http://www.faqs.org/docs/artu/plan9.html "Plan 9: The Way the Future Was"] from ''The Art of Unix Programming'' by [[エリック・レイモンド|Eric S. Raymond]] |
* [http://www.faqs.org/docs/artu/plan9.html "Plan 9: The Way the Future Was"] from ''The Art of Unix Programming'' by [[エリック・レイモンド|Eric S. Raymond]] |
||
* [ |
* [https://doi.org/10.1108/07378830310509772 Reinventing UNIX: An introduction to the Plan 9 operating system], by Hancock, B., Giarlo, M.J., & Triggs, J. A., published in ''Library Hi Tech'', 21(4), 471-476. |
||
* [http://plan9.escet.urjc.es/who/nemo/9.intro.pdf Introduction to OS abstractions using Plan 9 from Bell Labs], by Francisco J Ballesteros |
* [http://plan9.escet.urjc.es/who/nemo/9.intro.pdf Introduction to OS abstractions using Plan 9 from Bell Labs], by Francisco J Ballesteros |
||
* [http://lsub.org/ls/planb.html Plan B] - Plan 9 を基盤とした研究用OS |
* [http://lsub.org/ls/planb.html Plan B] - Plan 9 を基盤とした研究用OS |
||
162行目: | 173行目: | ||
{{Unix-like}} |
{{Unix-like}} |
||
{{ロブ・パイク}} |
|||
{{Normdaten}} |
|||
[[Category:オペレーティングシステム]] |
|||
⚫ | |||
⚫ | |||
[[Category:フリーソフトウェアOS]] |
|||
[[Category:Unix系オペレーティングシステム]] |
[[Category:Unix系オペレーティングシステム]] |
||
[[Category:1992年のソフトウェア]] |
|||
[[Category:ケン・トンプソン]] |
|||
⚫ | |||
[[de:Plan 9 (Betriebssystem)]] |
|||
⚫ | |||
[[eo:Plano 9]] |
|||
[[es:Plan 9 from Bell Labs]] |
|||
[[fr:Plan 9 from Bell Labs]] |
|||
[[gl:Plan 9]] |
|||
[[he:Plan 9 from Bell Labs]] |
|||
[[hu:Plan 9 from Bell Labs]] |
|||
[[hy:Plan 9 from Bell Labs]] |
|||
[[it:Plan 9]] |
|||
[[ko:플랜 9 (운영 체제)]] |
|||
[[lt:Plan 9]] |
|||
[[nl:Plan 9]] |
|||
[[no:Plan 9]] |
|||
[[pl:Plan 9]] |
|||
[[pt:Plan 9 from Bell Labs]] |
|||
[[ru:Plan 9]] |
|||
[[simple:Plan 9 from Bell Labs]] |
|||
[[sv:Plan 9]] |
|||
[[th:Plan 9]] |
|||
[[uk:Plan 9]] |
|||
[[zh:貝爾實驗室九號計畫]] |
2024年1月6日 (土) 09:52時点における最新版
rioをGUIとして使ったPlan 9画面 | |
開発者 | ベル研究所 |
---|---|
OSの系統 | Unixの後継 |
開発状況 | Current |
ソースモデル | フリーソフトウェア/オープンソース |
最新安定版 | Fourth Edition / 2015年1月10日[1] |
プラットフォーム | x86, MIPS, DEC Alpha, SPARC, PowerPC, ARM |
カーネル種別 | ハイブリッド |
既定のUI | rio / rc |
ライセンス |
2021: MIT[2][3] 2014: GPL-2.0-only[4] 2002: LPL-1.02[5] 2000: Plan 9 OSL[6][7][8][9] |
ウェブサイト | https://9p.io/plan9/ |
Plan 9 from Bell Labs(通称 Plan 9)は、主に研究用に使われている分散オペレーティングシステム。ベル研究所の Computing Sciences Research Center で1980年代中ごろから2002年まで、UNIXの研究上の後継として開発された。Plan 9 は、ネットワークやユーザインタフェースまで含めたあらゆるシステムインタフェースを、個別のインタフェースではなくファイルシステムを通して統一的に表現することを特徴とする。Plan 9 は9Pプロトコルを使い、ユーザーにワークステーション毎に独立した作業環境を提供することを目指している。
Plan 9 は、UNIXの流れを汲むオペレーティングシステム (OS) の一種であり、開発に当たってUNIXの設計の問題点を改善することを念頭に置かれている[10]。
名称の由来
[編集]Plan 9の"9"には、UNIX version 8の次の版という意味もあると言われている(UNIX version 9と10も作られているが)。
また、フルネームをPlan9 from Bell Labsだとしているが、これはエド・ウッドの史上最低の映画と評されたSF映画 Plan 9 from Outer Space から来ている[11]。また、プロジェクトのマスコットキャラクターGlendaの名も、同じくエド・ウッド作品グレンとグレンダにちなむ。初期の(つまり間に合わせの)ウインドウシステムの8½は(9に足りてない、という意味もあるが)フェデリコ・フェリーニの名画「8 1/2」に掛けており、ハッカー流ジョークの側面でもUNIXの後継であることをうかがわせる。
歴史
[編集]Plan 9はベル研究所内の主な研究用プラットフォームとしてUNIXを代替し、システムの使用とプログラミングについての本来のUNIXのモデル、特に分散マルチユーザー環境にいくつかの変更を加えることの研究対象ともなった。1980年代中ごろに始まった当初、Plan 9はベル研究所内部のプロジェクトだった。
Plan 9はベル研究所の Computing Science Research Center のメンバーが開発した。そのグループはUNIXやC言語を開発したグループと同一である。当初チームはロブ・パイクやケン・トンプソンらが率い、Computing Techniques Research Department のリーダーとしてデニス・リッチーが支援した。開発には、ブライアン・カーニハン、ビャーネ・ストロヴストルップらも貢献している[12]。
1992年、大学向けに初めてリリースした。1995年、一般向けの商用OSとしてリリースした。1990年代末、ベル研究所を引き継いだルーセント・テクノロジーは、このプロジェクトの商業化を断念。2000年、オープンソースライセンスで非商用リリースを行った。2002年、新たにフリーソフトウェアライセンスで非商用リリースを行った。
ベル研究所の研究員やマサチューセッツ工科大学などの Plan 9ユーザーコミュニティが、ISOイメージの形で頻繁なマイナーリリースを継続している[13]。その開発はいまだにベル研究所がホスティングしている。開発ソースツリーは9PプロトコルかHTTPプロトコルでアクセスでき、インストールしたものを最新に保つのに使われている[14]。OS本体をISOイメージとしている以外に、アプリケーションやツールのリポジトリもベル研究所がホスティングしている。
概要
[編集]UNIXとの違い
[編集]UNIXの問題点とは、1つのコンピュータを多くの利用者が共有することを前提に作られており、多くのコンピュータを多くの利用者が共有することは考えられていないことである。その結果、利用者が特定のコンピュータを占有することになり、それらのコンピュータは雑然と管理運営されることになる。
UNIXの当初の環境では、どの端末からコンピュータを使っても同じ環境を再現できた。Plan 9では、それをネットワーク上に繋がった分散処理環境上で実現する。
また、UNIXの開発がローカルなファイルシステムをどう表現するかということをテーマとして始まったのに対して、Plan 9は、ローカルであれリモートであれ、リソースというものにどうアクセスするかということを課題とする研究として始まった。
したがって、UNIXの設計当初になかったネットワークの利用を前提とし、端末、CPUサーバ、ファイルサーバ、認証サーバを分けることでセキュリティの向上を狙う。また、ファイルサーバは毎日のスナップショットを保存し、ユーザーレベルでのバックアップ作業をほぼ不要なものとした。
当初はMOジュークボックスなどの利用を考えており、ハードディスクはMOジュークボックスのキャッシュという考え方だった。最近ではハードディスクの大容量化と低廉化が進んでいるため、MOジュークボックスの代わりにハードディスクを使えるようになりつつある。
全てのリソースはファイルである
[編集]UNIX以前、多くのオペレーティングシステムはそれぞれのデバイスにアクセスするのに、それぞれ異なる機構を用意していた。例えば、ディスクドライブにアクセスするAPIは、シリアルポートでデータ送受信をするためのAPIとは全く異なるし、プリンターにデータを送信するAPIとも全く異なっていた。
UNIXはそのような差異をなくそうとし、全ての入出力をファイル操作でモデル化しようとした。そのため、全デバイスドライバが制御手段として read および write 操作に対応する必要に迫られた。こうすることで、mvやcpなどのユーティリティで、実装の詳細を気にすることなくデバイスからデバイスにデータを転送することができるようになった。しかし、UNIXでは多くの重要な概念(例えば、プロセス状態の制御など)はファイルにきれいにマッピングされなかった。ソケットや X Window System といった新たな機能が追加されたとき、それらはファイルシステムの外に存在するようになった。新たなハードウェア機能(ソフトウェアがCDのイジェクトを制御するなど)も、ioctlシステムコールなどのハードウェア固有制御機構を使うようになった。
Plan 9研究プロジェクトは、ファイル中心の見方への回帰を目標とし、それ以外の手法を排除した(その一部は、外のUnixへ与えた影響が限定的であった、ベル研版UNIXのバージョン8, 9, 10から引き継がれたものである)。Plan 9のプログラムから見れば、ネットワークやユーザインタフェースのリソース(ウィンドウなど)も含めたあらゆるリソースが階層型ファイルシステムの一部となっており、それ以外の特別なインタフェースは使わない[13]。
分散アーキテクチャ
[編集]Plan 9は単一のマシンにインストールして、自立したシステムとして使うこともできる。しかし、OSの個々の機能コンポーネントをそれぞれ別のハードウェアプラットフォームに配置することもできる。模範的な配置では、RioというGUIを動作させた軽量な端末をユーザーが使い、ネットワーク経由でCPUサーバに接続して、そちらで計算量の多いプロセスを実行し、さらに別のマシンに用意した永続的データストレージをファイルサーバとして使う。最近のデスクトップコンピュータでは、複数の仮想機械を動作させて、この環境を1台のマシン上に再現することができる。
設計
[編集]Plan 9設計者はマイクロカーネルと似たような目標を掲げていたが、実際のアーキテクチャや実現方法は異なる。Plan 9の設計目標は次の項目を含む。
- ファイルとしてのリソース
- 全てのリソースを階層型ファイルシステム内のファイルとして表現する。
- 名前空間
- アプリケーションから見て、ネットワークは単一で一貫した名前空間であり、それも階層型ファイルシステムとして表現される。しかし、実体はローカルまたはリモートに分離されたリソース群である。各プロセスの名前空間はそれぞれ独立に構築でき、ユーザーは異なる複数の名前空間のアプリケーション群を同時に扱える。
- 標準通信プロトコル
- 9Pという標準プロトコルを使い、ローカルやリモートの区別なく、あらゆるリソースにアクセスする。
ファイルシステム、ファイル、名前
[編集]Plan 9では、ファイルも画面[要曖昧さ回避]もユーザーもコンピュータも、それぞれに固有のパス名が対応している。それらは全て既存のUNIXの手法で操作されるが、それに加えて任意のオブジェクトにパス名としての名前をつけることができる(World Wide WebのURIシステムに似ている)。UNIXでは、例えばプリンターなどの機器は /dev
配下の名前で表されるが、ネットワーク経由のプリンターはそのように表されることはなく、直接接続しているプリンターだけである。Plan 9ではプリンターはファイルとして仮想化され、ネットワーク上のあらゆるプリンターに任意のワークステーションから同じ方法でアクセスできる。
また Plan 9では、実世界では同一のオブジェクトにユーザーごとに異なる名前を付けることができる。各ユーザーは各種オブジェクトを自分の名前空間に集め、個人的環境を生成できる。UNIXでは類似の概念として、別のユーザーからコピーされることでユーザーが特権を得るというコンセプトがあるが、Plan 9 ではそれを全てのオブジェクトに拡張している。ユーザーは容易に自分自身の「クローン」を生成することができ、それに変更を加え、それらが作成されたリソースに影響を与えることなく削除できる。
Union ディレクトリ
[編集]UNIXでは、「リンク」やファイルシステムの「マウント」といった考え方で各種リソース群からファイルシステムを構築できる。それらを利用すると、元々のディレクトリは見えなくなる。例えば、"net" というディレクトリに新たなファイルシステムをマウントすると、元々の "net" ディレクトリ配下の内容にはアクセスできなくなる。
Plan 9は「unionディレクトリ」という考え方を導入した。これは、異なる媒体やネットワークにまたがるリソース群をまとめたディレクトリであり、他のディレクトリと透過的に連結することができる。例えば、他のコンピュータの /bin
ディレクトリを手元のコンピュータの同名のディレクトリと連結し、ローカルとリモートのアプリケーションに透過的にアクセスできるようにすることができる。同様に、/dev
に外部のデバイスやリソースをまとめると、全くコードを追加することなくネットワーク経由でデバイスを共有できる。
LinuxディストリビューションのLive CDの多くは、この機能の限定版である union mount という機能を実装しているものが増えている。
/proc
[編集]/proc
ディレクトリには動作中プロセスの一覧があり、それぞれの状態を示している。いわゆる「プロセスファイルシステム(procfs)」と呼ばれるもので、標準化はされておらず詳細は異なるが、Linuxその他多くのUnixでも採用されている。プロセスは名前付きのオブジェクト(infoファイルやcontrolファイルのあるサブディレクトリ)として /proc
配下にあり、他のカーネルリソースと共に動的I/Oチャネルもあり、ユーザーはそれにコマンドを送ったり、データを読み取ったりできる。ユーザーは一部のシステムコールを使ったプログラムをコンパイルしてカーネルとやり取りする必要はなく、ls
や cat
といったコマンドでプロセスを検索し、操作することができる。
他のマシンの /proc
ディレクトリは他の特殊なファイルシステムと同様、ユーザーの名前空間にマウントでき、ローカルにあるかのようにそれを使うことができる。これにより、複数のマシンから成る分散コンピューティング環境ができる。ユーザーの机上にある端末、データを格納してあるファイルサーバ、高速CPUや認証やゲートウェイなどのその他サーバ群などがあり、それら全てがユーザーが見慣れたディレクトリ階層を使っている。ユーザーはファイルサーバやサーバで動作中のアプリケーションやネットワーク上のプリンターなどを集め、端末上の個人的名前空間にそれらをまとめることができる。
/net
[編集]Plan 9は多数の通信プロトコルやデバイスドライバのインタフェースとしてのシステムコールを持たない。例えば、/net
はTCP/IP全体のAPIの役割を担っており、スクリプトやコマンドで操作可能で、制御ファイルに書き込むことでコネクションを読み書きできる。/net/tcp
や /net/udp
といったサブディレクトリはそれぞれのプロトコルへのインタフェースとして使うことができる。例えば、NATを実装する場合、公開IPアドレスを持つ境界線上のマシンの /net
をマウントし、内部ネットワークで Plan 9 の9Pプロトコルを使い、プライベートIPアドレスの内部ネットワークから当該マシンへと接続する。VPNを実装する場合は、インターネット上でセキュアな9Pプロトコルを使い、リモートのゲートウェイの /net
ディレクトリをマウントすればよい。
/net
で union ディレクトリを使う例を示す。オブジェクト指向プログラミングにおける継承のように、(リモートの) /special
に対して、別のローカルなディレクトリを連結(重ね合わせ)する。すると同じ名前の制御ファイルはあとから重ねた方で隠され、新たな制御ファイルは追加された状態になる。言ってみれば union ディレクトリは、元の2つの親を継承した子オブジェクトのようなものである。オリジナルの機能は部分的に変更されることがある。これを /net
ファイルシステムで考えると、/net/udp
サブディレクトリを更新または隠蔽すると、UDPインタフェースにローカルなフィルタープロセスをかませて制御または拡張でき、/net/tcp
は元のまま、おそらくリモートマシン上で動作させておくといったことができる。名前空間はプロセス単位に設定可能なので、信頼できないアプリケーションに対して制限を加えた /net
union ディレクトリを見せることで、ネットワークアクセスを制限することができる。
このような機構は、異なるシステム上で異なる言語で書かれたファイルシステムや「オブジェクト」を容易に連結でき、プログラマからはファイルシステムの名前付けやアクセス制御やセキュリティの大部分が透過的となる。
類似の機構として4.4BSDの portal[15]がある。UDPは実装されていない、(慣習であって本質的な違いではないが)マウントポイントが /net
ではなく /p
である、といった点が違う。
ネットワークと分散コンピューティング
[編集]Plan 9はUNIXをベースとしているが、通信を中核機能としたシステムを構築できることを示すために開発された。全てのシステムリソースには名前があり、ファイルのようにアクセスでき、動作中の各プログラムに対応して動的に分散システムのビューを定義できる。この手法は、ユーザーやアプリケーションに提示するデータを保持するサーバ群を通常ファイルの集まりのように見せることで、アプリケーション設計の汎用性とモジュール性を改善する。
Plan 9のネットワーク透過性サポートの鍵となる部分は、9Pというプロトコルである。9Pプロトコルとその実装は、名前付きのネットワークオブジェクト同士を結びつけ、ファイルのようなシステムインタフェースとして提示する。9Pは高速なバイト指向分散ファイルシステムであり(ブロック指向ではない)、リモートマシン上のNFSサーバが提示するオブジェクトだけでなく、任意のオブジェクトを仮想化できる。このプロトコルはプロセスやプログラムやデータと通信するのに使われ、ユーザインタフェースとネットワークの両方を含んでいる。第4版では 9P2000 に改称された。
Unicode
[編集]Plan 9の内部コードはUTF-8となっている。このため、多言語の問題は基本的には発生しない。また、そもそもUTF-8自体、Plan 9の研究の過程でケン・トンプソンが考案したもので、1992年に全コードがUTF-8対応になった[16]。なお、Plan 9 がサポートしているのは、Unicodeの基本多言語面だけである。
実装
[編集]インストール可能な実行環境がx86向けに用意されている。また、MIPS、DEC Alpha、SPARC、PowerPC、ARMなどのアーキテクチャにも移植されている。システムは ISO/ANSI C の方言の一種で書かれている。いくつかのアプリケーションはAlefという独自の言語で元々は書かれていたが、後でシステムと同じC言語の方言で書き直されたものもある。POSIX対応アプリケーションを移植可能であり、ソケットは ANSI/POSIX Environment APE 経由でエミュレートできる。最近では、Plan 9上でLinux用バイナリを実行できる linuxemu というアプリケーションも開発中である。
IBMのスーパーコンピュータ Blue Gene にも移植されている[17]。
影響
[編集]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に対しては、「オペレーティングシステム研究での興味深い論文を生成するためのデバイスとして主に機能している」という批判もある[18]。エリック・レイモンドは著書 The Art of Unix Programming で、Plan 9が広まらない背景について、次のように考察している。
- Plan 9が失敗したのは単に、Unix がそれ以前のシステムを凌駕したほどPlan 9は注目に値する改良ではなかったからである。Plan 9に比べると Unix はガタピシ言って錆付いたところもあるが、与えられた仕事はちゃんとやっており、現在の位置に留まるだけの資格がある。野心的なシステムアーキテクトへの教訓がここにある。よりよいソリューションにとって最も危険な敵は、すでに存在する十分うまく動作するコードベースである。[18]
Plan 9の支持者や開発者は、採用を妨げていた問題は既に解決され、当初の目標としていた分散システム、開発環境、研究用プラットフォームには十分な完成度であり、今後徐々に広まっていくだろうと主張している。Infernoは仮想機械上で動作するため、混在グリッド環境の一部として Plan 9 の技術をもたらす原動力になるとしている[19][20][21][22]。
ライセンス
[編集]GNUプロジェクトはPlan 9のライセンス[23]をフリーソフトウェアライセンスだとは認めていなかったが、2003年6月にそのライセンスに変更が加えられ、GPLとは整合性を持たないながらも、フリーソフトウェアと認められるようになった[24]。OSIもオープンソースライセンスと認めており、Debianフリーソフトウェアガイドラインには合格している。全ソースコードがそのライセンスでフリーで入手可能である。
脚注・出典
[編集]- ^ “plan9checksums”. Bell Labs. 2017年6月1日時点のオリジナルよりアーカイブ。2019年7月25日閲覧。 “Sat Jan 10 04:04:55 EST 2015 ... plan9.iso.bz2”
- ^ “Plan 9 License”. p9f.org. 2021年6月14日時点のオリジナルよりアーカイブ。2021年6月14日閲覧。
- ^ “Transfer of Plan 9 to the Plan 9 Foundation”. marc.info. 2021年4月13日時点のオリジナルよりアーカイブ。2020年4月14日閲覧。
- ^ “Plan9License”. akaros.cs.berkeley.edu. 2014年2月13日時点のオリジナルよりアーカイブ。2021年6月14日閲覧。 “The University of California, Berkeley, has been authorised by Alcatel-Lucent to release all Plan 9 software previously governed by the Lucent Public License, Version 1.02 under the GNU General Public License, Version 2.”
- ^ “Lucent Public License Version 1.02”. plan9.bell-labs.com. 2003年10月3日時点のオリジナルよりアーカイブ。2021年6月14日閲覧。
- ^ “Plan 9 Open Source License - Version 1.4 - 09/10/02”. plan9.bell-labs.com. 2002年12月18日時点のオリジナルよりアーカイブ。2021年6月14日閲覧。
- ^ “Plan 9 Open Source License - Version 1.2 - 10/29/00”. plan9.bell-labs.com. 2000年12月6日時点のオリジナルよりアーカイブ。2021年6月14日閲覧。
- ^ “Plan 9 Open Source License - Version 1.1 - 09/20/00”. plan9.bell-labs.com. 2000年10月26日時点のオリジナルよりアーカイブ。2021年6月14日閲覧。
- ^ “Plan 9 Open Source License Agreement”. plan9.bell-labs.com. 2000年8月16日時点のオリジナルよりアーカイブ。2021年6月14日閲覧。
- ^ UNIX との違い
- ^ Raymond, Eric. “The Art of UNIX Programming”. 2007年5月7日閲覧。
- ^ McIlroy, Doug (1995年). “Preface to the Second (1995) Edition”. Lucent Technologies. 2006年4月2日閲覧。
- ^ a b “Plan 9 from Bell Labs”. Lucent Technologies (2006年). 2006年4月27日閲覧。
- ^ “Staying up to date”. Plan 9 community (2006年). 2006年4月27日閲覧。
- ^ Portals in 4.4BSD
- ^ Pike, Rob (2003年). “UTF-8 History”. 2006年4月27日閲覧。
- ^ Plan9 BG Presentation
- ^ a b Raymond, Eric S.. “Plan 9: The Way the Future Was”. 2006年3月28日閲覧。
- ^ “9grid (Plan 9 wiki)”. Plan 9 wiki (2006年). 2006年3月28日閲覧。
- ^ “"Press Release: Vita Nuova Supplies Inferno Grid to Evotec OAI” (PDF). Vita Nuova Holdings Limted (2004年). 2006年3月28日閲覧。
- ^ “"Press Release: Rutgers University Libraries Install Inferno Data Grid"” (PDF). Vita Nuova Holdings Limited (2004年). 2006年3月28日閲覧。
- ^ “"Press Release: The University of York Department of Biology install Vita Nuova's Inferno Data Grid"” (PDF). Vita Nuova Holdings Limited (2004年). 2006年3月28日閲覧。
- ^ Lucent Public License
- ^ Various Licenses and Comments about Them - GNU Project - Free Software Foundation (FSF)
関連項目
[編集]- Acme (テキストエディタ) - プログラマ用ユーザインタフェース
- 9P - ファイルシステム・プロトコル
- Inferno (オペレーティングシステム) - Plan 9 から派生した分散OS
外部リンク
[編集]ベル研究所
[編集]- Plan 9 from Bell Labs(公式サイト、英語)
- その他の関連文書など(英語)
- README for 2nd Edition by Brian W. Kernighan
- Plan 9 projects in the GSoC
- Organizations using Plan 9 and Inferno Plan 9 や Inferno を使っている組織の不完全な一覧
レクチャー
[編集]- Slides - Video from FOSDEM 2006
- Plan 9 is not dead at FAST-OS 2005
他のネイティブ版と仮想版
[編集]- ネイティブ
- Plan 9 - Vita Nuova Holdings による製品版
- 仮想
その他
[編集]- Plan9翻訳プロジェクト
- http://plan9.aichi-u.ac.jp/
- ベル研究所 Plan9の概要(ASCII24のニュース)
- http://p9c.cc.titech.ac.jp/plan9/
- 9fans, メーリングリスト
- Ninetimes Plan 9、Inferno、Unix といったベル研究所製OSに関するニュースサイト
- "Plan 9: The Way the Future Was" from The Art of Unix Programming by Eric S. Raymond
- Reinventing UNIX: An introduction to the Plan 9 operating system, by Hancock, B., Giarlo, M.J., & Triggs, J. A., published in Library Hi Tech, 21(4), 471-476.
- Introduction to OS abstractions using Plan 9 from Bell Labs, by Francisco J Ballesteros
- Plan B - Plan 9 を基盤とした研究用OS
- Octopus - Plan B からの派生
- Glendix - Plan 9 のユーザー空間ツールをLinuxに移植したもの