# Windows-Subsystem für Linux

Das Windows-Subsystem für Linux bzw. im englischen Originaltitel Windows Subsystem for Linux, kurz WSL, ist eine in Windows 10 und Nachfolgeversionen integrierte Kompatibilitätsschicht zum Ausführen von Linux-Executables im ELF-Format. Microsoft und Canonical gingen hierzu eine Partnerschaft zu dem Zweck ein, in Windows ein Ubuntu-Image (ursprünglich 14.04 „Trusty Tahr“) herunterladen und installieren zu können. Die in diesem Image enthaltenen Anwendungen können mit WSL – im Gegensatz zum Vorgänger Windows Services for UNIX (SFU) – nativ unter Windows ausgeführt werden.
WSL 1 beinhaltet eine Linux-kompatible Kernelschnittstelle, die von Microsoft entwickelt worden ist, selbst aber keinen Code des Linux-Kernels enthält. Von Ubuntu bereitgestellte ausführbare Dateien laufen im User Mode darauf.
Der Nachfolger WSL 2 setzt stattdessen auf einen Virtualisierungsansatz mittels Hyper-V. Dies bietet neben einer besseren Performance auch eine vollständige Kompatibilität von Systemaufrufen, da hier ein vollständiger Linux-Kernel zum Einsatz kommt. Dies bringt allerdings die üblichen Nachteile eines Typ-1-Hypervisors mit sich. Zum einen die Tatsache, dass das Host-Betriebssystem anschließend selbst virtualisiert läuft (erhöhte Latenzzeiten könnten z. B. Echtzeitanwendungen beeinträchtigen). Zum anderen kann es Probleme geben, anschließend andere Virtualisierungsprodukte parallel zu betreiben.
Am 17. November 2022 veröffentlichte Microsoft die Version 1.0.0 des über den Microsoft Store verfügbaren Software-Pakets für Windows 10 und 11. Diese Versionsnummer hat allerdings nichts mit WSL 1 oder 2 zu tun, denn mit dem Windows-Subsystem für Linux lassen sich beide Varianten nutzen – WSL 2 ist allerdings die Voreinstellung.

## WSL 1

Das WSL-1-Subsystem führt nicht alle Linux-Programme aus, davon betroffen sind insbesondere solche, die eine grafische Benutzeroberfläche (GUI) voraussetzen oder Kernelfunktionen nutzen, die von der WSL-Kernelschnittstelle nicht implementiert worden sind. GUI-Programme können aber einen externen X-Server wie beispielsweise VcXsrv oder Xming verwenden. WSL benutzt weniger Ressourcen als eine komplette virtuelle Maschine und dürfte der direkteste Weg sein, Linux-Software auf einem Windows-System laufen lassen zu können. Linux- und Windows-Anwendungen können so beispielsweise in einem Skript nacheinander an den gleichen Dateien Manipulationen vornehmen.
Das Subsystem hat seinen Ursprung im nicht freigegebenen „Project Astoria“, das Android-Anwendungen auf Windows 10 Mobile ermöglichen sollte. WSL wurde mit Windows 10 Insider Preview Build 14316 veröffentlicht.
Windows Subsystem for Linux ist nur auf 64-bit-Versionen von Windows 10 und Nachfolgeversionen verfügbar und kann seit Windows 10 Anniversary Update und neueren Versionen aktiviert werden.
In einem Geschwindigkeitsvergleich mit Windows 10 und nativen Versionen von Ubuntu, Suse, Debian und Intel Clear Linux fanden sich die WSL-Varianten nur wenig hinter den Besten.
Dies wurde für das zukünftige Windows 10-2004 dev 20008 in allen Modi in Relation zu den originalen Linux-Versionen nochmal erheblich verbessert.
WSL wurde nach einer Vorschau-Phase auf Ende 2022 generell freigegeben.

## WSL 2

Das neue, mit Windows 10 Insider-Preview Build 18917 Mitte 2019 vorgestellte komplett überarbeitete Subsystem bietet gegenüber WSL 1 wesentliche Vorteile. Neben der hinzugekommenen Unterstützung für Linux-Docker-Images nutzt WSL 2 nun eine Lightweight utility VM getaufte Virtuelle Maschine, die einen einzigen Linux-Kernel nutzt, unter dem dann die einzelnen Linux-Instanzen im User Mode aufsetzen. Der Kernel selbst wird im Rahmen des Windows-10-Update regelmäßig aktualisiert. Mit der neuen VM wurde WSL nicht nur schneller, die Technik startet den Linux-Kernel auch viel schneller, spart zudem Arbeitsspeicher, weil immer nur ein einziger Kernel geladen ist, egal wie viele virtualisierte Linux-Systeme gerade laufen, und wird automatisch wieder deaktiviert, sobald es nicht mehr benötigt wird.
WSL 2 ist auf Windows 10 ab Version 1903 verfügbar.
Microsoft entwickelt für WSL 2 Treiber und APIs für OpenGL, OpenCL, CUDA, Vulkan für gute Performance in Verbindung mit der Grafikkarte und dessen Windows-10-Treibern. d3d12 wird als Mesa-3D-Treiber für OpenGL und OpenCL zu der Direct3D 12-API entwickelt. In Mesa 3D 21.0 im Januar 2021 steht OpenGL 3.3 in d3d12 in Mesa zur Verfügung. OpenCL 1.2 ist ebenfalls ein Ziel in d3d12. OpenGL ES 3.1 wird ab Mesa 22.0 mit Windows 10 21H2 unterstützt. Mit Mesa 22.1 wird OpenGL 4.2+ unterstützt. OpenGL 4.3 und 4.4 werden schon zu 90 % unterstützt. Aktueller Status der Entwicklung kann in Mesamatrix eingesehen werden.
In Windows 10 21H1 und 21H2 sind hier signifikante Verbesserungen zu erwarten.
WSL 2 im Jahr 2020 erreicht mit Windows 10 etwa 87 % in einem ausführlichen Benchmark mit 172 Tests. WSL erreicht wegen der Schwäche bei I/O etwa 2/3 der nativen Linux-Leistung. 39 % der Tests wurden sogar von WSL oder WSL 2 gewonnen. WSL 2 mit Ubuntu erreicht 2021 in einen weiteren Benchmark unter Windows 11 nahezu mit 95 % die Performance von Ubuntu 20.04 LTS.

## GUI App Support in WSL2

GUI App Support With Windows Subsystem For Linux (WSLg) wird in Version 21H1 als Preview verfügbar sein. Microsoft stellt damit ein eigenes GUI zur Verfügung. Mesa 21.x ist dafür Voraussetzung im dazugehörigen Linux.

## Nutzung

WSL kann, unabhängig von der Version, in jeder Konsole mit dem Befehl wsl genutzt werden. Das funktioniert sowohl in der (älteren) „Eingabeaufforderung“ (cmd.exe) als auch in der PowerShell. Bei WSL 2 dauert der erste Start einige Sekunden, da im Hintergrund eine virtuelle Maschine mit GNU/Linux gestartet wird; nachfolgende Aufrufe sind daher schneller. Das Windows Terminal ist noch nicht unter allen Windows-Versionen vorinstalliert, erleichtert die Bedienung jedoch beispielsweise durch die Organisation von WSL-Instanzen über Tabs.

## Ähnliche Software

* Microsoft Windows Services for UNIX war das inzwischen eingestellte Vorgängerprojekt von WSL.
* Cygwin ist eine Open-Source POSIX-Emulation für Windows; mit MSYS2 wird Cygwin um die native Unterstützung von Unix-Code unter Windows abgewandelt.
* Wine ist eine Kompatibilitätsschicht zum Ausführen von Windows-Programmen unter anderem auf Linux.
* DOS Subsystem for Linux (DSL) ist eine Hommage an WSL; DSL führt unter DOS (MS-DOS und FreeDOS wurden getestet) Linux-Programme aus.