Ubuntu Weekly Topics

2016年4月1日号“Running Bash on Ubuntu on Windows”, Windows Subsystem for Linux・UWN#460

“Running Bash on Ubuntu on Windows”, Windows Subsystem for Linux

歴史が変わる瞬間がやってきました。Microsoftの開発者向けカンファレンス、Build 2016の講演において、⁠Windows Subsystem for Linux」と、このサブシステムを利用する「Ubuntu on Windows」のリリースが予告されました。講演のタイトルはRunning Bash on Ubuntu on Windows!で、⁠BashがWindows 10上のUbuntuで動く」というものです。

「Windows上でUbuntuが動く」という、にわかには信じられない機能がMicrosoftから提供されることになりました。これは仮想マシンではありません。完全な「Ubuntuのファイルシステムそのもの」がWindows上で、ELFバイナリのまま[1]動作します。

すなわちLinuxの実行ファイルが、Windows上でそのまま動作する世界が間もなくやってきます。しかも、これを提供するのはMicrosoftそのものです。

Windows 10のスタートメニューで「bash」と入力すれば、Ubuntuそのものがサブシステム上で動作し、完全なbash環境が起動します。動作の原理は、⁠Linuxカーネルと同じようにふるまうもの」がWindowsのサブシステムとして動作し、ELFバイナリをそのまま動作させるとされています。

この機能は、今夏に提供されるWindows 10の⁠Restone 1⁠アップデートで開発者向けに提供されます。現時点での利用には、Insider programに参加しており、かつ、最新の状態に更新した上でDeveloper Modeを有効にする必要があります。

基本的な詳細は、MicrosoftのScott Hanselmanのblog記事と、Canonicalの(byobu等の作者としてお馴染みの)Dustin Kirklandのblog記事を参照してください。

関連する情報のうち、ユーザーにとって興味深い点をまず並べてみましょう。

  • Windows 10上で、⁠bashが動く環境」が提供されるようになる。⁠Ubuntu on Windows」と呼称され、サブシステムと、ストア経由で提供されるUbuntuのルートファイルシステムで構成される。
  • この環境はUbuntu 14.04 LTSベースである。16.04 LTSベースへの更新も予定されている。
  • 「ふつうの」Ubuntu環境で、aptによるパッケージインストールを含めて、かなりのコマンドが動作する。ただし、psやtopなど、procfsやsysfs・システムコールに直結する動作はまだ不十分な部分もある。
  • 「開発者向けの」作業環境であり、Windows ServerでLinuxのバイナリを動かせる機能では(まだ)ない。
  • SSHも動作する。
  • Microsoft側の発表を見ると、⁠Linuxバイナリ実行機能」であることはあまり深くは触れていない。⁠LinuxそのもののBashを提供する」というスタンスとなっている。

リリース時点のBash on Ubuntu on Windowsについて、各種情報から示された情報や、推定される挙動は次の通りです。

  • 夏以降、Developer Modeを有効にしたWindows10環境であれば、ストアからBash on Ubuntu on WindowsをダウンロードするだけでUbuntuのユーザーランドが利用できるようになる。
  • bashが動作するだけでなく、各種ユーザーランドもかなりの割合のものが動作する。
  • 現時点ではttyドライバ(をVT100端末で動かしている状態)の制約により、GNU Screenやtmuxが動作しない。よって、byobuを使うことはできない。
  • X Window Systemを必要とするアプリケーションは利用できない。Mirも利用できないので、CLI環境専用。Emacsは動いている様子が紹介されている。
  • 完全な互換性が提供されているわけではないので、中には動作しないバイナリも存在するかもしれない。
  • 構造上、Ubuntu以外のディストリビューションを動かせる可能性が高い。現時点では明確な情報はないものの、このスクリーンショットから判断するとこれは単なるルートファイルシステムを展開しただけの環境であり、他のユーザーランドを同様に展開することで動作する可能性が相応にある(後述も参照⁠⁠。
  • 「/mnt/c」といったマウントポイントを経由して、Linux環境からWindows環境へアクセスすることが可能。
  • Windows環境上では、⁠C:\Users\ユーザー名\AppData\Local\Lxss\rootfs\」にファイルシステムが展開される。

……ということで、少なくともリリース時点では、この「Windows上で動くbash」は、まさに「Bash on Ubuntu on Windows 10」というレベルで、⁠開発者が便利に使うためのインターフェース」という位置づけです。Web開発者がWindows環境でテスト的にデプロイしたり、あるいはクラウド環境を操作するためのインターフェースとして使うためのものです。

言い換えれば、この「Windows上でLinuxバイナリが動く環境」サービスに使える段階には、⁠今のところ』ありません。ただし、今後の拡張次第ではとてつもない未来がやってくる可能性があります。たとえば、次のようなものです。

  • Windows Serverの一機能として、Linuxベースのソフトウェア環境に依存するデーモンを走らせることができるようになる(かもしれない⁠⁠。
  • Windows Server上で動作するDockerで、Linuxバイナリを動作させることができる。すなわち、Windows Serverがある意味でLinuxディストリビューションの一種として動作するようになる(かもしれない⁠⁠。
  • LXDを用いて、Ubuntu on Windows 10の中にネストされたUbuntuのインスタンスや他のディストリビューションを動作させることができるようになる(かもしれない⁠⁠。
  • Snappyを利用し、snapパッケージをインストールして利用できるようになる(かもしれない⁠⁠。

Dustin Kirklandの示したスクリーンショットから、Ubuntu標準のファイルシステムとの差も確認できます。標準的なUbuntuのルートファイルシステムとの比較は次の通りです。

  • /init という謎のファイルが存在する。しかもあきらかに更新日付が最近である。
  • /acct, /cache, /dataという謎のディレクトリが存在する。

いずれも単なる作業ディレクトリや一時ファイルである可能性もありますが、特に /init と /cache は気になるところです。/cache がなんらかのバイナリトランスレートした結果を保存する場所である可能性も否定はできません(トランスレートせずにそのままサブシステムで実行できる可能性も十分にあります。残念ながら筆者はまだ実物に触る時間を作れていません⁠⁠。

ここまでの内容と重複する部分もありますが、技術的な特性や詳細は次の通りです。

  • 仮想マシンではない。動作にHyper-VやVirtual PCのたぐいは使われていない。
  • コアにあたる機能は、Windowsのサブシステムとして提供される。⁠ELFバイナリを実行できる」⁠各プロセスからはLinuxカーネルに見える」⁠内部で、LinuxシステムコールをNTカーネル、あるいはWindowsのシステムコールに変換する」機能を提供する、なんらかのWindowsサブシステム(Lxss、もしくは「Windows Subsystem for Linux⁠⁠)が提供される。
  • Ubuntuのバイナリがそのまま動作する。少なくとも実行時に指定されているのは、何の変換も行われていないUbuntuのバイナリそのもの。ただし実行時にトランスレートしていないとは誰も言っていないので、動的な変換をかけている可能性を完全に否定することはできない。あくまで「加工していないバイナリを実行できる」というもの。
  • Windows環境において、⁠サブシステムを用いて異なる環境を動作させること」そのものは特に珍しいことではない。これまでにもWOW(Windows on Windows)サブシステムによって32bitバイナリと64bitバイナリが併存する環境が日常的に利用されている。ただし、Linuxのシステムコールを収容するサブシステムについてはかなり革新的な技術が使われている可能性がある。
  • 「ユーザーランドからはLinuxカーネルに見えるサブシステム」⁠Windows Subsystem for Linux)が、既存のLinuxカーネルをベースにしているのか、あるいは異なる実装であるのかは現状では判然としない。ただし、既存のLinuxカーネルのコードを利用している場合はGPLによってソースコードが公開される用意がととのうべきであるものの、しかし現状ではソース公開の準備が進められていない。よって、独自の実装である可能性が高い。
  • LTP(Linux Test Project)ベースのテストを「かなりの部分」パスしている。
  • aptが動作し、apt経由で任意のパッケージをインストールし、実行できる。独自のリポジトリにアクセスしている可能性もゼロではないものの、⁠Ubuntuのルートファイルシステムがそのまま」動作しているのであれば、既存のリポジトリが利用されている可能性が高い。
  • 「it's not open source at this time.⁠⁠。少なくとも現時点ではソースコードは公開されない。⁠at this time」がある種のリップサービスなのか、あるいは将来的にオープンソースプロダクトとして公開される可能性があるのか不透明。

「LTPをパスしている」ということは重要なポイントです。LTPはLinuxのカーネル開発でリグレッションテストに使われるもので、過去に存在した「ユーザーランドに非互換をもたらす振る舞い」をかなりの割合で網羅しています。つまりLTPをパスしていることは、⁠ありがちな非互換パターンは踏んでいない」ということを意味します。

ただし、⁠LTPのテストを通っているからカーネルとして完全に機能する」というわけではありません。LTPをパスすることは必要条件でしかなく、⁠LTPは通っているが事実上使いものにならないカーネル」というものはありえます。とはいえ、⁠かなりの部分で互換であろう」とは言えそうです。

現時点では発表直後ということもあり、不透明な部分もありますが、⁠開かれたMicrosoft」⁠Micorosft love Linux」といった現在のMicrosoftを象徴するプロダクトが、今夏にはリリースされます。

※重要:記事の日付がイヤなものを感じさせますが、これはエイプリルフールではありません。

UWN#460

Ubuntu Weekly Newsletter 460 #460がリリースされています。

今週のセキュリティアップデート

usn-2939-1:LibTIFFのセキュリティアップデート
  • https://lists.ubuntu.com/archives/ubuntu-security-announce/2016-March/003367.html
  • Ubuntu 15.10・14.04 LTS・12.04 LTS用のアップデータがリリースされています。CVE-2015-8665, CVE-2015-8683, CVE-2015-8781, CVE-2015-8782, CVE-2015-8783, CVE-2015-8784を修正します。
  • 悪意ある加工が施されたtiffファイルを処理した場合、メモリ破壊を伴うクラッシュが生じることがありました。任意のコード実行が可能と考えられます。
  • 対処方法:通常の場合、アップデータを適用することで問題を解決できます。
usn-2941-1:Quaggaのセキュリティアップデート
  • https://lists.ubuntu.com/archives/ubuntu-security-announce/2016-March/003368.html
  • Ubuntu 15.10・14.04 LTS・12.04 LTS用のアップデータがリリースされています。CVE-2013-2236, CVE-2016-2342を修正します。
  • VPNv4が有効な状態で、特定のBGP情報が送られるとクラッシュする問題・過剰な長さのLSAでクラッシュする問題を修正します。
  • 対処方法:通常の場合、アップデータを適用することで問題を解決できます。
usn-2942-1:OpenJDK 7のセキュリティアップデート
  • https://lists.ubuntu.com/archives/ubuntu-security-announce/2016-March/003369.html
  • Ubuntu 15.10・14.04 LTS用のアップデータがリリースされています。CVE-2016-0636を修正します。
  • JDK 7u95のOpenJDK版です。
  • 対処方法:アップデータを適用の上、OpenJDKを利用しているJavaアプリケーションを再起動してください。
usn-2943-1:PCREのセキュリティアップデート

おすすめ記事

記事・ニュース一覧