WSL 1 と WSL 2 の比較

WSL 1 から WSL 2 に更新する主な理由は次のとおりです。

  • ファイル システム パフォーマンスの向上
  • システム コールの完全な互換性のサポート

軽量のユーティリティ仮想マシン (VM) 内で Linux カーネルを実行するために、WSL 2 には最新の優れた仮想化テクノロジが使用されています。 ただし、WSL 2 は従来の VM エクスペリエンスではありません。

このガイドでは WSL 1 と WSL 2 を比較します。 WSL 2 ではなく WSL 1 を使用する場合の例外 も含まれます。 WSL 1 と WSL 2 の主な相違点は、管理対象 VM 内での実際の Linux カーネルの使用、システム コールの完全な互換性に対するサポート、Linux および Windows オペレーティング システム全体でのパフォーマンスです。

機能の比較

機能 WSL 1 WSL 2
Windows と Linux の統合
高速の起動時間
従来の仮想マシンと比較して小さなリソース フット プリント
現在のバージョンの VMware および VirtualBox での実行
マネージド VM
完全な Linux カーネル
システム コールの完全な互換性
OS ファイル システム間でのパフォーマンス

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

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

注意

WSL 2 は VMware 15.5.5+VirtualBox 6+ で動作します。 詳細については、よくあるご質問を参照してください。

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 を使用する場合は、実行しているバージョンと WSL 2 との互換性があるかどうかを考慮する必要があります。 (詳しくは、WSL GitHub リポジトリの問題 798 で議論全体を参照してください。VirtualBox v6.1.16 は WSL 2 で動作するように見えますが、他のバージョンでは問題が発生する可能性があります。)
  • 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 ファイル システムをまたぐ処理に伴うパフォーマンスの低下は発生しません。 詳細については、こちらを参照してください