かつてbash on ubuntu on windowsと呼ばれたWindows Subsystem for Linuxをインストールしてみました。
WindowsでLinuxが使える??
Windowsの中でLinuxを使えたらもっと手軽にいろいろ試せるのに、、と思った途端、そういえばなんかあったなあと思い出したのでインストール。まあ特にこれといってやりたいことはないんですが。動作したはいいものの、どういう仕組みで動いているのか気になったので調べました。
仮想化とは違うのか
/mntディレクトリを見てみると、CドライブやDドライブがあるのを確認できます。仮想化とは違って本当にWindowsとシステムが共存しているようです。IPアドレスも確認しましたが、Windowsで使っているいつものアドレスと同じ値が使われていました。VMWare Network Adapter VMnetのアドレスもそのまま使われていました。
調べたところ、現在のwindowsはマイクロカーネル(UNIXのようなモノリシックカーネルと違い、カーネル部を最小にしてその他多くの機能をモジュールとして読み込む考え方)で動作しており、その上に複数のサブシステムを共存させることができるようです。いつものGUIもwindowsサブシステムと呼ばれるもので、これに沿ってLinuxもサブシステム化して動作させることは可能というわけです。
Windows Subsystem for Linux(WSL)はPicoプロバイダードライバという2つのカーネルドライバで実装されており、Windows側でlinuxセッションマネージャサービスがWSLのセッションを呼び出し、その先でbashをforkするという流れになっているようです。下図はmicrosoftのブログから引用しています。
何が便利なのか
まず仮想化に比べると、ファイルの転送がとても楽です。一応Cドライブの中身は/mntに入っていますがそれ以外はまっさらなので、/homeなんかには何も入ってません。なのでその中でlinuxでやりやすい作業をして、その後作ったファイルを/mnt配下に持っていくことで簡単にデータの共存ができます。
加えてネットワーク構成がwindowsとほぼ同じなので、デスクトップ環境でターミナルソフトを立ち上げるところを、sshコマンド一発で入りたいサーバに入れます。それらのサーバとファイル転送をしたいときもwinscpとかいちいち立ち上げなくて済みます。これほどちょうどよくwindowsとlinuxの使いやすいところのいいとこ取りができる技術があったなんて。。。
今のところ自分が見つけたのはそのくらいですが、特にプログラムを書く人にとってはこの恩恵を大きく受けることができるのではないかと思います。officeで資料作りながらコマンドラインで開発できるわけなので。
はじめの一歩に使えるリンク
インストールのしかたと概念はこのへん読めばいけます。
root取れない問題
一瞬詰まる方も多いので参考までに。WSLでルートが取れない問題に関しては、こちらの情報が有効です。
bash on Windows の root のパスワードは | Windows 10
初期パスワードは不明とのことですがsudo は効くので、次のコマンドによってrootパスワードは自分で変更できます。
sudo passwd root