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両方のプラットフォームで動くようなアプリケーションを素早く開発できるようになるかと思います。