Choosing Between WSL 1 and WSL 2 on Windows 11: A Decision Guide
A decision guide for choosing WSL 1 vs WSL 2 on Windows 11: compare architecture, file I/O, networking, GUI support, and get concrete commands to set defaults, convert distros, and validate performance.
23 Jan 2026, 11:42 UTC

The Decision: Which WSL Version Fits Your Workflow?
Windows Subsystem for Linux (WSL) lets you run Linux binaries on Windows 11 without a full virtual machine. The choice between WSL 1 and WSL 2 changes kernel behavior, file I/O performance, networking, and GUI support. Pick WSL 2 for full syscall compatibility and Linux-native workloads; pick WSL 1 when you need faster startup, direct NTFS access, or run inside nested virtualization where Hyper-V is unavailable.
Constraints That Narrow the Choice
| Constraint | WSL 1 | WSL 2 |
|---|---|---|
| Hardware virtualization required | No | Yes (BIOS/UEFI + Hyper-V platform) |
| Nested virtualization (e.g., VMware, VirtualBox host) | Works | Conflicts unless hypervisor supports Hyper-V coexistence |
| Full Linux syscall / kernel module support | Limited (translation layer) | Full (real Linux kernel) |
| GUI apps (WSLg) | Not supported | Native on Windows 11 22H2+ |
| Cross-OS file access (/mnt/c) | Faster (direct NTFS translation) | Slower (9P protocol over VM boundary) |
| Linux-native filesystem performance (ext4) | N/A | Fast (VHDX-backed) |
Architecture and Trade-offs
WSL 1: Translation Layer
WSL 1 implements a Linux-compatible kernel interface (lxcore.sys, lxss.sys) that translates Linux syscalls to Windows NT equivalents. No virtual machine runs. Startup is near-instant. File operations on /mnt/c hit NTFS directly, so tools like git, npm, or compilers reading Windows project folders perform well. However, syscalls without Windows analogs (e.g., epoll, inotify on certain paths, ptrace) fail or behave differently. Kernel modules cannot be loaded.
WSL 2: Lightweight Utility VM
WSL 2 runs a genuine Linux kernel (Microsoft-built, updated via Windows Update) inside a Hyper-V lightweight virtual machine. The distribution's root filesystem lives in a dynamically expanding VHDX file (typically %USERPROFILE%\AppData\Local\Packages\CanonicalGroupLimited.*\LocalState\ext4.vhdx for Ubuntu). This gives full syscall fidelity, enabling Docker, FUSE, bpf, and kernel modules. The VM boots in 1–2 seconds on modern hardware. The cost: cross-OS file access goes through a 9P file server, adding latency. Antivirus scanning of the VHDX can further degrade I/O; exclude the package folder if you see slow git status or npm install inside the Linux root.
Networking Differences
WSL 1 shares the host's network stack—localhost in Linux maps 1:1 to Windows localhost. WSL 2 gets a virtual NIC with its own IP (visible via ip addr show eth0). Ports bound inside WSL 2 are not automatically reachable at localhost on Windows. Windows 11 22H2+ includes automatic localhost forwarding for TCP, but UDP and some edge cases still require manual netsh interface portproxy rules or the wsl.exe --host workaround.
Concrete Implementation: Set Default, Switch a Distro, Validate
Run the following in an elevated PowerShell (Administrator) unless noted. Requires Windows 11 22H2 or later for WSLg GUI support.
1. Enable WSL and Virtual Machine Platform
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
# Reboot if prompted
Verify virtualization is enabled in firmware: Task Manager → Performance → CPU → Virtualization: Enabled.
2. Set Default Version to 2 (Recommended for New Installs)
wsl --set-default-version 2
New distributions installed via wsl --install -d Ubuntu or the Microsoft Store will use WSL 2.
3. Convert an Existing Distro
# List current versions
wsl -l -v
# Convert (replace Ubuntu with your distro name)
wsl --set-version Ubuntu 2
# Conversion takes 30–120 seconds; do not interrupt.
Risk: conversion rewrites the filesystem into a VHDX. Ensure no files are open in the distro. Back up critical data first.
4. Validate Syscall Compatibility
wsl -d Ubuntu -- uname -a
wsl -d Ubuntu -- ls /proc/sys/kernel
# Expect to see keys like ostype, osrelease, version, shmmax, pid_max
On WSL 2 you'll see a Linux kernel version (e.g., 5.15.x or 6.x). On WSL 1 the output still says Linux but /proc/sys/kernel lacks many entries.
5. Measure Cross-OS vs Native File I/O
# Cross-OS (Windows drive via 9P or translation)
wsl -d Ubuntu -- dd if=/dev/zero of=/mnt/c/temp/test bs=1M count=1024 conv=fdatasync
# Native Linux root (VHDX ext4)
wsl -d Ubuntu -- dd if=/dev/zero of=~/test bs=1M count=1024 conv=fdatasync
# Clean up
wsl -d Ubuntu -- rm /mnt/c/temp/test ~/test
Expect 2–5× higher throughput on the native path in WSL 2. In WSL 1 the cross-OS path is often faster than WSL 2's 9P route.
6. Test GUI App (WSLg) on WSL 2
wsl -d Ubuntu -- sudo apt update && sudo apt install -y gedit
wsl -d Ubuntu -- gedit
# A native-looking gedit window should appear on the Windows desktop.
If the window fails to open, ensure you're on Windows 11 22H2+ and the distro is version 2.
Ongoing Maintenance
- VHDX compaction: The virtual disk grows but never shrinks automatically. Run
wsl --manage Ubuntu --vhd-compact(PowerShell, distro stopped) after deleting large files inside Linux. - Kernel updates: Delivered via Windows Update. Check with
wsl --update. - Antivirus exclusions: Add
%USERPROFILE%\AppData\Local\Packages\CanonicalGroupLimited.*(or your distro's package family) to Defender/third-party AV exclusions to avoid I/O penalties.
Limitations and When to Re-evaluate
- WSL 2's VM blocks some third-party hypervisors. If you run VMware Workstation 17+ or VirtualBox 7+ with Hyper-V coexistence enabled, both can work; older versions require disabling WSL 2.
- GPU compute (CUDA, OpenCL) inside WSL 2 needs the NVIDIA/AMD/Intel user-mode driver installed in Windows and the matching container toolkit inside Linux. Not all kernel modules (e.g., proprietary out-of-tree drivers) load without extra steps.
- Enterprise auto-provisioning via Intune/Group Policy applies to both versions but requires Windows 11 Enterprise or Education.
Quick Verification Checklist
wsl -l -vshows VERSION 2 for target distro.- Task Manager → Performance → CPU shows Virtualization: Enabled.
uname -rinside distro returns a Linux kernel ≥ 5.10.ddtest shows native VHDX write ≥ 500 MB/s on NVMe.geditlaunches a GUI window (WSL 2 only).
If your workload lives entirely in Windows project folders (/mnt/c/Projects) and you need maximum cross-OS file speed or run inside a nested VM, stay on WSL 1. For everything else—containers, kernel development, GUI apps, Linux-native toolchains—WSL 2 is the supported default on Windows 11.
0 replies
A thoughtful contribution can make all the difference. Be the first to share one.