WSL バージョンの比較

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 のアーキテクチャは、いくつかの方法で WSL 1 より優れています。 OS ファイル システム間のパフォーマンスは例外ですが、これは、プロジェクトで作業するために実行しているツールと同じオペレーティング システムにプロジェクトファイルを格納することによって対処できます。

WSL 2 は、Windows 11または Windows 10 (バージョン 1903、ビルド 18362 以降) でのみ使用できます。 Windows のバージョンを確認するには Windows ロゴ キー + R キーを押します。次に「winver」と入力し、 [OK] を選択します (または、Windows コマンド プロンプトで ver コマンドを入力します)。 最新の Windows バージョンに更新する必要がある場合があります。 14393 より前のビルドでは、WSL はまったくサポートされていません。

WSL 2 での最新の更新プログラムについては、「Systemd サポートが WSL で利用可能に」を含む Windows コマンド ラインのブログ、および、IPv6 のサポートに関する「WSL 2023 年 9 月の更新プログラム」を参照してください。

Note

WSL 2 は VMware 15.5.5+ で動作します。VirtualBox 6+ は WSL サポートがあるとしていますが、サポートされないという重大な課題が残っています。 詳細については、よくあるご質問を参照してください。

WSL 2 の新機能

WSL 2 では、基盤となるアーキテクチャの大きな見直しが行われ、新機能を有効にするために仮想化テクノロジと Linux カーネルが使用されています。 この更新の主な目標は、ファイル システムのパフォーマンスを向上させることと、システム コールの完全な互換性を追加することです。

WSL 2 のアーキテクチャ

従来の VM エクスペリエンスは起動に時間がかかり、分離され、大量のリソースが消費され、管理に時間がかかる場合があります。 WSL 2 にこのような特徴はありません。

WSL 2 には、Windows と Linux の間のシームレスな統合、高速な起動時間、小さなリソース フットプリントをはじめとする WSL 1 の利点があるうえ、VM の構成や管理が必要ありません。 WSL 2 には VM が使用されますが、バックグラウンドで管理および実行されるため、WSL 1 とユーザー エクスペリエンスは同じです。

完全な Linux カーネル

WSL 2 の Linux カーネルは、kernel.org で入手できるソースに基づいて、最新の安定したブランチから Microsoft によって構築されています。このカーネルは WSL 2 向けに特別にチューニングされており、サイズとパフォーマンスの最適化によって Windows 上で優れた Linux エクスペリエンスが提供されます。 カーネルは、Windows の更新プログラムによって保守されます。つまり、自分で管理しなくても、最新のセキュリティ修正プログラムとカーネルの機能強化を利用できます。

WSL 2 Linux カーネルはオープン ソースです。 詳細については、カーネルを構築したチームによって書かれたブログ投稿「Windows に Linux カーネルを同梱する」を参照してください。

詳細については、Linux 用 Windows サブシステム カーネルのリリース ノートを参照してください。

ファイル 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 を使用する場合

WSL2 ではより高速なパフォーマンスと 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 にはシリアル ポートにアクセスするためのサポートは含まれていません。 詳細については、よくあるご質問またはシリアル サポートに関する 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 Remote WSL 拡張機能を試すことを検討してください。Linux コマンド ライン ツールを使用してプロジェクト ファイルを Linux ファイル システム上に格納できるだけでなく、Windows 上で VS Code を使用して、インターネット ブラウザーでプロジェクトを作成、編集、デバッグ、実行できるようになります。Linux ファイル システムと Windows ファイル システムをまたぐ処理に伴うパフォーマンスの低下は発生しません。 詳細については、こちらを参照してください

Microsoft Store 内の WSL

WSL は更新機能を、Windows OS イメージから Microsoft ストア経由で入手できるパッケージに引き上げました。 つまり、Windows オペレーティング システムの更新を待つ必要はなく、更新プログラムとサービスが高速に利用可能になります。

WSL はもともと、Linux ディストリビューションをインストールするために有効にする必要があるオプション コンポーネントとして Windows オペレーティング システムに含まれていました。 Store 内の WSL は同じユーザー エクスペリエンスを持ち、同じ製品ですが、OS 全体の更新プログラムとしてではなく、ストア パッケージとして更新プログラムとサービスを受け取ります。 Windows バージョン 19044 以上では、wsl.exe --install コマンドを実行すると、Microsoft Store から WSL サービス更新プログラムがインストールされます。 (この更新プログラムを発表するブログ記事を参照してください)。 WSL を既に使用している場合は、wsl.exe --update を実行して、ストアから最新の WSL 機能とサービスを確実に受け取れるように更新できます。