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に一旦コピーする必要があった)。

この連載の記事
-
第508回
PC
Scalable Vector Graphics(SVG)そもそも何なのか? -
第507回
PC
Windows 11の「開発者モード」とは何か? -
第506回
PC
Windows 11は早くも来秋登場の26H2プレビューの準備が始まる -
第505回
PC
結構変化しているWindows 11のエクスプローラーの基本設定を見直す -
第504回
PC
新しいOutlookとOutlook Classic、そろそろ古いOutlookとExchangeの組み合わせは引退の頃合いか -
第503回
PC
機能が増えたこともあり、寄せ集めから統合化に進むWindowsの便利ツール「PowerToys」 -
第502回
PC
Windows 11でBluetoothのオーディオ新規格「Bluetooth LE Audio」を試す -
第501回
PC
Windows 11 Ver.25H2での変更点、新機能を整理する -
第500回
PC
Windows 11 Ver.25H2が完成した -
第499回
PC
Windowsでの致命的だが回復可能なエラーに備える手段を2つ紹介 -
第498回
PC
Windows Terminalの安定版V1.23が公開 設定UIが改良される - この連載の一覧へ











