Windows-Subsystem für Linux

Bedeutung des Windows-Subsystem für Linux

1. Einleitung

Das Windows Live Subsystem for Linux (WSL) ist eine Erweiterung von Microsoft, die das Ausführen von Linux-Scripten und Anwendungen in Windows ermöglicht. Dadurch kann während der Arbeit an einem Projekt zwischen den Tools und Möglichkeiten von Linux und Windows gewechselt werden. Damit wird ermöglicht Windows für den Einsatz bei der Entwicklung von Cross-Plattform Anwendungen einzusetzen. Das WSL ist besonders für Entwickler interessant, da die Ausführung hauptsächlich für Kommandozeilen Verarbeitung optimiert ist.

Grundlagen und Abgrenzung

Das WSL unter Windows nutzt die Virtualisierungstechnologie Hyper-V.

Virtualisierung
Die Virtualisierung allgemein beschreibt die Abstraktion physischer Hardware oder Software. So ermöglicht diese verschiedene Komponenten eines IT-Systems virtuell auf einem Hostsystem abzubilden. Die Virtualisierung wird in drei verschiedene Kategorien gruppiert, Hardware-, Software- und Netzwerk-Virtualisierung. Die Aufteilung in virtuelle Maschinen ermöglicht es, mehrere Gastsysteme auf einer physischen Maschine zu betreiben. Netzwerke können ebenfalls virtuell aufgebaut werden, um eine Kommunikation zwischen den einzelnen Systemen herzustellen.
Die physische Hardware, auch Hostsystem genannt, auf welchem die Software ausgeführt wird, bildet die Grundlage für eine Virtualisierungsumgebung. Die virtuelle Maschine wird auch als Gastsystem bezeichnet, diese wird durch die Virtualisierungssoftware bereitgestellt.

Containervirtualisierung
 Im Vergleich zur soeben beschriebenen Virtualisierung, ist ein Betrieb der Containervirtualisierung mit weniger Ressourcen realisierbar. Im Gegensatz wird bei virtuellen Maschinen wie VirtualBox oder Hyper-V, vollständige Betriebssysteme mit fest zugeordneten Ressourcen und eigener grafischer Oberfläche ausgeführt werden.
Bei Containerdiensten wie Docker oder Podman wird ein isolierter Bereich im Hostsystem genutzt. Dadurch werden weniger Ressourcen benötigt, aber die Container sind auf den Kernel des Hostsystems beschränkt. Der genannte Vorteil von Containern kann aber auch Nachteile darstellen. So können Softwareinkompatibilität und Sicherheitslücken entstehen. Die fehlende Isolierung zum Host-Betriebssystem stellt dann einen Angriffsvektor dar.

Hypervisor

Die Managementsoftware für virtuelle Maschinen wird Hypervisor genannt. In der Software können verschiedene virtuelle Maschinen erstellt und verwaltet werden. Also Lösungen dafür existiert in Linux die KVM (Kernel-based Virtual Machine) und als Microsoft Derivat unter Windows Hyper-V. Hyper-V ist die im Windows-Kernel integrierte Virtualisierungslösung. Diese Virtualisierungslösungen sind vom Typ 1, was bedeutet, dass sie auf Kernel Ebene ausgeführt werden. Als Typ 2 werden Virtualisierungslösungen bezeichnet, die auf Nutzer-Ebene ausgeführt werden. Der Unterschied zwischen den beiden Typen ist, dass Typ 2 nur Treiber aus der Kernelebene laden, um ausgeführt zu werden. Softwarelösungen wie VirtualBox oder VMWare sind Beispiele für Typ 2.

Architektur – Version 1 & 2

Das WSL ist eine Windowskomponente und wurde mit der Windows 10 Version 1607 ausgeliefert.
Mit der neuen Version zwei der WSL, basiert diese auf einem Linux Kernel, integriert in den Windows NT Kernel.
Erstmalig wurde die zweite Version mit der Windows 10 Version 2004 veröffentlicht.

  • WSL 1:
    Die erste Version der WSL (Windows-Subsystem for Linux) basiert auf einer binären Übersetzungsschicht. Linux Anwendungen der WSL1 werden in Pico Prozessen, kleine virtuelle Bereiche im Nutzerbereich, ausgeführt. Der LxCore.sys Provider simuliert die Linux Umgebung im virtuellen Bereich und überführt die Linux Systemaufrufe. Diese Pico Prozesse und Übersetzung sind sehr ressourcenschonend und ermöglichen eine schnelle Ausführung. Zudem können sie genutzt werden, um diverse Betriebssysteme zu simulieren. Microsoft hat bereits dieses Verfahren genutzt, um Legacy Anwendungen unter Windows 10 IoT auszuführen oder den MS SQL Server unter Linux zu betreiben. Der LxssManager ist für die Verwaltung der WSL1 verantwortlich. Als Dienstleister für den LxCore leitet er die Systemaufrufe an den LxCore weiter, zeichnet Laufzeitinformationen auf und stellt die Integrität der WSL Distribution sicher. Der Ansatz dieser Systemcall Übersetzung zwischen Linux und Windows ist eine logische Schlussfolgerung gewesen, da der Windows NT und Linux Kernel ähnlich aufgebaut sind. Beide waren anfangs designt, um mit dem POSIX Standard kompatibel zu sein. Dafür bieten beide unterschiedliche Ausführungsvarianten durch einen privilegierten Kernelmodus und einen unprivilegierten Benutzermodus. Unabhängig davon, dass die Linux- und Windows Kernelarchitektur durch konkrete Implementierungsunterschiede voneinander abweichen, basieren beide auf der Operationssystemtheorie der 90er Jahre.

    WSL1 Architektur
    WSL1 Architektur
  • WSL 2:
    Im Windows Subsystem for Linux 2 implementiert Microsoft einen vollständigen Linux Kernel. Die Herausforderung war alle möglichen Systemaufrufe Linux zu übersetzen. Dieser Kernel läuft in einer leichtgewichtigen Virtualisierungsplattform, basierend auf Hyper-V. Vorteil dieser Lösung ist, dass es keiner Übersetzung der Systemaufrufe mehr bedarf. Somit ist das Ausführen von Linux-Anwendungen ohne Anpassung der Systemaufrufe möglich.

WSL2 Architektur
WSL2 Architektur

 

Installation und Benutzung

Für die Installation der WSL gibt es zwei grundlegende Möglichkeiten. Die unterschiedlichen verfügbaren Linuxdistributionen können entweder über den Microsoft Store oder mithilfe der PowerShell installiert werden. Beide Wege werden in diesem Blog kurz beschrieben. Dabei bietet die Verwendung der PowerShell die Möglichkeit, erweiterte Konfigurationen vorzunehmen. Insbesondere ist hier zu nennen, dass über die PowerShell zwischen der WSL1 und WSL2 gewechselt werden kann. Bei der Verwendung von älteren Windows-Builds kann es sein, dass die hier beschriebenen Methoden nicht funktionieren. In den meisten Fällen lässt sich das WSL dann dennoch mithilfe der PowerShell installieren. Die dafür notwendige Anleitung ist für diesen Blog zu lang, kann hier eingesehen werden.

Installation über den Store

1. Wenn bisher noch keine Distribution verwendet wurde, muss zunächst das Windows-Feature WSL aktiviert werden.
2. Dafür zunächst die Systemsteuerung öffnen und den Punkt „Programme“ auswählen.
3. Dann unter „Programme und Features“ den Punkt Windows-Features aktivieren oder deaktivieren auswählen (Dafür werden
Administratorrechte benötigt).


4. In dem neuen Fenster ganz nach unten scrollen und dort, falls nicht vorhanden, den Haken bei „Windows-Subsystem für
Linux“ setzen. Danach muss der Rechner neu gestartet werden.

5. Nach dem Neustart, den Microsoft Store öffnen, nach der gewünschten Distribution suchen und installieren.
6. Nach der Installation kann diese geöffnet werden (Dafür einfach die App ausführen, die den gleichen Namen wie die
Distribution hat).
7. Beim erstmaligen Öffnen muss zunächst einen Moment gewartet werden, bis die Einrichtung abgeschlossen ist und
anschließend ein Benutzername und ein Passwort vergeben werden.

Installation über die PowerShell

1. Zunächst muss eine Powershell mit erhöhten Rechten (Ausführen als Administrator) geöffnet werden.
2. In dieser kann mithilfe des Befehls  wsl --list --online
eine Liste aller aktuell verfügbaren Distributionen aufgerufen werden.

3. Über den Befehl  wsl --list -d <distribution-name> kann die entsprechende Distribution installiert werden. Anschließend muss der Rechner neugestartet werden.
4. Nach dem Neustart vervollständig sich das Setup automatisch, und es kann direkt ein neues Benutzerkonto angelegt werden.

Nach der Installation kann für jede einzelne Distribution festgelegt werden, welche Version des WSL genutzt werden soll um sie auszuführen. Dafür kann der Befehl

wsl --set-version <distribution-name> <versionNumber>

verwendet werden. Am Ende beider Einrichtungen sollte das Subsystem im Terminal wie in folgender Abbildung angezeigt werden:

In beiden Fällen ist die Installation innerhalb weniger Minuten erledigt. Wichtig ist, dass beide Wege Administratorrechte benötigen. Zudem wird eventuell Zugang zum BIOS benötigt, da (zumindest bei Verwendung der WSL2) die Virtualisierung aktiviert werden muss. Diese Voraussetzung sollten, insbesondere bei geplanter Installation auf Unternehmens / Organisationsgeräten.

Benutzung

Einmal installiert fühlt sich das WSL zunächst an, wie ein Linux auf das per SSH zugegriffen wird, eine einfache Konsole, nichts weiter. In dem Tool steckt jedoch einiges mehr. Zunächst einmal ist die Terminal Ansicht nicht die einzige mögliche Ansicht. Denn auch wenn das WSL zunächst einmal nur ein Terminal ist und keinen klassichen Desktop bereitstellt, lassen sich dennoch einige Anwendung nicht nur im Terminal, sondern auch mit einer GUI starten. Dies funktioniert jedoch ausschließlich mit Distributionen, die mit der WSL2 Version laufen. Unter diesen Vorraussetzung können entsprechende Apps, wie beispielsweise Gimp, Firefox, Gedit, die X11-Apps und einige weitere Apps mit einer GUI ausgeführt werden.

Insbesondere auch im Vergleich zur klassischen VM, ist der Austausch von Daten mit dem Hostsystem sehr einfach. Dafür gibt es zwei einfache Wege. Innerhalb des Hostsystems ist die Ordnerstruktur der Distribution direkt im Windowsexplorer zu finden. Bei Installation wurde im linken Menü der neue Eintrag Linux angelegt, unterhalb dessen die einzelnen Installationen als Ordner nutzbar sind.


Aber auch aus der WSL selbst kann einfach auf die Daten aus dem Hostsystem zugegriffen werden. Dafür navigiert man in
das /mnt/ Verzeichnis und findet dort alle Festplatten und darunterliegende Ordnerstrukturen.

Ein Nachteil der klassischen VMs bleibt auch bei der Nutzung des WSL bestehen: die Nutzung von USB-Geräten innerhalb der
WSL nicht proprietär unterstützt und führt so ähnlich wie bei klassischen VMs potenziell zu Problemen.
Dadurch geht eine einfache Testbarkeit von neuer Hardware verloren, so können z.B. verschiedene Mikrocontroller nicht
einfach programmiert werden. Dennoch gibt es auch hier Lösungen aus der Community.

Es gibt jedoch noch eine weitere, sehr spannende Möglichkeit, das WSL einzusetzen. Durch sie ist es auch möglich, einzelne Linux Befehle direkt in der PowerShell auszuführen. Dadurch steht man nicht mehr vor dem Problem, dass einem bestimmte, aus Linux bekannte, Befehle unter Windows fehlen. Außerdem kann das WSL auf diesem Weg noch nahtloser in den Workflow integriert werden, da Anwendungen auch direkt aus der PowerShell für Linux kompiliert und getestet werden können. Um dieses Feature zu nutzen, muss in einem PowerShell-Fenster nur wsl eingegeben werden, direkt dahinter kann ein beliebiger Befehl der Linuxshell geschrieben werden. Dieser wird dann im aktuellen Verzeichnis ausgeführt. Für den ersten Befehl kann eine geringe Verzögerung auftreten, da die entsprechenden Dienste zunächst gestartet werden müssen. Wenn diese jedoch erst einmal gestartet sind, ist ein nahezu verzögerungsfreies arbeiten mit dem WSL arbeiten.

s
Auf diesem Weg is es beispielsweise auch möglich, Datenträger, die mit einem Linux File System arbeiten, unter Windows zu lesen.

Ähnlich wie bei klassischen VMs ist es auch bei den einzelnen WSL Instanzen sehr einfach möglich, Sicherungen von diese zu einem bestimmten Zeitpunkt zu erstellen. Dafür bringt das WSL einen Import/Export Mechanismus mit. Soll eine Sicherung erstellt werden, muss in einer PowerShell der Export Befehl ausgeführt werden:

wsl --export <Distribution Name> <Backupname.tar>

Die so erzeugte Sicherung (Tar-Archiv) kann zu einen späteren Zeitpunkt wieder importiert werden:

wsl --import <Distribution Name> <WSLInstallLocation>
<PathToBackup\Backupname.tar>


Möchte man eine tatsächliche Wiederherstellung auf den gleichen Namen vornehmen, muss der Nutzer die alte Version zunächst ausgetragen und anschließend die Sicherung auf den gleichen Distributionsnamen importieren. Genauso gut kann die Sicherung jedoch auch auf jeden anderen beliebigen Rechner importiert werden, der das WSL installiert hat. Dadurch ist es beispielsweise auch möglich, eine Distribution zu konfigurieren und dann auf viele weitere Rechner zu verteilen.

Anwendungsfälle

Windows Subsystem for Linux wurde in erster Linie für Softwareentwickler als Zielgruppe entwickelt. Das Ziel hierbei
ist die Entwicklung unter, und für, Linux zu ermöglichen. Gleichzeitig können durch WSL Linux-spezifische Werkzeuge, wie
bspw. sed und awk verwendet werden, sowie Programmiersprachen, die unter Linux vorrangig unterstützt
werden, wie bspw. Ruby oder Python.

Vorteile

Aktuell dominiert Linux den Marktanteil an Betriebssystemen, die für Server genutzt werden. Die Zahl der aus dem Internet erreichbaren Server, welche Unix oder Unix-ähnliche Betriebssysteme nutzen, beträgt 80.1 % (Stand 2022). Ein wesentlicher Vorteil in der Softwareentwicklung ist damit die Angleichung der Entwicklungs- und Produktivumgebung, soweit beide Linux nutzen. Probleme, welche nur auf einem bestimmten Betriebssystem auftreten und auf einem anderen nicht reproduzierbar sind, können dadurch leichter gefunden und besser verhindert werden.
Microsoft selbst unterstützt die Nutzung von WSL in der Entwicklung in ihrem Quellcode-Editor Visual Studio Code. Dort lässt sich mittels der Erweiterung ms-vscode-remote.remote-wsl Quellcode direkt aus dem Editor heraus in einer Linux Umgebung unter WSL ausführen. Hierbei wird eine persistente Verbindung zu einer WSL Instanz auf dem System hergestellt. Alle unter Linux installierten Programme und Werkzeuge können anschließend über die eingebaute Kommandozeile aufgerufen werden. Aber auch Funktionen der Entwicklungsumgebung wie die Verwendung eines Debuggers für das Setzen von breakpoints (zu dt. Haltepunkten) werden unterstützt.

Ein weiterer Vorteil ist die Einfachheit und Verfügbarkeit. WSL ist bereits in Windows integriert und kann in wenigen Schritten aktiviert werden. Eine Virtualisierung über Drittsoftware, wie bspw. mit Oracle VM VirtualBox oder VMware, setzt eine zusätzliche Installation und Konfiguration voraus. Hinzu kommen Lizenzgebühren für Support und zusätzliche Funktionen. WSL hingegen wird direkt von Microsoft entwickelt und steht unter Windows 10 und 11 kostenlos zur Verfügung.

Im Hinblick auf die Performance bietet WSL 2 einen weiteren Vorteil. Da es sich dabei um einen Hypervisor vom Typ 1 handelt, ist diese besser als bei der bereits erwähnten Drittsoftware, welche innerhalb der Softwareschicht des Betriebssystems läuft und somit vom Hypervisor Typ 2 ist. Da WSL 2 speziell für die Virtualisierung von Linux entwickelt und optimiert wurde, sollte im Optimalfall sollte die Performance gleich oder besser sein als unter Verwendung von Microsoft Hyper-V als Hypervisor vom Typ 1. Eindeutige und aussagekräftige Benchmarks hierzu gibt es
jedoch noch keine.

Nachteile

Die Integration von WSL bei der Softwareentwicklung im Hinblick auf die Editoren, welche von Microsoft selbst stammen, wie Visual Studio und Visual Studio Code, ist unkompliziert. Die Verwendung anderer Editoren und Integrated development environments (IDE, zu dt. integrierte Entwicklungsumgebung) ist jedoch gegebenenfalls nicht
ohne Anpassungen möglich. Für die Verwendung von IntelliJ IDEA, einer IDE für die Programmiersprachen Java und Kotlin, ist der Nutzer für das Debugging und den Zugriff auf eine ausgeführte Anwendung in der WSL, auf Anpassungen bspw. eine Anpassung der Firewall unter Windows notwendig.

Ein weiterer Nachteil ist die Virtualisierung selbst. Im Gegensatz zu einer Installation von Linux auf einer separaten Partition oder einem anderen Speicher sind hierbei kein wahrer low-level access (zu dt. Zugriff auf niederer Ebene) möglich. Grafische Benutzeroberflächen beispielsweise laufen nur über einen virtualisierten Grafikprozessor. Für die Sicherung der Linux Dateien werden Virtual Hard Disk (VHD)(zu dt. virtuelle Festplatte) verwendet. Ein wesentlicher Vorteil von WSL ist die Interoperabilität von Windows und Linux. Das Plan 9 Filesystem Protocol (9P) spielt dabei die Rolle als Mittelsmann zwischen den verschiedenen Dateisystemen der Betriebssysteme, was für zusätzliche Komplexität sorgt, die jedoch für diesen Zweck erforderlich ist.
Eine weitere Besonderheit, die mit WSL 2 eingeführt wurde, ist die Benutzung eines modifizierten Kernels, welcher auf der Long-term support (LTS, zu dt. Langzeitsupport) Version des Linux Kernels basiert. Features aus dem stable (zu dt. stabilem) Zweig des Kernels müssen hierbei erst in die LTS Version Einzug finden, um anschließend in den modifizierten Kernel von WSL 2 hinzugefügt werden.

Alternativen

Microsoft Hyper-V
ist ein von Microsoft selbst entwickeltes Produkt zur Virtualisierung von Betriebssystemen. Es ist mit Windows 10 unter den Lizenzen Pro, Enterprise und Education verfügbar. Es ermöglicht Hardware-Virtualisierung und läuft nicht unter dem Betriebssystem Windows selbst und kann daher als Hypervisor Typ 1 bezeichnet werden. Eine wichtige Besonderheit ist, dass sowohl das Host-System als auch die virtualisierten Systeme hierbei auf einer Virtualisierungsebene von Hyper-V laufen. Das Host-System hat hierbei jedoch direkten Zugriff auf die Hardware, alle anderen Systeme nutzen virtuelle Festplatten, virtuelle switches, etc.

Native Linux Installation
beschreibt die Installation einer Linux Distribution auf einem Speichermedium oder einer Partition. Durch die beständige Erweiterung des Linux Kernels und den darin enthaltenen Treibern kann Linux mit fast sämtlicher Hardware betrieben werden. Durch Modifikationen des Kernels und angepassten Distribution ist sogar ein Betrieb in eingebetteten Systemen mit minimaler Hardware möglich, so z.B. in Internet of Things(IOT, zu dt. Internet der Dinge) Geräten.

Drittsoftware
Bei Drittanbietersoftware kann für die Virtualisierung auf der Softwareschicht des Betriebssystems genutzt werden. Diese Technologie wird auch als Hypervisor Typ 2 bezeichnet. Zu den größten Herstellern nach Marktanteil in diesem IT-Sektor zählen VMware, Citrix Systems und Oracle. Virtuelle Maschinen werden über die entsprechende Software erstellt, konfiguriert und gestartet. Zusätzlich bietet diese meist zusätzliche Funktionen, wie beispielsweise die Erstellung von snapshots (zu dt. Schnappschüssen), um den aktuellen Zustand der virtuellen Maschine zu speichern.

Quellen