9P

9P（または Plan 9 Filesystem Protocol または Styx）は、Plan 9 from Bell Labs (Plan 9) 分散オペレーティングシステムのために、Plan 9システムの構成要素を接続する手段として開発された、ネットワークプロトコルである。ファイルはPlan 9の重要なオブジェクトである。 ファイルはウィンドウ、ネットワークの接続、プロセスや、その他オペレーティングシステムで利用可能なほとんどのものを表現している。

9Pは、Plan 9の第4版のために、9P2000という名前で様々な改良を含む改訂をされた。この改良のうちいくつかは、ある程度のファイル名制限の除去、ディレクトリへの'最終変更者'メタデータフィールドの追加、ファイルの認証といったものである。Inferno operating systemの最新版も9P2000を使用している。Inferno file protocolは元々はStyxと呼ばれていたが、技術的には常に9Pの変種であった。

Unixのための9Pサーバ実装はu9fsと呼ばれており、Plan 9ディストリビューションに含まれている。9PのOS Xクライアントkernel extensionはMac9Pによって提供されている。いくつかの拡張を含む9Pを実装しているLinux用のカーネルクライアントドライバはv9fsプロジェクトの一部である。9Pとその派生物はStyx on a Brick projectのような組み込み環境のアプリケーションにも見られる。

 サーバアプリケーション 
Plan 9アプリケーションの多くが9Pファイルサーバの形になっている。例には以下のものがある。
 Acme: プログラマのためのユーザインターフェース
 : Plan 9のウィンドウマネージャ
 : プロセス間通信
 ftpfs: リモートのFTPサーバ上のファイルとディレクトリをローカル名前空間に表示するFTPクライアント
 wikifs: リモートのwikiをファイルとしてローカル名前空間に表示するwiki編集ツール
 webfs: URLからデータを取り出して、その内容とレスポンスの詳細をファイルとしてローカル名前空間に表示するファイルサーバ

Plan 9以外では、9Pプロトコルは軽量なリモートファイルシステムが要求されるときに、まだ使われている。
 NixOS: 純粋関数的で宣言的なLinuxディストリビューションはバーチャルマシンの中で自分自身をリビルドできる。クライアントはホストのパッケージストアディレクトリをマウントするために9Pを使う。
 Windows Subsystem for Linux: Windows 10 version 1903以降、サブシステムは9Pをサーバとして実装して、ホストのWindowsオペレーティングシステムはクライアントとしてふるまう。
 Crostini: カスタム9PサーバはLinux VMの外側のファイルへのアクセスを提供するために使われる。 
 QEMU: VirtFSデバイスは9Pを通じてファイルシステムの共有をすることができる。これはカーネルドライバと共有メモリによって高速化される。
 DIOD: 分散I/Oデーモン - 9Pファイルサーバ

 実装 
9Pはクライアントとサーバの間で以下のメッセージを送る。これらのメッセージは、いかなる9Pサーバも実装しなければならないPlan 9 vfsレイヤのエントリーポイントに対応している。

 version
 プロトコルのバージョンのネゴシエーションを行う
 error
 エラーを返す
 flush
 メッセージを打ち切る
 auth, attach
 接続を確立する
 walk
 ディレクトリ階層を辿る
 create, open
 既存または新規ファイルのI/Oをするためにfidを作成する
 read, write
 ファイルとデータの送受信をする
 clunk
 fidを忘れる
 remove
 サーバからファイルを削除する
 stat, wstat
 ファイルの属性を問い合わせる、または変更する

 脚注 

 関連項目 
 IL Protocol、ローカルエリアネットワーク内の9Pのために設計されたトランスポートプロトコル
 分散ファイルシステム

 外部リンク 
9P Resources cat-v.org上のページ
9P Manual
The Styx Architecture for Distributed Systems ロブ・パイクとデニス・リッチーによる
The Organization of Networks in Plan 9 Dave PresottoとPhil Winterbottomによる
9p-rfc 9Pプロトコルに関するRFCと標準の文書

Category:通信プロトコル
Category:アプリケーション層プロトコル
Category:オペレーティングシステムの仕組み
Category:Plan 9 from Bell Labs
Category:Inferno (オペレーティングシステム)