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に一旦コピーする必要があった)。
この連載の記事
-
第427回
PC
WindowsのPowerShellのプロファイルを設定する -
第426回
PC
WindowsでAndroidスマホをWebカメラにする機能を試した -
第425回
PC
無料で使えるExcelにWord、Microsoft 365のウェブ版を調べた -
第424回
PC
Windowsの基本機能であるクリップボードについてあらためて整理 -
第423回
PC
PowerShellの今を見る 2つあるPowerShellはどっち使えばいい? -
第422回
PC
Windows 11の目玉機能が早くも終了、Windows Subsystem for Android(WSA)を振り返る -
第421回
PC
進化しているPowerToys LANで接続したマシンでキーボード/マウス共有機能などが追加 -
第420回
PC
Windowsプレビュー版に搭載されたsudoを試す -
第419回
PC
Windows Insider Previewが変わって、今秋登場のWindows 11 Ver.24H2の新機能が見えてきた? -
第418回
PC
Windows 11のスマートフォン連携は新機能が追加されるなど、いまだ進化している -
第417回
PC
Windows 11のスマートフォン連携機能をあらためて使ってみる - この連載の一覧へ