今年の開発者向けカンファレンス「Build 2016」で、大きな注目を集めた「Bash on Ubuntu on Windows」。文字どおりWindows 10の上でUbuntuが動き、その上でbashが走るというのは、衝撃的な出来事である。だが、WindowsとUNIXは以前から高い親和性を持っていたのはご存じだろうか。
UNIXの世界には、異なるOS実装を共通化するためにPOSIXという規格が存在する。Windows NT 3.1は当時の米国政府が定めたルールに沿うため、POSIXサブシステムを実装していたが、互換性の問題から後にInterixサブシステムを導入した。このInterixサブシステムを補完する形で有償のパッケージ「Windows NT Services for UNIX Add-on Pack」や「Windows Services for UNIX(SFU)」がリリースされていたことを覚えている方もいるだろう。
Windows XPからはPOSIXサブシステムを削除し、Interixサブシステム1本に絞り、2004年にはSFUを無償化。その後はWindows Vistaの上位エディションやWindows 7でも、「Subsystem for UNIX-based Applications (SUA)」を用意し、プログラムと機能から有効にすることで使用できた。だが、Windows 8からはSUAは非推奨機能に分類され、MicrosoftはInterixサブシステムを必要とする場合はHyper-Vを使用し、UNIX系コマンドはCygwinやMinGWを薦めていた。
別の記事で述べたように、Windows 10 Insider Preview ビルド14316は、「Windows Subsystem for Linux(WSL)」を実装している。SUAはMicrosoftが中心となってメンテナンスしてきたサブシステムおよびコマンドだが、WSLはサブシステムをMicrosoftが、コマンド部分をCanonicalがUbuntuのイメージファイルとして提供する形で実現した機能だ。
Microsoftは専用ページを設けて、Bash on Ubuntu on Windows (以下、BUW)の概要を説明している。BUWは64ビット版Windows 10専用の機能とし、Windows Server 2016への提供は予定していない。将来的にはUbuntu以外のディストリビューションをサポートする可能性があるものの、サーバー用途やGUIアプリケーションはサポートしないと説明している。だが、フリーのWindows用Xサーバーである「Xming」をインストールしたところ、いくつかのGUIアプリケーションは正しく起動した。
BUWが今後どのように進化するかは、先に紹介した公式ページのFAQでうかがい知れる。Microsoftは「Web開発者やオープンソースに携わる開発者向け」と定義し、sedやawk、RubyにPythonといったLinuxツール群をそのまま利用できると説明し、仮想マシンよりも低リソースで利用できるとアピールした。UNIXコマンドになじみ深い方なら、Win32向けに移植したUNIXコマンド群が存在することはご承知のとおり。その点については、「クロスプラットフォームに提供するツールは、Linuxでの使用を前提としたものも少なくない。例えばRuby GemはWindows版Rubyでは正しく動作しないこともあるため、開発者は意図しないWindowsの動作に悩まされるケースが発生する」と説明した。
BUWを実際に使ってみると、bash上でfindstr.exeは起動せず、コマンドプロンプト上でgrepは実行できない。前述したサブシステム構造を念頭に置けば至極当たり前だが、長年cygwinをインストールし、UNIXコマンドをWindows上で使ってきた筆者としては違和感を覚えてしまう。もちろんBUWはベータ版であり、今回が初めてのリリースだ。不具合も多数あるかもしれない。先のFAQではMicrosoft自身が不具合を確認していると説明している。
だが、BUWがエンドユーザーではなく開発者向けでも、Windows 8.xで一度捨てられたInterixサブシステムが形を変えて復活したことは非常に喜ばしい。他方でWindows 10は数年ぶりにコマンドプロンプトの改良が加わったが、将来的にはコマンドプロンプトとPowerShell、そしてbash(もちろんzshでも構わない)が融合し、ユーザビリティ向上につながるシェルの登場に期待するのは欲張りだろうか。いずれせよ、BUWの実装でコマンドプロンプトがこちらの改善が滞ることがないことをMicrosoftには期待したい。
阿久津良和(Cactus)