Microsoftは2016年4月にWindowsでLinuxバイナリを実行するための機能である「WSL (Windows Subsystem for Linux)」を、開発版である「Windows 10 Insider Preview」に導入した。それから1年半ほど経った2017年10月には、WSLは正式な機能としてWindows 10およびWindows Serverに導入されている。

現在、Microsoft StoreにはUbuntu、openSUSE、SUSE Linux Enterprise Server、Kali Linux、Debian GNU/Linux、Arch Linuxなどが登録されている。Microsoft Storeから該当ディストリビューションをインストールすればすぐに使い始めることができる。この2年間で、WindowsにおけるLinuxの利用は劇的に簡単になった。

この変化はとても重要だ。Net Applicationsの報告によれば、2019年8月におけるWindowsのシェアは87.89%。デスクトップ向けのOSとして圧倒的なシェアを確保している。バージョン別に見るとWindows 10のシェアは50.99%に達しており、世界中のパソコンの2台に1台はWindows 10が動作している計算だ。Windows 10でLinuxが利用できるということは、潜在的にこうした巨大なパイがそのままLinuxのプラットフォームになる可能性を持っていることでもある。

2019年8月におけるデスクトップ向けOSバージョン別シェア - 資料: Net Applications提供

もちろん、仮想化アプリケーションを使えばWSLを使わなくてもLinuxを利用することはできる。VirtualBoxといった無償の仮想化アプリケーションもあり、手間を惜しまなければこれまでもWindowsでLinuxを実行することはできた。しかし、Microsoft StoreからインストールできるLinuxはセットアップの手間が段違いに簡単で、Windowsプラットフォームとの統合も進んでいる。いったんこの環境に慣れてしまうと、最初からインストールを行うのが面倒になってくるほどだ。

WindowsでLinuxを利用するための環境は、この3年間で急速に進化した。最近では、WSLを使ってLinuxアプリケーションを開発するというのがトレンドになりつつある。この辺りの流れは動きが早く、少し目を離すと状況がわからなくなってしまう。そこで、今回からは数回に渡り、WindowsでLinuxを利用するための環境について現状をまとめておきたい。

Windows Terminalの登場

WindowsでLinuxを利用するケースとなると、やはりターミナルアプリケーションを使うことが多い。WSLの場合は直接ターミナルアプリケーションを使うことになるが、これまではssh経由でLinuxサーバにログインしてLinuxを利用することが多かった。こういった場合に必須になるのがターミナルアプリケーションだが、Windowsにはこうした場合に満足に利用できるターミナルアプリケーションが存在していなかった。

Windowsには、コマンドプロンプトやPowerShellウインドウといったアプリケーションが存在している。Windowsはこうしたアプリケーションを実現するためのAPIを提供しており、このAPIを使って開発されたアプリケーションが「Windows Console」という枠で呼ばれている。

このWindows Consoleだが、歴史的にWindowsでの互換性やほかのAPIとの連携の観点から実装されており、UNIX系OSで使われているターミナルとは提供している機能や概念に開きがある。当初、UNIX系のコマンドはWindows Consoleでは満足に動作できないものがあった。

MicrosoftはWSLの提供を開始した頃から、Windows Consoleの機能強化に乗り出した。UNIX系コマンドが利用するエスケープシーケンスに対応するなどして、Windows ConsoleにおいてもUNIX系コマンドが問題なく動作するように開発に取り組んだわけだ。Windowsアプリケーションとしての互換性を確保しつつ、UNIXコマンドの要求する機能にも対応する。なかなか大変な取り組みだが、Microsoftはしばらくうまく開発を進めていたように思う。

しかし、Microsoftは大きく方針を転換する。既存のWindows Consoleの改修を進めるのではなく、新しく専用のターミナルアプリケーション「Windows Terminal」を開発することにしたのだ。現在、プレビュー版がMicrosoft Storeに登録されており、簡単に導入することができるようになっている。

Microsoft Storeに登録されているプレビュー版のWindows Terminal

Windows TerminalからWSLで動作しているLinuxのコマンドを実行したサンプル

Windows Terminalは、MITライセンスの下でオープンソースソフトウエア(OSS)として開発が進められている。Microsoftはコア技術やアプリケーションのいくつかをOSSとして開発しており、Windows Terminalもそのスタイルに従っている。

MicrosoftがWindows TerminalをOSSとして提供することと、Microsoft Store経由で提供することにはいくつかの利点がある。まず、ユーザーや開発者からのフィードバックが得やすく、改善速度を上げやすい。また、Windows 10に同梱するやり方よりも早い周期でアップデートバージョンをユーザーに届けることができる。アクティブな開発段階にあるアプリケーションとしては、Windows 10にバンドルするよりもこうやって個別のアプリケーションとして提供したほうが都合が良いのである。

Windows TerminalはLinuxデスクトップやmacOSで使われている既存のターミナルアプリケーションと比較すると、機能は少ないし、UI/UXも荒削りに見える。しかし、「Microsoftが開発している」という点が重要だ。これは、AppleがmacOSに同梱しているターミナルのように、今後Windowsにおけるデフォルトのターミナルアプリケーションという扱いになっていく可能性が高いことを意味する。デフォルトでUNIX系のコマンドがまともに動作するアプリケーションが提供されるというのは、Linuxを利用する上で重要なことだ。Windowsアプリケーションとしては珍しくデフォルトでタブインタフェースも提供しているし、最近はやりのJSONベースの設定機能も提供されている。今後どこまで開発が進められるのか現段階では不透明だが、それなりに動作する状態までは仕上がるのではないかと思う。

Windows Terminalの提供スタイルがどうなっていくかはわからない。デフォルトでインストールされつつ、個別にアップデートが提供されるスタイルに落ち着くかもしれないし、開発者や運用者向けの機能ということでデフォルトインストールにはならないかもしれない。しかし、Microsoft公式のアプリケーションとしてこうした取り組みが進められていること自体が、WindowsとLinuxを取り巻く状況が変わってきていることを示している。

Linuxの取り込みを進めるMicrosoft

エッジサーバにおけるLinuxのシェアは圧倒的なものがある。デスクトップにおけるシェアがWindowsが圧倒的なことに対し、サーバにおいてはLinuxが”覇者”というのが現状だ。さらに最近ではクラウドサービスにおいて使われる基本的なプラットフォームとしてLinuxがデファクトスタンダードになりつつある。サーバという領域に手を出そうとしたら、Linuxとの争いは避けて通ることができない。

こうした状況に対するMicrosoftの対応はよくできている。WSLの導入でWindows 10とWindows Serverは「Linuxが動作するプラットフォーム」という位置づけを得た。現在開発段階にある次世代のWSL2ではさらに状況が変化し、WindowsをLinuxのハイパーバイザとして使えるようになる。

こうした状況に合わせて開発環境にも変化が出てきている。Linuxアプリケーション開発をWSLを使って行おうというものだ。この機能を利用すると、Windows 10を使いつつネイティブなLinux環境内でアプリケーションの開発を行うことができる。この状況は、WSL2が公開されるとさらに改善が進むと言われている。

Microsoftがデスクトップにおいて圧倒的なシェアを持っていることは間違いなく、このMicrosoftがLinuxの取り込みを進めているというのは注目に値する。MicrosoftはこれまでUNIX系コマンドやAPIへの対応サービスを出しているものの、ここまで本格的に進めたことはなかったように思う。この流れは、しばらく注目しておく価値がある。