WSL$の詳細を詳しく見る
WSL$は、Plan 9のために開発された9Pというプロトコルを使っている。Plan 9は、Unixを開発したベル研究所で作られてきたOSで「Plan 9 from Bell Labs」というのが正式な名前である(この名前はカルト的な人気を誇る映画「Plan9 from Outer Space」が元ネタである)。
Plan 9は、Unixの次の研究プロジェクトとして作られ、ファイルという形でOSの管理するリソースにアクセスできたため、9Pは単純なファイルシステム以外にも適用が可能だった。また、UnixやLinuxへのポーティングも進められていたため、すでに実績のあるコードが作られていた。
Linux/Unixで一般的なNFSを使わなかったのは、9Pが疑似ファイルシステムなどもサポートできたこと、ファイル共有プロトコルとしては軽量だったことが理由と考えられる。もちろん、すでにLinuxに移植されていたということもあるだろう。
そのソースコードの由来はともかく、マイクロソフトはWSLで9Pプロトコルを扱えるようにした。また、/initプロセスで9Pファイルサーバーを動作させるように改良した。これにより、WSL側は、VolFs(ルートディレクトリ以下)や/proc、/sysなどの特殊ファイルシステムを含めて、Win32側からアクセスを可能にした。
Win32側は、9Pプロトコルのクライアントをリダイレクタードライバーとして実装した。これは、C:\windows\system32\driversにある「p9rdr.sys」が対応している。このp9rdr.sysは、リダイレクタードライバーとして組み込まれ、ネットワークフォルダーに「wsl$」ホストを見せるようになっている。
p9rdr.sysと/init(9Pサーバー)の間は、AF_UNIXによるプロセス間通信を使う。AF_UNIXは、ソケット(バークレーソケット)を使う場合に同一マシン内のプロセス間通信に使う「アドレスファミリー(Address Family)」である。これは、Windows 10 Ver.1803(RS4)でWindows側とWSLに実装された機能だ。このときには、何に使うのかが見えていなかったが、実はこうした用途が想定されていたというわけだ。
利用面からいえば、これでWin32とWSLは、どちら側からもお互いのファイルシステムをアクセスできるようになった。今までは、WSLのファイルシステムにあるファイルはWSL側からしかアクセスできず、コマンドをDrvFs側(/mnt/cなど)の上で動かすことが強いられたが、今後はWSLのユーザーホームディレクトリなどにあるファイルをWin32側から簡単にアクセスできようになる。
文字コードや行末コードにさえ注意すれば、.bashrcをメモ帳で編集するといったことも可能になるし、WSL複数のディストリビューション間でのファイル転送がWin32のエクスプローラーからも可能になった(従来はDrvFsに一旦コピーする必要があった)。
本記事はアフィリエイトプログラムによる収益を得ている場合があります

この連載の記事
-
第545回
PC
Windows 11でBluetoothオーディオ共有(Auracast)を試してみる -
第544回
PC
PowerShellにおけるwinget -
第543回
PC
Windows 11 Ver.26H2プレビュー公開 さらにその次のWindowsも少し見えてきた -
第542回
PC
「WMIC」が消滅 コマンドが消える「WMI」とはそもそも何? -
第541回
PC
AIを組み込んだWindowsターミナル「Intelligent Terminal」をインストールして試してみる -
第540回
PC
Windows 11に付属の新しいOutlookでアカウント設定をする -
第539回
PC
Microsoft製の新しいWindows用日本語入力「Copilot Keyboard」を使う -
第538回
PC
PowerShellをシェルとして使うためのポイント【情報表示のやり方】 -
第537回
PC
PowerShellをシェルとして使うためのポイントを解説 -
第536回
PC
Microsoft製のコンソールエディタMS-Editが2.0になり、文法ハイライト機能が搭載 -
第535回
PC
WSLコンテナーのプレビューを試す 今年はWSLに動きがありそうだ - この連載の一覧へ











