WSL2(Windows Subsystem for Linux 2)で、Windowsに完全なLinux環境が訪れる?って期待していいのかしら...

f:id:ts0818:20191110115343j:plain

Microsoftの前CEOであるスティーブ・バルマー氏は、2001年に「Linuxはガンだ」と、オープンソースのOSであるLinuxを酷評しました。

しかし、2014年に新CEOに就任したサティア・ナデラ氏率いるMicrosoftの方針はそれとは大きく異なり、Microsoftが運営するWindows Server Blogでは「Microsoft Loves Linux(マイクロソフトLinux が大好きだ)」という連載を通して何度もLinuxの必要性を訴えるほど両者は歩み寄っています。

そしてついに、MicrosoftLinuxの普及をサポートする非営利団体の「Linux Foundation」に加盟することを発表しました。

前CEOのバルマー氏が「Linuxはガン」とまで発言したMicrosoftがLinux Foundationのメンバーに - GIGAZINE

⇧  Microsoftさん、もう信用を取り戻せないでしょ...でも、芸能界が何でも許されるのと同じく、大企業だから、許されるのかな...

はい、社会の歪みを日々痛感してます、どうもボクです。 

 

ところで、Googleさんが、 

www.itmedia.co.jp

www.itmedia.co.jp

⇧  オフラインマップを導入したようです。事前に地図データをダウンロードしておけば、ネットに繋がって無くても「Googleマップ」の機能が利用できるようです。

でも、その前に、

www.itmedia.co.jp

⇧  こっちのほう、対応が済んでるんですかね?

 

そんなGoogleさんが公開してくれているオープンソースな「コンテナオーケストレーション」で有名な、K8sこと、Kubernetes ですが、

www.orangeitems.com

はてなのMackerelチームはKubernetesクラスタを自前で構築して運用していたが、撤退を選択したという。なぜ、Kubernetesの運用を諦めて撤退を選んだのか。はてなのMackerelチームでSREを務める今井隼人氏が語った。

Kubernetesの自前運用はやっぱりツライらしい - orangeitems’s diary

はてなの開発チームも撤退するほどだとか...

本職のインフラエンジニア様でも、扱いづらさを感じていたそうです。

そりゃ、インフラ素人の拙僧には荷が重いわけだ...というか、クラウド構築でさえ至難とされてるのに、オンプレミスな環境では絶望的ですかね、どうりで情報が少ないわけだ。

codezine.jp

⇧  そんな中で、実際に、Kubernetesも使い、マイクロサービスアーキテクチャを実現してる「株式会社ドリーム・アーツ」の CTO 石田健亮さん、偉大な人でした~。

「株式会社ドリーム・アーツ」主催の無料セミナーに参加して、その存在を知りましたけど~。

まぁ、そんなこんなで、絶望を感じたところで、今回は、WSL2(Windows Subsytem for Linux 2)について調査です。レッツトライ~。

 

Unix互換性に難ありのMicrosoft

そもそも、Windowsが絶望的なほど、Linux環境を実現するのに向いていないってのは、Microsoft があんまり乗り気じゃなかったらしいと。

どういうことかというと、Windowsの歴史を追ってみましょう。

Wikipediaさんによりますと、

Windows NT系(ウィンドウズ エヌティけい)はマイクロソフトが開発したWindows NTアーキテクチャに基づいて製作されたOSの総称。遅くとも Windows 98/98SE/me のサポートが終了した2006年以降から2018年現在に至る Windows の主流系統となっている。MS-DOSを基に拡張・発展してきたWindows 9x系とは全く異なった構造をしており、9x系とは分けて考えるときに、NT系と定義する。

Windows NT系 - Wikipedia

⇧  となっており、Windowsは大きく分けると、 

って系統に分かれるらしく、現在主流となってきたWindows 10とかは、Windows NT系であると。

そんで、

Windows NT系の製品の特徴として、大きく分けてクライアント向けの製品とサーバ向けの製品の2種類存在する。

Windows NTには同バージョン製品でクライアント向けの「Workstation」とサーバ向けの「Server」の2種類がラインナップされている。ただし、Windows NT 3.1だけはクライアント兼サーバーの「Windows NT 3.1」と、ドメインコントローラ専用のWindows NT Advanced Server 3.1のラインナップだった。

Windows NT系 - Wikipedia

⇧  このへんからSKU(製品エディション)を細かく分け始めたらしい。

Windows 2000以降はクライアント向けを「Workstation」から「Professional」に呼称変更し、Windows XPにおいてもその路線を継承した。また、Windows XPにおいては家庭などでの使用を前提に9x系を統合した「Home Edition」を新たにラインナップに追加した。

Windows NT系 - Wikipedia

⇧  はい、Web系と特に相性の悪い「Home Edlition」の爆誕

歴史を振り返ると、

マイクロソフトMS-DOSの後継OSとしてOS/2IBMと共同開発しており、1980年代末にはOS/2 3.0の開発を主に担当していたが、契約関係・開発の進め方等においてIBM側としばしば対立、プロジェクトの進捗が大きく停滞する状況となっていた。

Windows NT系 - Wikipedia

⇧  ってなっていて、IBMとの共同開発が上手くいかず、

そこでビル・ゲイツは事態の打開策としてプロジェクトマネージャーを社外に探し、当時DEC に在籍していたデヴィッド・カトラーを抜擢した。

Windows NT系 - Wikipedia

⇧  外部からヘッドハンティングし、

OS/2次期バージョンの開発が遅延する中で、マイクロソフトはストップギャップとして80386搭載マシンを主なターゲットとして開発していたWindows 3.01990年に発売する。このWindows 3.0が大ヒットしたことでゲイツは方針を転換し、後継OSをOS/2ではなく自社オリジナルのWindowsにすることを決意する。

Windows NT系 - Wikipedia

⇧  OSとしてのWindowsの構想が生まれたんですが、 

だが、初期のWindowsは見た目はGUIではあったが内部的には16ビットコードで書かれたMS-DOSを土台としたアプリケーションランチャーの域を出るものではなく、また当時未だサポートされていた(そしてPC/ATの搭載CPUであったが故にPC市場の主流でもあった)Intel 80286の機能的な制約に由来する貧弱なメモリ管理機能、マルチタスクの不完全さ、ネットワーク機能の欠落など課題が山積していた。

Windows NT系 - Wikipedia

⇧  OS以外の性能が追い付かない中で、

そこでゲイツは、カトラーが開発していたOS/2 3.0→NTを基本としつつ、それにWindows 3.0である程度確立されたGUIシェルを被せ、またそこで実装されていた16ビットWindows API (Win16) との互換性を持たせたOSを自社開発することとし、1993年にはNT系第一弾となるWindows NT 3.1の発売を果たした。

Windows NT系 - Wikipedia

⇧  ってOSとしてのWindowsのお披露目したんですが、 

NTは極めてコンパクトなマイクロカーネル、サブシステムの概念を導入し、Win32、OS/2POSIXのサブシステムをユーザ空間に配置した。サブシステムで致命的な問題が起きてもクラッシュと呼ばれるシステム全体の破綻を起こさない、当時のPCで動作するOSとしては画期的なシステムであった。

Windows NT系 - Wikipedia

⇧  POSIXのサブシステムも入っていたと。

しかしこの構造は当時のPCには負荷が大きく、結果として重いOSと評されることになる。殊にバージョン3.1リリース時にはプログラムの最適化が不十分であったこともあって当時の標準的なPC環境よりも遙かに過大なメモリを必要としたため、「メモリ・イーター」との不名誉な呼ばれ方をされたこともあった。

Windows NT系 - Wikipedia

⇧  OSが時代の先を行き過ぎてしまっていたようです。理想と現実のギャップ。

当初は重いOSにPC側の性能がついていかず、この新しいOSをビジネスPC用OSの後継にしようというマイクロソフトの目論みは失敗した。

Windows NT系 - Wikipedia

⇧  OSが時代の先を行き過ぎてしまっていたようです。理想と現実のギャップ。

しかし、NT 3.1、NT 3.5に続いて発表した NT 3.51において、時をほぼ同じくしてリリースしたWindows 95クライアントとしたサーバOSとしての性格を強調するマーケティングを行いNetWareの牙城であったNOSの市場に足場を確保することに成功した。

Windows NT系 - Wikipedia

⇧  Windowsの時代到来。

バージョンアップを重ねる際にマイクロカーネル概念の一部を放棄してWin32サブシステムやグラフィクス・デバイスドライバの論理層などをカーネル空間に展開してスループットを向上するなど、重いオペレーティングシステムという汚名を払拭するためのいくつもの改修が行われた。

Windows NT系 - Wikipedia

⇧  改良を重ねていたのですが、

UNIXnfsの一部をカーネルに移転してスループットを向上させる技術を参考に、ファイルサーバとしての性能向上を図った。

Windows NT系 - Wikipedia

⇧ そう、Unix系に思いっきりインスパイアされてるという。

Windows Vistaと同じソースコードベースであるWindows Server 2008ではハードウェア仮想化機能であるHyper-Vが搭載された。

Windows NT系 - Wikipedia

⇧  仮想化にも参入。

まぁ、そんな感じで、時が流れてきたらしいんですが、「POSIX」っていうAPI規格がありまして、

POSIX(ポシックス、ポジックス、Portable operating system interface)は、各種UNIXを始めとする異なるオペレーティングシステム (OS) 実装に共通のアプリケーションプログラミングインタフェース (API) を定め、移植性の高いアプリケーションソフトウェアの開発を容易にすることを目的としてIEEEが策定したAPI規格である。POSIXという名前はリチャード・ストールマンIEEEに提案したものである。末尾の「X」はUNIX互換OSに「X」の字がつく名前が多いことからつけられた。ISO/IEC JTC 1/SC 22でISO/IEC 9945として国際規格になっている。

POSIX - Wikipedia

⇧ 国際規格であると。

UnixOS以外でも、Windows NTPOSIX 1.0に準拠しているPOSIXサブシステムを搭載しており、POSIXアプリケーションをそのサブシステム上で実行できるWTO/TBT協定では、非関税障壁として工業製品は国際規格を尊重して仕様を規定することを提唱しているため、米国政府機関のコンピュータシステム導入要件 (FIPS) としてPOSIX準拠であることが規定されていたためである。

POSIX - Wikipedia

⇧ って書いてある通り、

POSIX互換のサービスを提供するためのサブシステムである。米国政府に納入するためにこのサブシステムを実装しなければならなかったとされ、あまり積極的に利用されなかった。OS/2サブシステムと同じく、Windows XPおよびWindows Server 2003以降ではサポートされておらず、次に述べるInterixサブシステムに取って代わっている。

Windows NT系 - Wikipedia

⇧  Microsoft は乗り気でなかったのである。

POSIXサブシステム

POSIX互換のサービスを提供するためのサブシステムである。Windows NT標準のPOSIXサブシステムの不備を解消するため、Softway Systems社(1999年9月17日、Microsoft社に吸収合併)が開発したOpenNTを起源とする。

Windows NT系 - Wikipedia

INTERIXサブシステム

後にUnixライクな環境を提供するServices for UNIXに標準搭載され、Windows NT系OS にネイティブで高品質なPOSIX環境が提供されることとなった。Windows Vistaの上位パッケージやWindows Server 2003よりSUA (Sub-system for UNIX-Based Applications)として標準搭載される。Windows NTに依存した部分がいくつか存在し、コンパイルする際にソースコードの書き換えが必要となることがある。

Windows NT系 - Wikipedia

惜しまれつつもWindows8.1 / Windows2012 R2よりInterixサブシステムは廃止された。代替手段としてHyper-Vを利用した仮想Unix環境、もしくはCygwinの利用が推奨されている。

Windows NT系 - Wikipedia

⇧  Microsoftは、Unix互換性を実現しようと、

Linuxサブシステム

Windows Subsystem for Linuxとして2016年3月に発表されたネイティブLinuxレイヤーを提供するサブシステムである。LinuxカーネルシステムコールをNTカーネルシステムコールに変換することによりLinuxアプリケーションのネイティブ動作を実現している。Interixサブシステムではソースコードの修正やInterix用にコンパイルを行う必要があったが、Subsystem for Linux ではUbuntu Linuxとバイナリレベルでの互換性を実現しているため、Ubuntuでビルドしたバイナリをそのまま実行できる。bashEmacsなどUnix/Linuxのソフトウェアが利用可能となる。

Windows NT系 - Wikipedia

⇧  頑張ってはいたようですが、結局、ことごとく志半ばで散るというか、不完全なものしか作れなかった。

その結果、Windowsで、Unixライクな環境を実現しようとすると、不具合のオンパレードが巻き起こるという(涙)。

んで、このPOSIXの部分が、Unixと互換性を実現してる部分かと。

⇧  Windows 2000アーキテクチャなんで、ちょっと時が経ってますが、Windows 10も同じ感じなんでしょうかね。

このPOSIXの部分に闇を抱えているということでしょうかね。

Windowsで、何とかLinuxっぽいコマンドを実行したいよねってことで、

いろいろ手段は講じられてきたらしんですが、どれも、不具合を抱えていたわけです。Windowsユーザである以上、安定したLinux環境を実現するってのは、常に薄氷を履むが如し心許ない状況だったわけですかね。 

だからこそ、Web開発においては、Windowsに見切りを付けて、MacOS X)に移行する人が続出したらしい、さもありなん。 

jp.quora.com

元々デザイン関係ではMacが強かったのですが、Windows では、オープンソースのnode.js, ruby, python等のプログラム言語や git 等のツールが非常に使いづらかった時代があります。それで、多くのWeb系のエンジニアが、windows では仕事をしずらいので Mac に移ったと思います。

エンジニアの間でMacの利用率が高い気がするのですが何故なのでしょうか? - Quora

いや、本当、どうにかならんもんかね... 

Microsoftも、Web系の需要の高さを認識してるからこそ、GitHubとかの買収とかもしたりとかしてるんだとは思うんだけど...

gigazine.net

Microsoft傘下に入ったGitHubは今後も独立性を維持する予定ですが、GitHubを利用していた開発者の間では、買収発表直後からGitHubからGitLabへプロジェクトを移動させる動きが活発化している様子が「Grafana」のデータからわかります。

https://dashboards.gitlab.com/d/2zgM_rImz/github-importer?orgId=1

MicrosoftがGitHubを8000億円超で買収、GitHubのオープン性は維持される見込み - GIGAZINE

⇧  Microsoft、信用されてないな~(笑)

 

 

WSL2(Windows Subsytem for Linux 2)はどうなの?

Unixと互換性の高いLinuxUnixと互換性の最悪なWindows

でも、WindowsLinux環境実現したい! どうしたら良いの~?

Microsoftさんが漸く、1つの答えを。

docs.microsoft.com

WSL 2 will be available on all SKUs where WSL is currently available, including Windows 10 Home.

The newest version of WSL uses Hyper-V architecture to enable its virtualization. This architecture will be available in the 'Virtual Machine Platform' optional component. This optional component will be available on all SKUs. You can expect to see more details about this experience soon as we get closer to the WSL 2 release.

WSL 2 Frequently Asked Questions | Microsoft Docs

⇧  WindowsのすべてのSKU(製品エディション)で使える!

それは、Hyper-V を使用した仮想化を採用したかららしい。

従来のHyper-Vの構造については、

www.atmarkit.co.jp

⇧  上記サイト様が詳しいです。

ただし、Hyper-Vを使用するということで、

Some 3rd party applications cannot work when Hyper-V is in use, which means they will not be able to run when WSL 2 is enabled. Unfortunately, this does include VMware, and versions of VirtualBox before VirtualBox 6 (VirtualBox 6.0.0 released in December 2018 now supports Hyper-V as a fallback execution core on a Windows host!)

WSL 2 Frequently Asked Questions | Microsoft Docs

We are investigating ways to help resolve this issue. For example, we expose a set of APIs called Hypervisor Platform that third-party virtualization providers can use to make their software compatible with Hyper-V’s. This lets applications use the Hyper-V architecture for their emulation such as the Google Android Emulator, and VirtualBox 6 and above which are both now compatible with Hyper-V.

WSL 2 Frequently Asked Questions | Microsoft Docs

⇧  他の仮想化ソリューションとの併用は基本的にまだ駄目みたい。ですが、「Virtual Box」のバージョン 6.0.0~とは併用できるらしい。

 

WSL2(Windows Subsytem for Linux 2)については、

www.atmarkit.co.jp

f:id:ts0818:20191109153707p:plain

WSL 1とWSL 2のアーキテクチャの違い
WSL 1は、サブシステムが特殊なプロセス環境を作り、Linuxカーネル機能をNTカーネルの機能呼び出しに変換してLinuxプログラムを実行する環境を作っていた。このためWSL 1ではLinuxカーネル自体は存在していなかった。これに対してWSL 2では仮想マシン内に専用パッチを当てたLinuxカーネルを動かし、Linuxの実行環境を作る。Linuxカーネルが動作するためほとんどのLinuxプログラムを動作させることができる。

完全なLinuxがWindows 10上で稼働する? 「WSL 2」とは:Windows 10 The Latest - @IT

⇧  上記サイト様が詳しいです。Hyper-V 上で、Linux仮想マシンを起動させてるから、Windows 10 Pro とかのHyper-V有効化と何が違うん?って思ってしまったんですが、

Hyper-V仮想マシンサービスを使ったLinux仮想マシンならば、これまでもあったではないか!」と思われる方もいるかもしれない。だが、この軽量ユーティリティーVMを使ったWSL 2では、仮想マシン環境が起動し、bashがコマンドを受け付けるまで2秒程度という速度で起動できる。

完全なLinuxがWindows 10上で稼働する? 「WSL 2」とは:Windows 10 The Latest - @IT

⇧  ということらしい。 

 

www.atmarkit.co.jp

⇧  上記サイト様が詳しいです。 「Linuxがほぼそのまま動くようになった」って謳い文句が!信じて良いのかしら...

 

WSL2(Windows Subsytem for Linux 2)を使用するための必要要件は、

docs.microsoft.com

WSL 2 をインストールして使用を開始するには、次の手順を実行します。

WSL 2 は、Windows 10 ビルド18917以降でのみ使用できます。

WSL 2 のインストール | Microsoft Docs

⇧  ということらしい。 

 見事に、

f:id:ts0818:20191109160644p:plain

満たしてない...

というのも、WSL2の正式リリースは、いつ頃になるのかは、Microsoftからの情報は未だ無いようですが、

www.softantenna.com

wccftech.com

⇧  「Windows 10 May 2020 Update」の時が正式リリースになるんじゃないかっていう予測があるようです。

Hyper-Vが利用できるSKU(製品エディション)であれば、PowerShellから「Get-VMHostSupportedVersion」コマンドで確認できるらしい。

私が使ってるのは、Windows 10 Home で、「Windows Insider Program」も行っていないので、「Get-VMHostSupportedVersion」コマンド使えなかったけどね...

f:id:ts0818:20191110113159p:plain

 

不具合とか起きても自己責任で試したい場合は、

docs.microsoft.com

⇧ 「Windows Insider Program」ってのを実行すれば、WSL2を使えるらしい。Windowsのバージョンも強制的にバージョンアップされるってことかと。

 

英語だけど、 

⇧  YouTubeの中の画像で、WSL2のフローのイメージが掴めるかも。

時間がある時に導入してみるか、正式リリースまで待つかは、悩みどころですかね。

何はともあれ、WSL2の完成が、完全なLinux環境をWindowsにもたらしてくれることに期待ですかね~。

今回はこのへんで。