昨年の10月ごろから、「2016年の夏にはWindowsのPowerShellでOpenSSHが使えるようになる」という話がちらほら出ていたわけだが、米Microsoftは何段かすっ飛ばし、「夏ごろにはWindowsの上でUbuntuが動くようになる」と発表した。だいぶ斜め上から鋭角に切り込んできた感があるが、Linuxサーバ管理者としては歓迎できる発表である。今回からは数回に渡り、この”Linux on Windows”について現段階でわかっていることを紹介していく。

Ubuntu on Windowsへ戦略チェンジ!

Windowsの開発環境は、UNIX系のOSのそれとは系統が異なる。そのため、UNIX系の開発環境が欲しければMac OS Xを買うか、開発環境やホスティングサーバにLinux/*BSDをインストールして利用するというのが一般的だった。

少なくともWindowsでOpenSSHさえ動作すれば、UNIX系サーバにログインして後の作業は全部そちらでやればよい。だからこそ、本連載の第8回では、当時開発が進んでいたWindows版ネイティブなOpenSSHを使う方法を紹介した。

しかし、Microsoftは今年3月30日から4月1日にかけて米国サンフランシスコで開催した「Build 2016」において、「今夏提供を予定しているWindows 10向けのアップデートでUbuntuの提供を開始する」と発表した。仮想環境などではなく、WindowsでUbuntuが動作する。つまり、Windowsカーネルの上でUbuntuのユーザランドが動作するというのである。

この辺りについては、ブログ「Run Bash on Ubuntu on Windows」や「BASH Runnning in Ubuntu on Windows」に掲載されている動画「Running BASH on Ubuntu on Windows! 」を見るとよいだろう。

動画「Running BASH on Ubuntu on Windows!」では、軽妙なトークで新機能を紹介している

新機能を紹介するこの動画は、米国の通販番組を見ているようで実に味わい深い。18分ほどあるのだが、コメディ風のやりとりも面白いので、できれば全部ご覧いただきたい。あえて大げさにツッコミを入れ合いながら進行し、お約束的な展開を外さない流れになっている。いくつかポイントとなるやり取りを簡単に紹介しておこう。

  • 3:50「Windowsの仮想環境で動かすと、その辺りから始めるのかな」「いや、仮想環境は使わないんだ」「えっ……仮想環境のなかで動かすんじゃないんだって? 」
  • 5:20「本物のUNIXコード? 」「そう、”本物”のUNIXコードさ」
  • 5:30「ちょっと待って待って待って! Windowsで動作しているLinuxから、Windowsのファイルシステムにアクセスできるって言うのかい?! 」「そのとおりさ! 」

テキストにしてしまうとわかりにくいかもしれないが、予定調和感がありありとしていて実に心地良い。「something/some-doing on Linux……on Windows」といったフレーズや、「cool」、「fantastic」、「beautiful」といった賛辞が散りばめられた宝石のような動画だ。ぜひ、皆さんにも味わっていただければと思う。

つまり、どういうこと?

本稿執筆時点において技術詳細は明らかにされておらず、サンプルにもアクセスできないのであまりくわしいことはわからないが、公開されている情報を総合すると、どうもFreeBSDのLinuxバイナリ互換機能と「Jail」を組み合わせた環境と同じようなことをしているようだ。

Jailは、FreeBSDのコンテナ技術である。Jailでは、FreeBSDカーネルの上に隔離空間を用意し、その中にOSやアプリケーションを閉じ込めて動作させる。Linuxだと、LXDDockerなどがこれに類似する技術を使っていると言えば、わかりやすいだろうか。仮想環境のようにマシンをエミュレートするのではなく、あくまでも隔離しているだけだ。

FreeBSDはさらに、LinuxバイナリをそのままBSDカーネルで実行するためのLinuxバイナリ互換機能を提供している。これは、LinuxのシステムコールをダイレクトにFreeBSDカーネルのシステムコールに置き換えて実行するもので、ほとんどネイティブと同じ速度で動作するという特徴がある。

この2つの技術を組み合わせると、Jail環境にUbuntuのユーザランドをセットアップしておくことで、FreeBSDカーネルの上でUbuntuが動作しているように振る舞わせることができる。そうやって運用されているサーバもあるし、LXDやDockerのアイディアも根幹となる考え方はこれと同じだ。どうやら、Microsoftもこれと似たような機能を実装したようである。

ポイントは、Canonicalの正式サポート

実は、この技術はそれほど目新しいものではない。SolarisやほかのUNIXの系OSにも似たような機能は実装されている。実際、使われているシステムコールは、POSIX(Portable Operating System Interface)準拠のものであればどのOSでも基本的には同じだし、独自のシステムコールも追っていくと大体似たような機能が別のシステムコールとして実装されていたりする。

つまり、別のOS向けのバイナリであっても、実行時に呼び出すカーネル内部の関数を変えたり、引数にちょっとした”仕掛け”を仕込んだりすると、多くのコマンドはそのまま動く。Microsoftも、これを利用したのだろう。今のところ、Microsoftではこの機能を「Windows Subsystem for Linux」とか「WSL」、「Linux user-mode」などと呼んでいる。

一方、POSIXで定義されていない個々のカーネル実装に依存する機能を使うもの、例えば「top(1)」のようなコマンドはまだWindows Subsystem for Linuxでは動かないし、MySQLを動かすのもやや難しいようだ。しかし、解消されるのは時間の問題だろう。Microsoftが単体で取り組んでいるなら、何らかの方針展開で簡単に放棄される可能性があるが、今回はUbuntuを支援するCanonicalが一枚噛んでいる。したがって、今後永続的にWindows上で最新のUbuntuのユーザランドが利用できるようになる可能性が高い。

今回のおさらい

今回のおさらいは、次のとおりだ。

  • 今夏には、Windows 10でUbuntuを利用できるようになりそうだ
  • その裏側では、FreeBSDのLinuxバイナリ互換機能とJailを組み合わせた環境と同じようなことが行われていると推測される
  • この機能をMicrosoftでは「Windows Subsystem for Linux」とか「WSL」、もしくは「Linux user-mode」と呼んでいる

ホットなトピックなので、しばらくこの辺りの情報を追っていくことにしたい。