Windows 10のBash on Ubuntu on Windowsを触ってみる

Windows10で2016年4月に「Ubuntu LinuxがそのままWindows 10の上で動く」という話が出てきました。公式な情報はMSDNのこちらのサイトからたどることが可能です。今回はこのBash on Ubuntu on Windowsをとりあえず触ってみることにしました。

1. Windows 10 Insider Previewの入手

Bash on Ubuntu on WindowsはWindows10 Insider Previewの中の、Fast Ringに含まれています。そのため、まずはこちらのサイトからInsider Programにサインアップし、テストにつかうWindowsを開発者モードにする必要があります。詳細な手順はInsider Programのサイトからドキュメントをたどってみてください。設定を完了すると、次の図のように開発者向けモードになり、かつWindows Insider Programで「ファースト」となります。

2. Bash on Ubuntu on Windowsの有効化

Bash on Ubuntu on Windowsの正式名称は「Windows Subsystem for Linux」といいます。そして有効化するためには「コントロールパネル」>「プログラムと機能」>「Windowsの機能の有効化または無効化」の順にクリックしていきます。そして、以下の図のようにWindows Subsystem for Linux (Beta)にチェックをつけ、指示に従ってOS再起動を行います。

再起動が完了すると、Bashが使えるようになっています。

3. Bashを使ってみる

Bashを使い始めるためには、コマンドプロンプトを立ち上げて、「bash」コマンドを実行します。すると、以下のようにubuntuのようなプロンプトに変わります。

このBashはubuntu 14.04上で動いています。そして、ubuntuのバイナリが「そのまま」このWindows上で動くという点で、従来の仮想化やエミュレーションとは大きく異なるアーキテクチャとなっています。試しにいくつかコマンドを実行してみます。

root@MYCOMPUTER:~# uname -a
Linux MYCOMPUTER 3.4.0+ #1 PREEMPT Thu Aug 1 17:06:05 CST 2013 x86_64 x86_64 x86_64 GNU/Linux
root@MYCOMPUTER:~# cat /etc/issue
Ubuntu 14.04.4 LTS \n \l

次に、メモリやプロセスがどう見えるか確認します。今回の検証機(私のノートPC)は物理メモリを64GB搭載していますが、使用量がそのまま見えます。また消費メモリはWindowsのプロセスで消費されたメモリも合計された量が表示されます。逆に、プロセスについてはLinuxのユーザープロセスのみが見えます。

root@MYCOMPUTER:~# free -m
             total       used       free     shared    buffers     cached
Mem:         65356      11545      53810         17         33        184
-/+ buffers/cache:      11328      54028
Swap:            0 18014398505299712    4182271
root@MYCOMPUTER:~# ps auxwww
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0      0     0 ?        Ss    2431   0:00 /init
root         2  0.0  0.0      0     0 ?        Ss    2431   0:02 /bin/bash
root      1514  0.0  0.0      0     0 ?        R     2431   0:00 ps auxwww

さらにubuntuのバイナリを直接使っていることを見るため、apt-getコマンドを使ってみます。

# apt-get update
Ign http://archive.ubuntu.com trusty InRelease
Get:1 http://security.ubuntu.com trusty-security InRelease [65.9 kB]
Get:2 http://security.ubuntu.com trusty-security/main amd64 Packages [493 kB]
Get:3 http://archive.ubuntu.com trusty-updates InRelease [65.9 kB]
Hit http://archive.ubuntu.com trusty Release.gpg
Get:4 http://archive.ubuntu.com trusty-updates/main amd64 Packages [781 kB]
Get:5 http://security.ubuntu.com trusty-security/restricted amd64 Packages [13.0 kB]
Get:6 http://security.ubuntu.com trusty-security/universe amd64 Packages [130 kB]
Get:7 http://security.ubuntu.com trusty-security/multiverse amd64 Packages [4,989 B]
Get:8 http://security.ubuntu.com trusty-security/main Translation-en [271 kB]
Get:9 http://archive.ubuntu.com trusty-updates/restricted amd64 Packages [15.9 kB]
Get:10 http://archive.ubuntu.com trusty-updates/universe amd64 Packages [362 kB]
Get:11 http://security.ubuntu.com trusty-security/multiverse Translation-en [2,570 B]
Get:12 http://security.ubuntu.com trusty-security/restricted Translation-en [3,206 B]
Get:13 http://security.ubuntu.com trusty-security/universe Translation-en [76.6 kB]
Get:14 http://archive.ubuntu.com trusty-updates/multiverse amd64 Packages [13.2 kB]
Get:15 http://archive.ubuntu.com trusty-updates/main Translation-en [391 kB]
Get:16 http://archive.ubuntu.com trusty-updates/multiverse Translation-en [7,227 B]
Get:17 http://archive.ubuntu.com trusty-updates/restricted Translation-en [3,699 B]
Get:18 http://archive.ubuntu.com trusty-updates/universe Translation-en [189 kB]
Hit http://archive.ubuntu.com trusty Release
Hit http://archive.ubuntu.com trusty/main amd64 Packages
Hit http://archive.ubuntu.com trusty/restricted amd64 Packages
Hit http://archive.ubuntu.com trusty/universe amd64 Packages
Hit http://archive.ubuntu.com trusty/multiverse amd64 Packages
Hit http://archive.ubuntu.com trusty/main Translation-en
Hit http://archive.ubuntu.com trusty/multiverse Translation-en
Hit http://archive.ubuntu.com trusty/restricted Translation-en
Hit http://archive.ubuntu.com trusty/universe Translation-en
Ign http://archive.ubuntu.com trusty/main Translation-en_US
Ign http://archive.ubuntu.com trusty/multiverse Translation-en_US
Ign http://archive.ubuntu.com trusty/restricted Translation-en_US
Ign http://archive.ubuntu.com trusty/universe Translation-en_US
Fetched 2,890 kB in 17s (167 kB/s)
Reading package lists... Done

ubuntuのリポジトリからUpdate情報を取得していることがわかります。

このようにubuntuを直接動かせるようになったことで、Linuxベースや、Windows/Linux両方のプラットフォームで動くようなアプリケーションを素早く開発できるようになるかと思います。