orangeitems’s diary

クラウドで働くインフラエンジニアの日々の感想です(ほぼ毎日更新)。

WSL2正式リリース WindowsでLinuxが必要とされる複雑な背景

f:id:orangeitems:20200520101945j:plain

 

WindowsでLinuxが使える

一般の人々は全く関心がないと思いますが、Windows Subsystem for Linux 2(通称WSL2)が正式リリースされたようです。

 

www.publickey1.jp

オンラインイベント「Microsoft Build 2020」を開催中のマイクロソフトは、「Windows Subsystem for Linux 2」(WSL 2)の正式リリースを発表しました。

WSL 2は、Windows 10でLinux互換機能を提供するWSLの次期バージョンです。

現行のWSLがLinuxカーネルシステムコールをWindowsカーネルシステムコールに変換するという実装で互換機能を提供するという仕組みなのに対し、WSLではこれを刷新。Windows 10内部に用意した軽量な仮想マシン内で本物のLinuxカーネルを実行することで、より高い性能と互換性を実現しています。

 

なぜローカルでWindowsが使えているのに、Linux互換機能が必要なのか。これには複雑な理屈が絡んでいます。

 

なぜ必要なのか

パブリッククラウドでもオンプレミスでもいいのですが、とにかく我々が利用しているITは、クライアント-サーバー方式で成り立っています。

サーバーはたいていインターネットを通じてつながっていて、実態はデータセンターに置かれています。どうサーバーを調達するかはいろいろな方法がありますが、最近は物理的に機械を用意してデータセンターに置きに行き回線をつないで・・、なんてことをやらなくてもクラウドを使えばものの数分で用意できる。そんな時代です。

さて、このサーバーですがパソコンと同じようにOSがありその上でソフトウェアが動いています。このソフトウェアをプログラミングして作るのがアプリケーション開発者です。設計する人実装する人、テストする人によって品質が保たれています。OSは昔は物理サーバーにインストールする形だったのですが、最近は仮想化技術が進み、一つの物理マシンの上にいくつもOSが起動するようになりました。仮想OSと言います。また、昨今だとこのOSの上にコンテナという小さい単位を動かそうという方式が進んでいます。

このサーバーで動いているOSですが、パソコンに親しんでいるとWindowsがよく使われるのかと思いきや、Linuxが過半数を占めているのが現状です。

 

news.mynavi.jp

Microsoftで中東およびアフリカ向けのOpen Source Leadを務めるAdir Ron氏は5月11日(米国時間)、「Adir Ron posted on LinkedIn」に投稿したインフォグラフィックにおいて、Microsoft AzureにおけるVMコアの半数以上でLinuxが使われていると伝えた。投函されたインフォグラフィックは、Microsoft AzureにおいてLinuxが重要なポジションにあることを示している。

 

Microsoftのパブリッククラウドですらそうなのですから、他のクラウドも推し量れるというものです。

なぜ、Linuxはこんなにも強いのか。

1つ目には、ベンダーのサポートが不要であれば、OSに費用を支払う必要がないからです。Linuxのシェアを見ると一目瞭然です。

 

news.mynavi.jp

Q-Successから2020年4月のWebサイト向けLinuxディストリビューションシェアが発表された。2020年4月はUbuntuがシェアを増やし、DebianとCentOSがシェアを減らした。

 

UbuntuにしろDebianにしろ、日本で人気の高いCentOSにしろ、オープンソースであり利用には費用がかかりません。オープンソースをメンテナンスする団体がもうアップデートしないと宣言するまでは、脆弱性の対応等も行ってくれるので、これは良いと使っているケースは多いです。これが、有償のWindows ServerはRed Hat Enterprize Linuxを使うとなると、かなりの費用がかかってきます。構築するシステムにおいて、全てのソフトウェアが法人サポート必須である場合はここでお金を支払います。一方で、あまりお金をかけられない場合、例えばシステム予算が限られる場合はここで節約します。

ちゃんと誰も言わないのですが、インターネットにこれだけサービスが溢れ便利になった理由は、このOSがオープンソースで無料、かつ品質が高い、という状態が作られたからだと思っています。もし有償のOSしかなかったら、アプリケーション開発以前に、サーバーを立てる時点でキャッシュが足りないということになったでしょう。

さて、このLinuxですが、サーバー側で使うことについてはかなりの歴史を持つために、サーバーとして利用するミドルウェアが充実しています。Webサーバーやデータベース、その周辺のサービスは、基本的にLinux版が充実しています。Windows版も同時に作られることは多いですが、Linuxでサーバー構築する事例は多くインターネット上にも記事がたくさんあります。

サーバーがLinux、その上にアプリケーションを開発する。このときに困るのが、開発用のマシンがWindowsであることが多いことです。開発環境をWindowsで構築し、プログラミングしビルドし、動かすときは開発用のLinuxサーバーに転送。こんなパターンが多かったのですが、いちいちLinux環境に転送しなければいけないのは面倒だし、開発環境のリソースも限られるので、できればローカル(自分のPC)の上で開発しているものを動かしたいと考えるのは普通です。

そこで、開発者は自分のパソコンでLinuxを動かす方法を考え始めます。当初は仮想OSを自分のパソコンの上で動かすパターンです。違うOSをWindows上で動かします。Hyper-VやVirtualBoxなどが有名ですが、これは技術的にはそんなに難しいことではなくなりました。ただし、CPUやメモリーが必要です。もともとWindowsが動いているのに新たに違うOSを動かすのですから、単純に考えてCPUやメモリー、ハードディスクがもう1台分かかると思って差し支えありません。無駄は多いです。これに耐えられるスペックのパソコンばかりじゃない、ということで、動かしてみたらCPUやメモリー不足に悩むという経験をした人は多いでしょう。

次に、Dockerなどのコンテナ技術を使おうかという話になります。DockerはOS部分のリソースが要らない軽量な設計・・、しかしここでも解決しません。WindowsのDockerはあくまでもWindowsのコンテナしか動きません。もしLinuxのコンテナを動かしたい場合は、これまではDockerがHyper-Vに仮想OSを裏で起動しその上でLinuxのコンテナを動かしていました。しかしこれでは、自力でLinuxの仮想OSを立てるのとあまり変わりません。理想と現実、と言ったところです。

さて、ここまでが「これまで」でした。WSL2がリリースされたら、なんとWindows上でLinuxカーネルがそのまま動きます。Windowsの中にLinuxも動いているということになります。

 

forest.watch.impress.co.jp

「WSL 2」はLinux仮想マシンでLinuxバイナリを実行するため、原理上は100%の互換性がある。「WSL 1」のシステムコール変換では対応の難しかった「FUSE」や「Docker」なども利用可能になる。

 とくに「Docker」のサポートには注目だ。「Visual Studio Code」の「Docker」拡張機能、「Remote Development」拡張機能、「WSL 2」対応の「Docker Desktop」アプリなどを組み合わせれば、Windows 10でLinuxコンテナーを利用したリモート開発がシームレスに行える。「WSL 2」は「Windows 10 Home」でも利用できるため、わざわざ「Windows 10 Pro」を用意する必要もない。

 

今後は、Hyper-Vの仮想マシンが不要で、そのままLinuxコンテナがWindows上で動かせるようになります。開発環境はLinuxコンテナ化しローカルのパソコンの上で軽量に動かせることになります。わざわざ、パブリッククラウドなどの開発環境にプログラムを転送しなくても、ローカルで手軽に単体試験ができるということになります。ある程度品質を確認したら、ソースコードをアップし、複数の開発者が構築したコードをマージ。それで作った統合テスト用コンテナを再度ローカルにダウンロードし、各々のマシンで再度テストなんてこともできるようになるわけですね。

 

このLinuxとWindowsの間の分断はいろいろなドラマがあって、いやいやブラウザでサーバー側でコードも書き、テストもサーバー側でやろう、なんて方式もあります。でもサーバー側で全部やろうとするとローカルのリソースを使えないのもあって、お金がかかりがちです。

今回はローカルで全部やろうとしたときのドラマです。

Windowsであっても、ほとんどLinuxでできることはカバーされているのはわかりますが、Linuxの方が環境構築がラクなんですね。だから、Windowsの中にLinuxカーネルが動くと言うのは実はたくさんの同業者が待ち望んでいたことなんだと思っています。

 

WSL2を注目すべき理由

WSL2を注目すべき理由。それは、サーバーでのアプリケーション開発におけるデファクトスタンダードが変わるから、です。

これまで、結構「いびつ」な環境で開発者は仕事を強いられてきたように思います。会社が変われば環境もまた独特。本来はどの企業にいても同じ開発環境、であればもっと生産性は上がるはずです。

アフターWSL2で、かなり決定版のようなワークフローが出てくるのではないかと期待しています。ローカルでLinuxコンテナが使えるのであれば、様々な構築済みコンテナをpullして使えますからね。

静かに革命は進んでいる、と言ったところでしょうか。

ちなみに、合わせてWindows Terminalもリリースされました。

 

forest.watch.impress.co.jp

 

こちらも併せて注目です。Tera Termからついに乗り換えようかな(わからないけど)。