“Running Bash on Ubuntu on Windows”, Windows Subsystem for Linux
歴史が変わる瞬間がやってきました。Microsoftの開発者向けカンファレンス、
「Windows上でUbuntuが動く」
すなわちLinuxの実行ファイルが、
Windows 10のスタートメニューで
この機能は、
基本的な詳細は、
関連する情報のうち、
- 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 Serverの一機能として、
Linuxベースのソフトウェア環境に依存するデーモンを走らせることができるようになる (かもしれない)。 - Windows Server上で動作するDockerで、
Linuxバイナリを動作させることができる。すなわち、 Windows Serverがある意味でLinuxディストリビューションの一種として動作するようになる (かもしれない)。 - LXDを用いて、
Ubuntu on Windows 10の中にネストされたUbuntuのインスタンスや他のディストリビューションを動作させることができるようになる (かもしれない)。 - Snappyを利用し、
snapパッケージをインストールして利用できるようになる (かもしれない)。
Dustin Kirklandの示したスクリーンショットから、
- /init という謎のファイルが存在する。しかもあきらかに更新日付が最近である。
- /acct, /cache, /dataという謎のディレクトリが存在する。
いずれも単なる作業ディレクトリや一時ファイルである可能性もありますが、
ここまでの内容と重複する部分もありますが、
- 仮想マシンではない。動作に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をパスしている」
ただし、
現時点では発表直後ということもあり、
※重要:記事の日付がイヤなものを感じさせますが、
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ファイルを処理した場合、
メモリ破壊を伴うクラッシュが生じることがありました。任意のコード実行が可能と考えられます。 - 対処方法:通常の場合、
アップデータを適用することで問題を解決できます。
- https://
- 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でクラッシュする問題を修正します。 - 対処方法:通常の場合、
アップデータを適用することで問題を解決できます。
- https://
- 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アプリケーションを再起動してください。
- https://
- usn-2943-1:PCREのセキュリティアップデート
- https://
lists. ubuntu. com/ archives/ ubuntu-security-announce/ 2016-March/ 003370. html - Ubuntu 15.
10・ 14. 04 LTS・ 12. 04 LTS用のアップデータがリリースされています。CVE-2014-9769, CVE-2015-2325, CVE-2015-2326, CVE-2015-2327, CVE-2015-2328, CVE-2015-3210, CVE-2015-5073, CVE-2015-8380, CVE-2015-8381, CVE-2015-8382, CVE-2015-8383, CVE-2015-8384, CVE-2015-8385, CVE-2015-8386, CVE-2015-8387, CVE-2015-8388, CVE-2015-8389, CVE-2015-8390, CVE-2015-8391, CVE-2015-8392, CVE-2015-8393, CVE-2015-8394, CVE-2015-8395, CVE-2016-1283, CVE-2016-3191を修正します。 - 特定の入力を処理した場合、
メモリ破壊を伴うクラッシュが生じることがありました。任意のコード実行が行える可能性があります。 - 対処方法:アップデータを適用の上、
PCREを利用しているアプリケーション (Apache・ Nginx等) を再起動してください。
- https://