Help us understand the problem. What is going on with this article?

WSL2とHyper-Vの関係

tl;dr

WSL2はHyper-Vのコア機能であるハイパーバイザーと、それを利用したHyper-Vコンテナーの上に実現されている。Hyper-Vコンテナーのコア機能はWindows 10 Homeでも利用可能なので、WSL2にProは不要。

MSのFAQから引用

WSL 2 は Hyper-v を使用しますか? Windows 10 Home で使用できるようになりますか。

WSL 2 は、WSL が現在利用可能なすべての Sku (Windows 10 Home を含む) で利用できます。
最新バージョンの WSL は、Hyper-v アーキテクチャを使用して仮想化を有効にします。 このアーキテクチャは、"仮想マシンプラットフォーム" のオプションコンポーネントで使用できます。 このオプションのコンポーネントは、すべての Sku で使用できます。 WSL 2 リリースに近いほど、このエクスペリエンスの詳細をすぐに確認できます。

https://docs.microsoft.com/ja-jp/windows/wsl/wsl2-faq#does-wsl-2-use-hyper-v-will-it-be-available-on-windows-10-home

仮想マシンプラットフォームとは

ここで言及されている「仮想マシンプラットフォーム」は、1日目の「WSLをインストールする」の記事に載せた通り、「Windows の機能の有効化または無効化」で有効にする必要がある。

image.png

この機能は、MSのFAQにもある通り、Windows 10 Homeを含むすべてのエディションで有効にできる。

Windows 10のエディション別、Hyper-V関連機能の概要

Windows 10 Home

(Hyper-V ハイパーバイザー および Hyper-V ネットワーク)

すべてのWindows 10に組み込まれている1

ただし単独で有効/無効を設定することはできない。ハイパーバイザーを必要とする機能がどれか1つでも有効にされると、一緒に有効化されるイメージ。

仮想マシンプラットフォーム

Hyper-V ハイパーバイザーを利用した、Windows 10のコンテナー機能のコア。

これを有効にすると、「Hyper-V ホスト コンピューティング サービス」というWindowsサービスも動作するようになる。このサービスは英語だとHost Compute Service(HCS)と表記されるもので、公式なドキュメントはこのあたりにもある

これは、Windows上に独立性の高いコンテナーを作成するために必要な「プロセス分離」と「Hyper-V分離」をサポートするためのもの2だが、実際にコンテナーの中でWindowsバイナリーを動かすには、後述する「コンテナー」機能も必要になる。

また、あまりまともなドキュメントがないのだが、この仮想マシンプラットフォーム上にインスタンス化されているコンテナーは、hcsdiag.exe コマンドで一覧表示するなどができる。WSL2を実行しているときに管理者権限でhcsdiag listを実行すると、"WSL"というコンテナーとして起動していることが確認できる。

Windows ハイパーバイザー プラットフォーム

これは大変紛らわしい名前なのだが、Hyper-V ハイパーバイザーを利用するにあたり、この機能を有効化する必要はない。

では、何のためにあるか、だが、簡単に言えば、「Hyper-V ハイパーバイザーが有効な状況でOracle VirtualBox 6やAndroid エミュレーターなどを動作させるための機構」である。

Hyper-V ハイパーバイザーを有効にすると、Intel VT-xなどのCPUによる仮想化支援機構をHyper-V ハイパーバイザーが占有してしまう。そのため、以前はOracle VirtualBoxのVMが起動できないとか、Android エミュレーターがVMアクセラレーションに利用していたHAXMがインストールできないとかいった問題が発生していた。

それを回避するため、Hyper-V ハイパーバイザーの追加APIのようなものを公開し、VirtualBoxやAndroidエミュレーターはそのAPIを通して仮想化支援機構を利用できるようにした。これが、Windows ハイパーバイザー プラットフォームである。

というわけなので、WSL2を使いつつ、VirtualBoxやAndroidエミュレーター(のVMアクセラレーション)も利用する場合に限り、この機能を有効にする必要がある。

(追記)VirtualBoxやVMWareについて、Windows 10 1903以降だとHyper-Vバックエンドがうまく動いてないという話があるようだ。これが解決しないとWSL2との共存はできないな……信頼できるソースの情報もとむ

Windows 10 Pro

Hyper-V

Hyper-V ハイパーバイザーの上で動かす仮想マシン(や、仮想ディスクや仮想スイッチなど)を作成し管理運用する、様々な機能や管理ツールの集合体。

Hyper-V マネージャーや、PowerShellの Get-VM コマンドレットで、登録されているVMの情報を得ることができるが、そこにはコンテナー(およびWSL2)の情報は出てこないので注意。

コンテナー

コンテナー化したWindowsバイナリーを「仮想マシンプラットフォーム」上で動かすための機能、および、そのようなWindows コンテナーを作成し管理運用するためのPowerShellコマンドレット群。

この機能を有効にすると、上述の「仮想マシンプラットフォーム」機能も有効になる。

調査があんまりできていないけれど、Docker for WindowsでLinuxコンテナー(LCOW)を動かすだけであれば不要なんじゃないだろうか。たぶん。

Windows サンドボックス

サンドボックスとして隔離されたWindows 10を「仮想マシンプラットフォーム」上で動かすための機能。ディスクは永続化されないので、サンドボックスを閉じたらすべて削除される。

サンドボックスはコンテナーとして作成される。管理者権限でhcsdiag listを実行すると、"Madrid"というコンテナーとして起動していることが確認できる。

(Docker Desktop for Windows)

無料で使えるサードパーティ製品であり、Windows自体の追加機能ではないけれど、一応書いておく。

この製品をインストールすることで、Windows上でLinuxコンテナー(LCOW)とWindows コンテナーを統一的に作成し管理運用することができる。

Docker for Windowsの導入には、Linuxコンテナーを動かすために「Hyper-V」(ハイパーバイザーではなく、フルのHyper-V)を、Windowsコンテナーを動かすために「コンテナー」を、それぞれ有効にする必要があったが、DockerランタイムをWSL2上で動かす機能がプレビュー登場しているので、Linuxコンテナーだけを作成し管理運用するのであれば、もしかしたらいずれWindows 10 Homeでもよくなるのかもしれない。(特にアナウンスがあったわけではないので、わからない。やっぱりProが必要のままかもしれない。)⇒(追記)やっぱりHomeでよくなる模様! https://qiita.com/Lyrise/items/951eed1a088a112e8397

図解

hyper-v.png

で、なんでWSL2はVMじゃなくてコンテナーなの?

推測だけども。

VMは基本的にブートシーケンスに結構時間がかかる。一応、起動後のVMインスタンスを保存して再開させることはできるが、コンテナーであれば最初からそれと同等の速さで起動できる。

また、WSLの想定ユースケースであるLinuxサーバーアプリケーション開発用途では、グラフィクス機能は不要3

そのあたりの背景がありつつ、あとはビジネス戦略上、ProにはHomeにない付加価値を持たせつつ、とはいえWSL2はHomeでも利用できた方がいい、という判断があったので、こうなったのではないだろうか。

推測だけども。


  1. 実際、関連するWindowsサービスとして「HV ホスト サービス」もあれば、サービス名の頭に「Hyper-V」がついたものも複数ある。 

  2. HCSは他にもCPUグループ機能を提供するなどしていて、Hyper-Vからも利用される。https://docs.microsoft.com/ja-jp/windows-server/virtualization/hyper-v/manage/manage-hyper-v-cpugroups 

  3. Windows側にX Serverを立ててGUIアプリを動かしたりする人ももちろんいるけどね。 

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした