Ubuntu on Windows
「Ubuntu on Windows」は、UbuntuのユーザースペースをWindows上で動作させる仕組みです。ユーザースペースとは、一般的にカーネルを除いたソフトウェア群を指し、カーネルの上で動作するソフトウェア群を指します。
「Ubuntu on Windows」は、LinuxカーネルをWindowsのカーネルに置き換えたものである、とイメージすれば分かりやすいかと思います。
早い話、Ubuntuのアプリ(現状はコマンド)がWindows上で動作する、ということです。
現状「Ubuntu on Windows」は完成しておらず、Ubuntuのユーザースペースがすべて動作する状態ではありませんが、今後どの程度の規模でUbuntuのユーザースペースが動作するようになるのか楽しみですね。
ただGUIアプリに関しては、GIMPやLibreOfficeなど有名なソフトウェアがクロスプラットフォームで提供されており、また、WindowsにはGUIアプリが豊富なため、必要性の観点からGUIアプリが「Ubuntu on Windows」で利用できるようになるかどうかは懐疑的です。
わざわざ「Ubuntu on Windows」上でFirefoxやLibreOfficeを使いたいと思うユーザーはいないでしょう。
また少なくとも現状では、「Ubuntu Desktop」ではなく「Ubuntu Server」のユーザースペースが「Ubuntu on Windows」の主なターゲットになっているイメージです。
ただし「Ubuntu on Windows」は、ウェブサーバーなどサーバとして利用するためのプラットフォームではありません。
あくまで現状はUbuntuのコマンドツール群を利用するためのプラットフォームです。
「Canonical」の「Ubuntu Product and Strategy team」に所属している「Dustin Kirkland」氏が、「Ubuntu on Windows」の説明を行っています。
- Ubuntu on Windows – The Ubuntu Userspace for Windows Developers
- Still have questions about Bash and Ubuntu on Windows?
私は16年近くWindowsを使ってこなかった。
しかし数カ月前、その状況は変った。
私はMicrosoftとCanonicalの間で行われた極秘プロジェクトに参加したのだ。
その極秘プロジェクトが本日、Kevin Galloの基調講演を通じて明らかになった。
その極秘プロジェクトとは、
「UbuntuのユーザースペースとBashを、Windows 10のcmd.exe内でそのまま動作させる!」ということである。
ちょっと何言ってるか分からないよね。
でも心配はいらないよ。
私が初めてそのクレイジーな話を聞いたのは数カ月前のことだったんだけど、私も話の内容を完全に理解するまで時間が必要だったよ。
さてどういうことかゆっくり説明しよう。
- Windows 10を起動する
- スタートメニューを開く
- 「bash」と入力する
- cmd.exeが起動する
- Ubuntuの/bin/bashが起動する
- Ubuntuのユーザースペースすべてにアクセスできる
- もちろん、様々なUbuntuのコマンド(※1)も利用できる
- Ubuntuのアーカイブで利用できる数万のバイナリーパッケージの多くが利用できる
※1 コマンドの一例
下記以外にも様々なコマンドが利用できる。
apt ssh rsync find grep awk sed sort xargs md5sum gpg curl wget apache mysql python perl ruby php gcc tar vim emacs diff patch
「仮想マシンでUbuntuを動かしてるってこと?」
違うよ!仮想マシンは全く関与していない。
Linux Kernelは存在していないんだ。
動作しているのは、Ubuntuのユーザースペースそのものだよ。
「あぁ分かった、コンテナーで動作しているUbuntuだろ?」
違うよ!コンテナーじゃない。
Ubuntuのバイナリーが、そのままWindows上で直接動作しているんだよ。
「うーん、ということはcygwinみたいなもの?」
違うよ!
オープンソースのユーティリティーを含むCygwinは、Windows上で直接動作させるために、ソースからコンパイルし直しているよ。
でも「Ubuntu on Windows」では、UbuntuのEFLバイナリーが何も手を加えずにそのままWindowsで動くんだよ。
バイナリーのビットもチェックサムも同じだよ。
「Linuxエミュレータみたいなもん?」
いい線いってるね!
Microsoftのsharp developersチームは、LinuxのsyscallをWindows OSが提供するsyscallへリアルタイムに変換できないか検討した。
彼らはMicrosoftの研究技術がそれらに適合するよう、日々大変な作業をしている。
Linuxに詳しい人達からすれば、Ubuntuのバイナリーが直接Windows上で動くのだから「Wine」を逆にしたものだと想像するだろう。
Microsoftはこのシステムを「Windows Subsystem for Linux」と呼んでいる。
(まだこの時点でオープンソースではない)
「おぉ、素晴らしい!」
sysbenchでベンチマークを取ると、Ubuntuを実機で動作させた時に近いパフォーマンスが出るよ。
さて、Windows Storeにアップロードするため、Ubuntuのrootファイルシステムをラップし、Windows application package (.appx)ファイルの中へ突っ込む必要があった。
サンプルアプリのコピーやXMLファイルの編集、様々なサイズのPNG画像ファイルの作成など、パッケージの作成に必要な作業はMicrosoft Visual Studioを使う必要があったんだ。
・・・私はWindowsの開発者じゃない。
WindowsのデスクトップでVisual Studioと数時間格闘したよ。
コーヒーのマグカップをモニターにぶつけて粉砕しそうになるぐらいにね。
代わりにWindowsキーを押して「bash」と打ち込みエンターキーを押した。
するとサンプルアプリが「/mnt/c/Users/Kirkland/Downloads」に見つかった。
それを「cp -a」でコピーし、「find | xargs | rename」を使用してファイル名を一斉に変更した。
そして「grep | xargs | sed」を使用して文字列の検索と置き換え(s/SampleApp/UbuntuOnWindows/)を行った。
さらにUbuntuのconvertを利用してアイコンをリサイズした。
その後Visual Studioでパッケージのコンパイルを行い、Windows Storeへアップロードを行った。
「終わったぜ!」
BashからWindowsのドライブを見ると、C:ドライブといったWindowsのドライブは、読み書き可で「/mnt」以下にマウントされる。
一方UbuntuのファイルシステムをWindowsから見ると、「C:\Users\Kirkland\AppData\Local\Lxss\rootfs\」に配置される。
他のUbuntu PCで行った作業内容をSSHで接続して取得する必要があったんだ。
でもPuttyは必要ないよ。
「Ubuntu on Windows」上のBashから直接sshで接続できる。
もちろん、「apt install」も「apt upgrade」も期待通り動作する。
すべてのソフトウェアが期待通り動作するかだって?
残念ながらすべてのソフトウェアは動作しない。まだ動作しないんだ。
LTP(Linux Test Project)の大部分は通ったし動作した。
しかしまだ不完全な部分があるんだ。
特にttyのvt100周りが不完全だ。
私が愛用するbyobuやscreenそしてtmuxはまだ動作しない。
でもそのうち動作するかも!
現在「Ubuntu on Windows」で使用しているUbuntuのイメージは、Ubuntu 14.04 LTSだ。
でも早いうちにUbuntu 14.04 LTSがUbuntu 16.04 LTSに置き換わり、Windows Storeから利用できるようになる。
「Ubuntu on Windows」はWindows 10の世界とフリー&オープソース技術の世界を結ぶ架け橋となる非常に素晴らしい機会である。
Ubuntuが仮想化のようなリソースの消費無しにWindows上で動作するのだ。
Linux Command Line on Windows
「Ubuntu on Windows」の質問に答えるセッションの映像です。Running Bash on Ubuntu on Windows!
「Ubuntu on Windows」の動作デモの映像です。なぜMicrosoftはUbuntu on Windowsを導入したのか
上記はUbuntu側からの内容でしたが、今度はMicrosoft側からこの件を見てみます。端的に言うと、CUI環境の改善です。
多くのユーザーから、Windowsではオープンソースのツール群の使い勝手が悪く、Windowsがもっと簡単にそれらのツールが利用できる環境になって欲しいという要望が上がっていた。
その要望に応えるため、まずcmdやPowerShellなど多くのコマンドラインツールや開発環境の改善を行うことにした。
次に、Bashを追加し、Linuxのコマンドラインツール群をWindowsから直接起動できるようにすることで、我々のコマンドラインファミリーを拡充することを決定した。
この目的の達成のため、新しい基盤をWindowsに導入した。
それがWindows Subsystem for Linux (WSL)である。
Canonicalによって提供されるUbuntuのユーザーモードのイメージは、WSL上で動作する。
この結果、WindowsでUbuntuのBashがそのまま起動するようになる!
Bashスクリプトを走らせることもできるし、Linuxのコマンドラインツール群もWindowsから直接起動できるようになる。
Ruby、Git、Python・・・様々なツールが利用できる。
BashからWindowsのファイルシステムにアクセスできるし、あるファイルをWindowsのツールからでもLinuxのツールからでもお好みの方法で処理することができる。
WSLはBuild conferenceの後、Windows 10 Insidersから利用できるようになる。
だがその前にいくつかのことをハッキリさせておきたい。
まず初めに、WSLは今回が初めてのリリースだ。
だからWSLはまだβ(ベータ)リリースだ。
まだ機能や品質に不十分な点もあればバグがあることも分かっている。
すべてのBashスクリプトやLinuxのツールが完璧に動作すると期待しないで欲しい。
次に、WindowsでBashやLinuxのツールが操作するようになるとは言え、これらは開発者がコードを書いたりビルドするためのツールセットであることに留意して欲しい。
これはウェブサーバーを動作させたり、サーバーを動作させるためのプラットフォームではない。
最後に、BashやLinuxのツールは、Windowsのアプリやツールと連携して動作することはできない。逆もまた然りである。
従ってBashからメモ帳を起動できないし、PowerShellからBashでRubyを起動することもできない。