このページの本文へ

前へ 1 2 次へ

仮想マシンではなく、Windows環境とUbuntu環境が同時に動く仕組み

Buildで発表された「Bash on Ubuntu on Windows」とは?

2016年04月06日 07時00分更新

文● 大塚昭彦/TECH.ASCII.jp

  • この記事をはてなブックマークに追加
  • 本文印刷

 「BashがWindowsにやって来る(Bash coming to Windows)」。Build 2016の基調講演で、マイクロソフトのケビン・ギャロ氏はそう宣言した。今夏に予定されているWindows 10の次期メジャーアップデート「Windows 10 Anniversary Update」でそれが実現するという。

マイクロソフトはBuild 2016の基調講演で「Bash coming to Windows」と発表(画像はChannel 9より)
Bashの発表やデモを行った、マイクロソフト Windows&Devicesグループ コーポレートVPのケビン・ギャロ(Kevin Gallo)氏

Bashだけでなく、多数のオープンソースツールがネイティブで動作する

 「これは仮想マシンでも、(Cygwinのような)クロスコンパイルしたツールでもない。新しいWindowsサブシステムの“魔法”によって、Ubuntuのネイティブバイナリがそのまま動作する」(ギャロ氏)

 ギャロ氏の短いデモでは「Windows上でBashが動作する」ことだけが強調されたが、実際にはBashだけでなく、Ubuntuが提供するユーザーモードアプリケーション(ELFバイナリ)の多くがそのまま動作するという。実際、ギャロ氏のデモにおいても、Bashから起動したEmacsやsshクライアントが動作していた(言うまでもなく、これらはBashとは独立したバイナリである)。

Buildの基調講演では、BashからEmacsエディタを起動してJavaScriptファイルの内容を修正するデモが披露された

 ギャロ氏によると、この“Ubuntu on Windows”環境は、Windowsストアから直接パッケージをダウンロード/インストールできるようになるという。さらにインストール後は、Ubuntuのapt-getコマンド(パッケージ管理コマンド)を使って、vi/vim、Python、Ruby、GCC、gitなど、Ubuntuが提供する豊富なOSSアプリケーション群を追加することも可能だ。

 Ubuntuの開発を主導する英カノニカルのダスティン・カークランド(Dustin Kirkland)氏は、自身のブログ投稿で“Ubuntu on Windows”のパッケージ化を手がけたことを明らかにし、Windowsエクスプローラーで表示したスクリーンショットを掲載している。

rootfsフォルダを基点(ルート)として/bin、/lib、/etcといった、Linuxユーザーにはおなじみのディレクトリ構成が見られる(カークランド氏ブログより)

 このスクリーンショットを見ると、Ubuntuのルートファイルシステムは、Windows側から見れば「C:\Users\[ユーザー名]\AppData\Local\Lxss\rootfs\」以下に(隠しフォルダとして)展開される。一方で、Ubuntu側からはここがルート(/)になる。なお、Ubuntu側からWindowsのファイルシステムにアクセスしたい場合は、「/mnt/C(Cドライブ)」などのディレクトリをたどればよい。

 カークランド氏によれば、現在のパッケージはUbuntu 14.04 LTSベースで作成したものだが、数週間後には最新版であるUbuntu 16.04 LTSのパッケージ化も完了するという。

Windowsサブシステムの正体は“通訳者”である

 カークランド氏は、マイクロソフトのギャロ氏が“魔法”と称した「Windows Subsystem for Linux」の仕組みについても簡単な説明を加えている。

 マイクロソフトが開発したこのWindowsサブシステムは、Ubuntuのユーザーモードバイナリが発するLinuxのシステムコールを、リアルタイムにWindows OSのシステムコールへと変換してWindowsカーネルに伝える役割を果たす。“Linuxの言葉(システムコール)”を理解する“通訳者(サブシステム)”が仲介することで、Ubuntuのバイナリを修正することなくWindows環境で動作させることができるわけだ。

WindowsサブシステムはLinuxシステムコールを“通訳”する(Channel 9より)。この仕組みにより、Windowsカーネルは、WindowsアプリケーションとUbuntuアプリケーションの両方を同時に実行できる

 上述の仕組みを考えると、サブシステムにおける“翻訳”処理のオーバーヘッドが気になるだろう。しかしカークランド氏は、「Sysbenchによるベンチマークでは、CPU/メモリ使用率やI/Oパフォーマンスは(ベアメタルのLinuxマシンで動作させる場合と)ほぼ同等だった」と証言している。少なくとも、仮想マシンでUbuntuを立ち上げ、バイナリを実行するよりはずっと負荷が少ないと考えてよさそうだ。

 マイクロソフトのスコット・ハンセルマン氏も、自身のブログ投稿の中で、Cygwinとは違ってLinuxバイナリがそのまま動作し、しかも仮想マシンとは異なり動作は軽量だと述べ、これまでの手法とは異なることを説明している。

マイクロソフト Webプラットフォーム&ツール プリンシパルコミュニティアーキテクトのスコット・ハンセルマン(Scott Hanselman)氏(Channel 9より)
BashでCPU情報を表示。仮想マシンではないので、物理CPUそのものの情報が見えている(Channel 9より)

前へ 1 2 次へ

ピックアップ