Skip to content
nishi_74322014 edited this page Sep 11, 2026 · 4 revisions

Windows Subsystem for Linux

概要

  • Windows Subsystem for Linux(以下、WSL と略す。)

  • 旧称:Bash on Ubuntu on Windows / Bash on Windows

  • 仮想環境ではなく、エミュレーション環境(互換レイヤ)なので、
    Hyper-Vの機能は使用せず、
    新しいサブシステムとして Linux を動作させることができる。

  • これは、Linux 系の開発環境をサポートすることが主目的と予想されている。

  • Docker for Windowsと同様に、
    Bash on Windows から、ひたすら進化を続けている。

移行メモ(重要な前提の変化): 概要の「仮想環境ではなく、
エミュレーション環境(互換レイヤ)なので、Hyper-V の機能は使用せず」
という記述は WSL 1 についてのみ正しい

WSL 2 では前提が逆転している。

WSL 1 WSL 2
方式 システム コールを Windows カーネルに翻訳 本物の Linux カーネルを軽量 VM で実行
Hyper-V 使わない 使う(仮想マシン プラットフォームが必須)
Linux 側の I/O 遅い 速い(ext4 ネイティブ)
/mnt/c 越しの Windows ファイル 速い 遅い(9P プロトコル経由)
Docker 実質動かない 動く
完全な syscall 互換 ×(一部未実装)

現在の既定は WSL 2 であり、本ページの記述の多くは WSL 1 前提である
点に注意して読む必要がある。

方式

「ライブラリ OS」・「ピコプロセス」というテクノロジを土台にしている。

Picoプロバイダードライバー

  • Linux 互換環境を提供する Pico プロバイダードライバー
    lxss.syslxcore.sys という 2 つのカーネルドライバー)で実装されている。

  • リダイレクタ的なアーキテクチャによって、
    Windows クライアントと Linux サーバを Pico 経由で接続して動作する。

    Microsoft Bash Launcher(bash.exe)
        ---> LX Session manager service ---> Pico <---> Linux
    
  • これにより、ほぼネイティブに(?)Linux の機能(バイナリ)が
    Windows から呼び出せる。

補足: この Pico プロセス方式は WSL 1 の実装である。
WSL 2 ではこの仕組みは使われず、
実際の Linux カーネル(Microsoft がビルドした linux-msft-wsl)が
軽量ユーティリティ VM 上で動作する。
WSL 1 も引き続き選択でき、wsl --set-version <distro> 1 で戻せる。

ディストリビューション

厳密には以下の Linux ディストリビューションの上で動作可能なツール

メジャー

  • Ubuntu
  • openSUSE
  • SUSE Linux Enterprise Server

マイナー

  • WLinux Enterprise
  • Fedora Remix for WSL

補足(現在): Microsoft Store 経由のほか、
wsl --list --online で導入可能なディストリビューションを一覧でき、
wsl --install -d Ubuntu-24.04 のように直接インストールできる。
Debian / Kali / Oracle Linux / AlmaLinux 等も提供されている。
任意の tar からのインポート(wsl --import)も可能である。

詳細

インストール / アンインストール

Creators Update (V.1703) 以前

WSL が β 版だった頃。

Fall Creators Update (V.1709) 以降

  • Microsoft Store からインストール、
  • 「⚙」の[アプリと機能]からアンインストール

補足(最新化:現在は 1 コマンドで入る): Windows 10 バージョン 2004 以降、
管理者権限の PowerShell で次の 1 行だけで済む。

wsl --install

これで「仮想マシン プラットフォーム」「WSL 機能」の有効化、
Linux カーネルの導入、既定ディストリビューション(Ubuntu)の
インストールまでが一括で行われる。
Store から個別に入れる手順や dism での機能有効化は、
現在では不要である。

なお、WSL 自体も Microsoft Store アプリとして配布されるようになり
wsl --update)、OS のリリース サイクルと切り離して更新される。

ディストリビューション変更

  • wsl --set-default <名前> で既定を切り替える。
  • 複数のディストリビューションを並存させられる。

Windows Server

サーバにもインストール可能

利用方法

基本的な利用方法

相互運用

Dockerとの関係

WSL(1)

  • 裏技を除き、WSL(1) 上で Docker を動かすことはできない。

  • Linux スタイルのスニペットを動かすために、
    Docker のクライアント(Docker コマンド)のみを WSL(1) から
    利用するケースが多い。

WSL2

  • WSL 2 では、Docker Desktop WSL2 Backend で Docker をサポートする。
  • また、Docker Desktop なしでも内部で Docker を動かせるらしい。

補足: 「Docker Desktop なしでも動かせる」は現在では確立した手法で、
WSL 2 のディストリビューション内に docker-ce を直接インストールすればよい。
Docker Desktop の有償化コンテナ技術を参照)
以降、この構成を採る例が増えている。

GUIのサポート

補足: WSLg(WSL GUI)は Windows 11 および
Windows 10 の一部ビルドで標準機能として提供済みである。
別途 X サーバ(VcXsrv 等)を入れなくても、
WSL 内の GUI アプリがそのまま Windows のウィンドウとして表示される。
音声(PulseAudio)と GPU アクセラレーションにも対応する。

Google Playのサポート

移行メモ(正誤・最新化): この見出しは Android アプリの話であり、
WSL ではなく WSA(Windows Subsystem for Android) の機能である。
混同しやすいので分けて理解したい。
なお WSA は 2025年3月5日にサポートが終了しており、
Microsoft Store からの Amazon アプリストア提供も終了している。

その他

I/Oが遅いらしい

Linux と違い Windows はファイルシステムへのアクセスが必須で、
大量のフィルター(ドライバ)が登録されているため遅いらしい。

補足(WSL 2 での性能の勘所): WSL 2 で性能を出す条件は明快である。

ソースコードは Linux 側のファイルシステム(~/ 配下)に置く。

置き場所 速度
/home/user/project(ext4) 速い(ネイティブ)
/mnt/c/Users/...(Windows 側) 遅い(9P 経由。数倍〜十数倍の差)

npm installgit status が異様に遅い場合、
ほぼ /mnt/c にリポジトリを置いていることが原因である。
Windows 側から Linux 側のファイルには
\\wsl$\Ubuntu\home\user\... でアクセスできる。

参考

Publickey

Build Insider

@IT

microsoft.com


Tags: 移行, Windows, Linux, Linuxサブシステム, 仮想化

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally