Skip to content
Comparing MSL and WSL

Comparing MSL and WSL

MSL aims to behave like WSL 2, so that one set of instructions works on Windows and macOS. This page lists where it matches and where macOS makes it differ.

Comparing features

FeatureWSL 2MSL
HostWindowsmacOS 26 or later, Apple silicon
Command linewsl.exemsl: the same arguments, messages and exit codes
Distribution imagesMicrosoft’s WSL distribution list, .wsl imagesThe same list and images, arm64 variants, unmodified
ArchitectureOne shared utility VM, per-distribution namespacesThe same
Per-distribution settings/etc/wsl.conf/etc/wsl.conf, or /etc/msl.conf if present (supported keys below)
VM settings.wslconfig~/.mslconfig, same keys; a .wslconfig can be copied as is
systemdYesYes, with [boot] systemd=true
Host files in Linux/mnt/c, /mnt/d/mnt/macos
Linux files on the host\\wsl.localhost\<distro> in File Explorer~/.msl/distros/<distro> and Finder’s Locations, while the VM runs
Path conversion, environmentwslpath, WSLENV, WSL_DISTRO_NAMEmslpath, MSLENV, MSL_DISTRO_NAME
Running host programs from LinuxYes (notepad.exe)No, by design
NetworkingNAT, or mirroredNAT only
localhost forwardingYesYes, IPv4 and IPv6
DNS through the hostdnsTunnelingYes, through macOS’s resolver
DisksOne ext4.vhdx per distributionOne ext4.img per distribution: raw ext4, not VHDX
Nested virtualizationnestedVirtualizationThe same, on a Mac with an M3 chip or later
Memory returned to the host while runningYes (autoMemoryReclaim)No, only when the VM stops
GUI apps (WSLg), GPUYesNo
USB devicesWith usbipd-winNo; disk images only (msl --mount)
x86_64 distributionsNativeNot yet
WSL 1YesNo; every distribution is version 2
JSON outputNo--json on --list, --status and --version

Distributions and wsl.conf

MSL runs the images from Microsoft’s WSL distribution list, which is what msl --list --online shows. It uses the arm64 variants, and runs each image’s own first-run setup, including its wsl-distribution.conf. Ubuntu 26.04 and 24.04, and Debian 13, are tested. The only file MSL adds to an image is the /usr/bin/mslpath link.

Some first-run scripts print Windows wording, such as “Provisioning the new WSL instance”. That’s their stock text; MSL skips the steps that need Windows.

MSL reads /etc/msl.conf, falling back to /etc/wsl.conf. It supports these keys:

SectionKeys
[boot]systemd, command
[user]default
[automount]enabled, root, mountFsTab
[network]hostname, generateHosts, generateResolvConf

[interop] is read and ignored. See Advanced settings configuration.

No interop with macOS programs

WSL can run Windows programs from Linux, and puts Windows directories on Linux’s PATH. MSL never runs macOS programs from Linux and never adds macOS paths to PATH. Build tools such as npm, node-gyp and configure therefore find only Linux toolchains, and build output is always Linux, even under /mnt/macos. WSL detection stays off, so tools don’t assume Windows interop.

Disks

As in WSL, each distribution has its own sparse disk, and --manage --move, --manage --resize, --export --vhd, --import --vhd and --import-in-place work. The differences:

  • The disk is a raw ext4 image, ext4.img, not VHDX. Convert with qemu-img convert -O raw or -O vhdx.
  • Disks can’t be added to a running VM. A disk added while a distribution runs is mounted through the Mac file share until the VM restarts: slower, and fsync there doesn’t reach the SSD right away. See How disks are attached.
  • Up to 19 distribution disks are attached when the VM starts.
  • Distributions from MSL 0.1.11 or earlier stay on one shared disk, data.img, until you move them.

See Manage disk space.

Memory

Virtualization.framework doesn’t give memory back to macOS while the VM runs. Memory the distributions used goes back when the VM stops: 60 seconds after the last distribution stops, or at msl --shutdown. autoMemoryReclaim is accepted and has no effect.

Not available yet

  • x86_64-only distributions. msl --list --online leaves them out, and msl --install refuses them (#40).
  • GUI apps, GPU access and USB devices.
  • Mirrored networking.
  • Shrinking a disk.

Planned work is in the milestones.

Last updated on