Skip to content
OnARM.Net

Windows on Arm上のWSL: 動作するものとx86-Linuxの落とし穴

2026年6月6日 更新

WSL2はWindows on Arm上で問題なく動作します。Snapdragon X搭載ノートPCで wsl --install を実行すればすぐに使え、ネイティブなLinux開発を行う場合、IntelやAMDのマシンと何ら変わりません。ただし、開発者を悩ませるアーキテクチャ上の落とし穴が1つあり、ArmノートPCにワークフローを移行する前に理解しておく価値があります。

アーキテクチャ: WSL2はArm64 Linuxを提供する

WSL2は軽量な(Hyper-Vベースの)VM上で動作する本物のLinuxカーネルです。仮想化は同一アーキテクチャのみのため、Windows on ArmではArm64(aarch64)LinuxカーネルとArm64ディストリビューションが提供されます。wsl --install は自動的にArm64版Ubuntuを取得します。これは、Hyper-VとMac VMに適用されるのと同じ同一アーキテクチャのルールです。

ArmではWSL1ではなくWSL2を使用してください。WSL1のシステムコール変換レイヤーはレガシーであり、WSL2は本物のカーネルとコンテナを提供します。

落とし穴: x86/x64 Linuxバイナリは実行できない

これが人々を驚かせる制限であり、通常のx86 PCとの重要な違いです。

Arm64 WSLディストリビューションは、Arm64 Linuxバイナリのみを実行します。x86/x64 Linuxバイナリを透過的に実行することはできません。組み込みのクロスアーキテクチャエミュレーターはありません。x86_64 Linux ELFバイナリを実行しようとすると、cannot execute binary file: Exec format error で失敗します。通常の回避策(qemu-user-staticbox64)は、現在のArm WSL内では壊れているか信頼性が低いと報告されているため、Arm WSL上で「x86 Linuxバイナリを実行する」ことは確実にサポートされていないと考えてください。

これをPrismと混同しないでください。 Prismはx86 Windowsアプリをエミュレートし、Armでは常に動作します。WSLはLinux側であり、そこではネイティブのArm64環境であり、x86のフォールバックはありません。「Windowsアプリはエミュレートで動作する」ことを知っている読者は、Linuxバイナリも同様に動作すると誤解するでしょう。しかし、実際には動作しません。

ネイティブで問題なく動作するもの

Arm64ネイティブのLinux開発において、WSL on Armは優れています。実績のある動作例: Node.js、Python、.NET 8、PHP、MySQL/Postgres(コンテナ内)、VS Code(WSL拡張機能付き)、Ollama。Arm64イメージが充実しているディストリビューション: Ubuntu、Debian、Fedora、Kali、openSUSE、AlmaLinux。

1つの注意点: Microsoft Storeの一部のディストリビューションエントリには実際のArm64イメージが存在しないため、Armで動作するものを見つけるには試行錯誤が必要です。

Dockerとマルチアーキテクチャビルド

Docker Desktopは完全なArm64サポートを備えていますが、Snapdragonでは一部に荒削りな点が報告されています。問題点はコンテナ形式での同じx86の落とし穴です。linux/amd64イメージをプルして実行するにはQEMUエミュレーションが必要で、低速です。チームのCIやイメージがamd64を前提としている場合は、摩擦が予想されます。マルチアーキテクチャイメージをビルドし、arm64ベースイメージを優先してください。これは、CI/CD on Armに直接関連します。

GUIアプリ(WSLg)

WSLg(Windows上のLinux GUIアプリ)はArmで動作しますが、GPUハードウェアアクセラレーションはありません。ソフトウェアレンダリングとなり、アプリ自体にArm64ビルドが必要です。ツールには問題ありませんが、GPU負荷の高いLinuxアプリには適しません。

結論

ネイティブなArm64 Linuxの作業(最新のWeb/バックエンド/DevOps開発のほとんど)において、SnapdragonノートPC上のWSLはファーストクラスの体験です。切り替える前に確認すべき点は1つです。使用しているツールに、arm64ビルドがなくx86/x64 Linuxバイナリしか提供されていないものはありませんか? もしあれば、それらは動作しません。これは、移植前にWindowsアプリの依存関係を監査するのと同じです。arm64ビルドがあるものについては、問題なく使用できます。

← ガイド一覧