WSL 2 が既定になった理由や、インストールされている Linux ディストリビューションを以前の WSL 1 アーキテクチャに切り替える必要がある特定のシナリオや例外など、さまざまな WSL バージョンの詳細について説明します。
WSL 1 と WSL 2 の比較
このガイドでは、WSL 1 と WSL 2 を比較します。WSL 2 ではなく WSL 1 を使用する場合の例外含まれます。 WSL 1 と WSL 2 の主な違いは、マネージド VM 内での実際の Linux カーネルの使用、システム呼び出しの完全な互換性のサポート、Linux および Windows オペレーティング システム全体のパフォーマンスです。 WSL 2 は、Linux ディストリビューションをインストールする際の現在の既定のバージョンであり、最新かつ最高の仮想化テクノロジを使用して、軽量ユーティリティ仮想マシン (VM) 内で Linux カーネルを実行します。 WSL2 は、Linux ディストリビューションをマネージド VM 内の分離されたコンテナーとして実行します。 ディストリビューションで現在 WSL 1 を実行していて、WSL 2 に更新する場合は、WSL 1 から WSL 2 への更新 を参照してください。
機能の比較
特徴 | WSL 1 | WSL 2 |
---|---|---|
Windows と Linux の統合 | ✅ | ✅ |
高速ブート時間 | ✅ | ✅ |
従来の仮想マシンと比較して小さなリソースフットプリント | ✅ | ✅ |
VMware と VirtualBox の現在のバージョンで実行する | ✅ | ❌ |
マネージド VM | ❌ | ✅ |
完全な Linux カーネル | ❌ | ✅ |
システム呼び出しの完全な互換性 | ❌ | ✅ |
OS ファイル システム全体のパフォーマンス | ✅ | ❌ |
systemd のサポート | ❌ | ✅ |
IPv6 のサポート | ✅ | ✅ |
上記の比較表からわかるように、WSL 2 アーキテクチャは、OS ファイル システム全体のパフォーマンスを除き、いくつかの方法で WSL 1 を上回ります。これは、プロジェクトで作業するために実行しているツールと同じオペレーティング システムにプロジェクト ファイルを格納することで対処できます。
WSL 2 は、Windows 11 または Windows 10 バージョン 1903、ビルド 18362 以降でのみ使用できます。 Windowsロゴキー + Rを押して、winverと入力し、OKを選択して、Windowsのバージョンを確認します。 (または、Windows コマンド プロンプトで ver
コマンドを入力します)。 最新の Windows バージョンに更新する必要がある場合があります。 14393 未満のビルドの場合、WSL はまったくサポートされていません。
WSL 2 での最新の更新プログラムについては、「Systemd サポートが WSL で利用可能に」を含む Windows コマンド ラインのブログ、および、IPv6 のサポートに関する「WSL 2023 年 9 月の更新プログラム」を参照してください。
手記
WSL 2 は VMware 15.5.5 以降の で動作します。VirtualBox 6 以降の には WSL のサポートがあることを示していますが、サポートされないという重大な課題が依然として存在します。 詳細については、に関する FAQ を参照してください。
WSL 2 の新機能
WSL 2 は、基になるアーキテクチャの大幅な見直しであり、仮想化テクノロジと Linux カーネルを使用して新機能を有効にします。 この更新プログラムの主な目標は、ファイル システムのパフォーマンスを向上させ、システム呼び出しの完全な互換性を追加することです。
WSL 2 アーキテクチャ
従来の VM エクスペリエンスは、起動に時間がかかり、分離され、大量のリソースを消費し、それを管理する時間が必要になる場合があります。 WSL 2 にはこれらの属性がありません。
WSL 2 には、Windows と Linux 間のシームレスな統合、高速ブート時間、小さなリソース フットプリント、VM の構成や管理が不要など、WSL 1 の利点があります。 WSL 2 は VM を使用しますが、管理され、バックグラウンドで実行されるため、WSL 1 と同じユーザー エクスペリエンスが得られます。
完全な Linux カーネル
WSL 2 の Linux カーネルは、kernel.orgで使用可能なソースに基づいて、最新の安定したブランチから Microsoft によって構築されています。このカーネルは WSL 2 用に特別に調整されており、サイズとパフォーマンスを最適化して、Windows で優れた Linux エクスペリエンスを提供します。 カーネルは Windows 更新プログラムによって処理されます。つまり、自分で管理しなくても、最新のセキュリティ修正プログラムとカーネルの機能強化が得られます。
WSL 2 Linux カーネル はオープン ソースです。 詳細については、ブログ記事「ビルドしたチームが作成した Windows を使用して Linux カーネルを配布する」を参照してください。
詳細については、Windows Subsystem for Linux カーネル のリリース ノートを参照してください。
ファイル IO パフォーマンスの向上
WSL 2 では、git clone
、npm install
、apt update
、apt upgrade
などのファイルを集中的に使用する操作がすべて顕著に高速になります。
実際の速度の向上は、実行しているアプリとファイル システムとの対話方法によって異なります。 WSL 2 の初期バージョンは、zip 圧縮された tarball をアンパックする場合は WSL 1 に比べて最大 20 倍高速で、さまざまなプロジェクトで git clone
、npm install
、cmake
を使用する場合は約 2 ~ 5 倍高速です。
システム呼び出しの完全な互換性
Linux バイナリでは、システム呼び出しを使用して、ファイルへのアクセス、メモリの要求、プロセスの作成などの機能を実行します。 WSL 1 は WSL チームによって構築された変換レイヤーを使用していましたが、WSL 2 には、システム呼び出しの完全な互換性を備えた独自の Linux カーネルが含まれています。 次のような利点があります。
Docker など、WSL 内で実行できるまったく新しいアプリのセット。
Linux カーネルの更新プログラムはすぐに使用できます (WSL チームが更新プログラムを実装して変更を追加するのを待つ必要はありません)。
WSL 2 ではなく WSL 1 を使用する場合の例外
WSL 2 の方がパフォーマンスが向上し、システム呼び出しの互換性が 100% するため、WSL 2 を使用することをお勧めします。 ただし、WSL 1 を使用する場合は、いくつかの特定のシナリオがあります。 次の場合は、WSL 1 の使用を検討してください。
- プロジェクト ファイルは、Windows ファイル システムに格納する必要があります。 WSL 1 では、Windows からマウントされたファイルにすばやくアクセスできます。
- WSL Linux ディストリビューションを使用して Windows ファイル システム上のプロジェクト ファイルにアクセスし、これらのファイルを Linux ファイル システムに格納できない場合は、WSL 1 を使用して OS ファイル システム全体のパフォーマンスを向上させることができます。
- 同じファイルで Windows と Linux の両方のツールを使用してクロスコンパイルを必要とするプロジェクト。
- WINDOWS および Linux オペレーティング システム全体のファイル パフォーマンスは WSL 1 では WSL 2 よりも高速であるため、Windows アプリケーションを使用して Linux ファイルにアクセスする場合、現在、WSL 1 の方が高速なパフォーマンスを実現できます。
- プロジェクトでは、シリアル ポートまたは USB デバイスにアクセスする必要があります。 ただし、 USB デバイスのサポートは、
USBIPD-WIN
プロジェクトを介して WSL 2 で使用できるようになりました。 セットアップ手順については、「USB デバイス を接続する」を参照してください。 - WSL 2 には、シリアル ポートへのアクセスのサポートは含まれていません。 詳細については、FAQ またはシリアル サポート に関する WSL GitHub リポジトリの問題参照してください。
- 厳密なメモリ要件がある
- WSL 2 のメモリ使用量は、使用するにつれて増減します。 プロセスがメモリを解放すると、これは自動的に Windows に返されます。 ただし、現時点では、WSL 2 は、WSL インスタンスがシャットダウンされるまで、メモリ内のキャッシュされたページを Windows に解放していません。 WSL セッションの実行時間が長い場合、または非常に大量のファイルにアクセスする場合、このキャッシュは Windows 上のメモリを占有する可能性があります。 このエクスペリエンスを向上させるための作業を、WSL GitHub リポジトリの問題 4166で追跡しています。
- VirtualBox を使用している場合は、必ず VirtualBox と WSL 2 の両方の最新バージョンを使用してください。 関連の FAQを参照してください。
- Linux ディストリビューションに依存してホスト コンピューターと同じネットワークに IP アドレスを設定する場合は、WSL 2 を実行するために回避策を設定する必要がある場合があります。 WSL 2 は、Hyper-V 仮想マシンとして実行されています。 これは、WSL 1 で使用されるブリッジされたネットワーク アダプターからの変更です。つまり、WSL 2 は、ホスト ネットワーク インターフェイス カード (NIC) にブリッジされる代わりに、仮想ネットワークにネットワーク アドレス変換 (NAT) サービスを使用するため、再起動時に一意の IP アドレスが変更されます。 WSL 2 サービスの TCP ポートをホスト OS に転送する問題と回避策の詳細については、WSL GitHub リポジトリ 問題 4150、NIC ブリッジ モード (TCP 回避策)を参照してください。
手記
VS Code リモート WSL 拡張機能 を試して、Linux コマンド ライン ツールを使用してプロジェクト ファイルを Linux ファイル システムに格納できるようにするほか、Windows 上の VS Code を使用して、Linux および Windows ファイル システム間での作業に関連するパフォーマンス低下を発生させずに、インターネット ブラウザーでプロジェクトを作成、編集、デバッグ、または実行することを検討してください。 詳細については、を参照してください。
Microsoft Store の WSL
WSL は、Windows OS イメージから Microsoft Store 経由で利用可能なパッケージに更新機能をリフトアウトしました。 つまり、Windows オペレーティング システムの更新を待つ必要はなく、利用可能になるとすぐに更新とサービスが高速化されます。
WSL はもともと、Linux ディストリビューションをインストールするために有効にする必要があるオプションコンポーネントとして Windows オペレーティング システムに含まれていました。 ストアの WSL は同じユーザー エクスペリエンスを持ち、同じ製品ですが、OS 全体の更新プログラムとしてではなく、ストア パッケージとして更新プログラムとサービスを受け取ります。 Windows バージョン 19044 以降では、wsl.exe --install
コマンドを実行すると、Microsoft Store から WSL サービス更新プログラムがインストールされます。 (この更新プログラムのを発表するブログ記事を参照してください)。 WSL を既に使用している場合は、wsl.exe --update
を実行して、ストアから最新の WSL 機能とサービスを確実に受け取れるように更新できます。
手記
組織内で Microsoft Store にアクセスできない場合でも、wsl --update --web-download
などの --update
コマンドに --web-download
を追加することで、この WSL バージョンを利用できます。 この方法を使用して新しいリリースが利用可能になるたびに、WSL を手動で更新する必要があります。
Windows Subsystem for Linux