Windows Subsystem for Linux 2
木澤朋和
Microsoft MVP for Windows and Device for IT
windows-podcast.com
2019年9月7日 わんくま同盟横浜勉強会
自己紹介
• 木澤朋和(きざわともかず)
• 国内メーカーのグループ会社の
エンジニア
(但し、本日はプライベート参加)
• Microsoft MVP for Windows and Devices for IT (2019/7~2020/6)
• ポッドキャスト番組の配信(配信満10周年、500回)
• 動画の配信
• 写真撮影(沼)
• ブログの執筆 (最近noteも書いています)
• コミュニティ活動(.NETラボ / ゆうMUG / IoT ALGYAN)
Copyright (c) 2019 Tomokazu Kizawa All rights reserved. 2
Windows Subsystem for
Linuxとは?
Copyright (c) 2019 Tomokazu Kizawa All rights reserved. 3
Windows Subsystem for Linuxとは?
• Windowsの中でLinuxをそのまま動かしてしまう機能
• Ubuntuのカノニカル社と共同開発
• 決して買収しようとしているのではない
(それは昔のマイクロソフト(^_^;))
• Windows 10 Anniversary Update(Ver.1607)から採用
(注) 本セッションでは便宜上現行のWindows Subsystem for
LinuxをWSL1と呼びます。
Copyright (c) 2019 Tomokazu Kizawa All rights reserved. 4
WSL登場の背景
• 開発にはUNIXの優秀なツール類がある
• UNIXであるMacは開発者からとても評価が高い
• マイクロソフトとしても開発者にはWindowsに来てもらいたい
• Windowsで標準でUNIXと同等の環境を提供したい
Copyright (c) 2019 Tomokazu Kizawa All rights reserved. 5
WSL1の仕組み
Copyright (c) 2019 Tomokazu Kizawa All rights reserved. 6
Windowsカーネル
Windowsサブシステム
Linuxサブシステム
Lxcore/LXSS
ファンクションコールを変換
カーネルモード
ユーザーモードWindowsユーザーモード Linuxユーザーモード
Ubuntu SUSE
PICOプロセス
WSL1のLinuxの起動
Copyright (c) 2019 Tomokazu Kizawa All rights reserved. 7
Windowsカーネル
Windowsサブシステム
Linuxサブシステム
Lxcore/LXSS
① wsl.exe
③ init ④ bash
Linuxサブシステム
②Linuxセッショ
ンマネージャ
サービス Linuxカーネル
(vmlinux)
ディストリビューションの入手
• ディストリビューションMicrosoft Storeより入手
Copyright (c) 2019 Tomokazu Kizawa All rights reserved. 8
WSL1の問題点
• 全てのカーネルファンクションが実装されていない
• カーネルファンクションには、Linuxと完全な互換性がない
• Windowsの配下で動くので、各種管理はWindowsが行うので
特にファイルアクセスのパフォーマンスが悪い
• シェルを終了させてしまうと、Linuxサブシステムも終了して
しまうので、サーバー用途には利用できない
Copyright (c) 2019 Tomokazu Kizawa All rights reserved. 9
Windows Subsystem for Linux 2の登場
• Build 2019で発表
• 多分、Windows 10次の次のバージョン(20H1)から搭載
2020年4~5月正式リリース
• 今のリリース状況
Insider Preview(20H1)でテストリリース中
Copyright (c) 2019 Tomokazu Kizawa All rights reserved. 10
19H1
リリース日程(多分)
• Windows 10のリリースと同期
• Windows 10は半期チャネルでリリース
• 但し、大幅な機能強化は春のアップデートの方向
• 多分、Windows 10次の次のバージョン(20H1)から搭載
2020年4~5月正式リリース。現在テストリリース中
Copyright (c) 2019 Tomokazu Kizawa All rights reserved. 11
2019/5
May 2019 Update
Ver.1903(19H1)
2019/10 ?
Ver.1909(19H2)
2020/4〜5?
Ver.2003(20H1)
19H2(Insider Preview)
20H1(Insider Preview – Skip ahead) ←ここでリリースか!?
WSL2の違い
• 互換性の向上(というか完全互換)
• Linuxを仮想環境上で動かす
• カーネルはLinux 4.19ベースでマイクロソフトがカスタマイズ
• 速度向上
• gitクローン作成 2.5倍
• npm(パッケージのインストール) 4.7倍
• cmakeによるビルド 3.1倍
• (注) Surface Laptopで実行
• ユーザーからのフィードバック
Copyright (c) 2019 Tomokazu Kizawa All rights reserved. 12
WSL2の仕組み
Copyright (c) 2019 Tomokazu Kizawa All rights reserved. 13
Hyperバイザー
Windowsカーネル Linuxカーネル
Windowsユーザーモード Linuxユーザーモード
仮想環境
仮想環境での実行
• Hyper-VはOSと独立している
• 起動に時間がかかる
• メモリ消費大
• WSL2の仮想環境はOSに統合されている
• 起動が早い(1秒以内)
• メモリ消費も少ない
• Windows側のファイルシステムにもアクセスできる。
Copyright (c) 2019 Tomokazu Kizawa All rights reserved. 14
WSL2のLinuxの起動
Copyright (c) 2019 Tomokazu Kizawa All rights reserved. 15
① wsl.exe
③ init ④ bash
仮想環境
②Linuxセッショ
ンマネージャ
サービス Linuxカーネル
ホストコン
ピュート
サービス
VMワーカー
プロセス
相互ファイルアクセス
• LinuxからWindowsのファイルアクセス
• /mnt/(ドライブ名)
• (例) /mnt/c/
• WindowsからLinuxのファイルアクセス
• WSL2よりできるようになった
• ¥¥wsl$¥(ディストリビューション名)
• (例) ¥¥wsl$¥Ubuntu (次ページ)
Copyright (c) 2019 Tomokazu Kizawa All rights reserved. 16
Copyright (c) 2019 Tomokazu Kizawa All rights reserved. 17
Linuxファイルシステムへのアクセス
• 9Pプロトコルでネットワーク通信
• 9P
• Plan 9 Filesystem Protocol
• Plan 9(OS)のネットワークプロトコル
Copyright (c) 2019 Tomokazu Kizawa All rights reserved. 18
Windows環境
Linux
ext4ファイルシステム
9P
クライアント
エクスプローラー
Linux仮想環境
9P
サーバー
ファイルシステムはVHDX
LinuxからWindowsプログラムの実行
• Bashシェルでプログラムを実行
• 実行ファイルのマジックナンバー(Win32だと”MZ”)で判断
• Win32だったらWindowsにプログラム実行を依頼
• Linuxだったらそのまま実行
Copyright (c) 2019 Tomokazu Kizawa All rights reserved. 19
Windows環境
bashwsl.exe
Linux仮想環境
Win32
プログ
ラム?
Win32プログラム実行して!
パフォーマンスの向上
• ファイルアクセスの
パフォーマンスが向上
• 但し、起動直後だけは
時間がかかる
Copyright (c) 2019 Tomokazu Kizawa All rights reserved. 20
ASCIIデジタル「プレビューが開始されたWindows Subsystem for Linux 2を動かす」塩田紳二さんの記事のベンチマークを例に説明させていただきました。
https://ascii.jp/elem/000/001/881/1881674/
WSL2のインストール
Copyright (c) 2019 Tomokazu Kizawa All rights reserved. 21
WSL2のインストール
• 現時点では、Windows 10 Insider Preview 18917以降が
インストールされていること
• Virtual Machine Platformを有効化
Copyright (c) 2019 Tomokazu Kizawa All rights reserved. 22
既にWSL1でLinuxを使っている場合
• LinuxのWSLバージョンを確認
• wsl -l -v
Copyright (c) 2019 Tomokazu Kizawa All rights reserved. 23
WSL1からWSL2に変換
• LinuxのWSLバージョンを確認
• wsl --set-version (ディストリビューション名) 2
Copyright (c) 2019 Tomokazu Kizawa All rights reserved. 24
WSLディストリビューションをインス
トール指定なし場合
• デフォルトのWSLバージョンを設定
• wsl --set-default-version 2
Copyright (c) 2019 Tomokazu Kizawa All rights reserved. 25
Windows Terminal
すみません時間が余りました。
Copyright (c) 2019 Tomokazu Kizawa All rights reserved. 26
Windows Terminalとは?
• マイクロソフトのPV
• https://youtu.be/8gw0rXPMMPE
Copyright (c) 2019 Tomokazu Kizawa All rights reserved. 27
Windows Terminalとは?
• 超凄いコマンドプロンプト
• 複数のタブでコンソールを扱える
• コマンドプロンプト
• PowerShell
• Windows Subsystem for Linux
• Azure Cloud Shell
• UTF-8/16、Unicode対応(絵文字も含む)
• GPUアクセラレーション
Copyright (c) 2019 Tomokazu Kizawa All rights reserved. 28
Windows Terminalの設定
• メニューよりSetting
• Jsonファイルを編集する
Copyright (c) 2019 Tomokazu Kizawa All rights reserved. 29
マイクロソフトとLinux
• スティーブ・バルマー「オープンソースはガンだ」
• サティア・ナデラ「I ❤️ Linux」
• Windows Subsystem for Linux
• SQL Server for Linux
• Azure Sphere
• まさか!WindowsのカーネルがLinuxになったりしない!?
Copyright (c) 2019 Tomokazu Kizawa All rights reserved. 30
いつかできるから今日できる
Copyright (c) 2019 Tomokazu Kizawa All rights reserved. 31

Windows Subsystem for Linux 2