Windows Subsystem für Linux und Android in Windows 11
Guter Gastgeber
von Dr. Christian Knermann
Veröffentlicht in Ausgabe 05/2022 - PRAXIS
Microsoft baut das Windows Subsystem für Linux kontinuierlich aus. Unter Windows 11 kann es ab Werk grafische Anwendungen ausführen und mit dem Windows Subsystem für Android steht eine weiterere Variante in den Startlöchern. Unser Workshop fasst den Stand der Technik zusammen und hilft beim Einstieg.
Dass sich hochranginge Microsoft-Mitarbeiter öffentlich abwertend über Linux äußerten, ist glücklicherweise längst Geschichte. Seitdem hat Redmond einen Kurswechsel um 180 Grad vollzogen und stellt eindrucksvoll unter Beweis, dass sein Engagement für die Entwicklung von Open-Source-Software alles andere als ein Lippenbekenntnis ist. So ist GitHub, die Plattform für kollaborative Versionsverwaltung, bereits seit 2018 Teil des Konzerns und bietet zahllosen freien Projekten eine Heimat. Microsoft betreibt die Plattform jedoch nicht nur, sondern trägt selbst als einer der weltweit größten Open-Source-Anbieter aktiv seinen Teil zu vielen Projekten bei.
Darüber hinaus hat Microsoft eine eigene Linux-Distribution namens "CBL-Mariner" entwickelt, wobei das Akronym CBL für "Common Base Linux" steht – zu finden natürlich auf GitHub [1]. CBL-Mariner tritt allerdings keineswegs in Konkurrenz zu bereits etablierten Linux-Dis- tributionen für allgemeine Einsatzzwecke. Microsoft verwendet seine hauseigene Distribution vor allem selbst und verfolgt dabei einen Ansatz, der am ehesten mit Fedora CoreOS vergleichbar ist. Denn CBL-Mariner ist als minimalistisch ausgestattete Distribution primär auf die Ausführung von Containern ausgerichtet und bildet damit die Basis für die Azure Kubernetes Services sowie weitere Dienste in der Azure-Cloud. Doch CBL-Mariner ist nicht nur für Microsofts Cloudaktivitäten relevant, sondern verrichtet inzwischen auch unter der Haube des Windows Subsystems für Linux (WSL) seinen Dienst.
Grafische Linux-Apps nutzen
Mit der zweiten Version des Windows Subsystem für Linux (WSL) stellte Microsoft das Subsystem auf ein komplett neues Fundament. Die Basis bildet seitdem das Windows-Feature "Plattform für virtuelle Computer", das auch als Grundlage für Hyper-V dient. Anders als Hyper-V setzt WSL jedoch nicht auf Vollvirtualisierung, sondern auf Container. Das bedeutet konkret, dass nicht jede in WSL installierte Linux-Distribution in einer vollständigen virtuellen Maschine läuft, sondern sich alle Distributionen einen gemeinsamen Kernel teilen. Der Vorteil ist, dass WSL im Vergleich zu Hyper-V mit deutlich weniger Ressourcen auskommt.
Dass sich hochranginge Microsoft-Mitarbeiter öffentlich abwertend über Linux äußerten, ist glücklicherweise längst Geschichte. Seitdem hat Redmond einen Kurswechsel um 180 Grad vollzogen und stellt eindrucksvoll unter Beweis, dass sein Engagement für die Entwicklung von Open-Source-Software alles andere als ein Lippenbekenntnis ist. So ist GitHub, die Plattform für kollaborative Versionsverwaltung, bereits seit 2018 Teil des Konzerns und bietet zahllosen freien Projekten eine Heimat. Microsoft betreibt die Plattform jedoch nicht nur, sondern trägt selbst als einer der weltweit größten Open-Source-Anbieter aktiv seinen Teil zu vielen Projekten bei.
Darüber hinaus hat Microsoft eine eigene Linux-Distribution namens "CBL-Mariner" entwickelt, wobei das Akronym CBL für "Common Base Linux" steht – zu finden natürlich auf GitHub [1]. CBL-Mariner tritt allerdings keineswegs in Konkurrenz zu bereits etablierten Linux-Dis- tributionen für allgemeine Einsatzzwecke. Microsoft verwendet seine hauseigene Distribution vor allem selbst und verfolgt dabei einen Ansatz, der am ehesten mit Fedora CoreOS vergleichbar ist. Denn CBL-Mariner ist als minimalistisch ausgestattete Distribution primär auf die Ausführung von Containern ausgerichtet und bildet damit die Basis für die Azure Kubernetes Services sowie weitere Dienste in der Azure-Cloud. Doch CBL-Mariner ist nicht nur für Microsofts Cloudaktivitäten relevant, sondern verrichtet inzwischen auch unter der Haube des Windows Subsystems für Linux (WSL) seinen Dienst.
Grafische Linux-Apps nutzen
Mit der zweiten Version des Windows Subsystem für Linux (WSL) stellte Microsoft das Subsystem auf ein komplett neues Fundament. Die Basis bildet seitdem das Windows-Feature "Plattform für virtuelle Computer", das auch als Grundlage für Hyper-V dient. Anders als Hyper-V setzt WSL jedoch nicht auf Vollvirtualisierung, sondern auf Container. Das bedeutet konkret, dass nicht jede in WSL installierte Linux-Distribution in einer vollständigen virtuellen Maschine läuft, sondern sich alle Distributionen einen gemeinsamen Kernel teilen. Der Vorteil ist, dass WSL im Vergleich zu Hyper-V mit deutlich weniger Ressourcen auskommt.
Bei unserem letzten Besuch auf dieser Baustelle fehlten allerdings noch einige Anbauten und wir mussten uns mit einem X-Server unter Windows behelfen, um grafische Linux-Anwendungen auszuführen [2]. Die native Unterstützung für X11- und Wayland-Apps fand sich zunächst nur als Preview im Rahmen des Windows-Insider-Programms. Mit der Einführung von Windows 11 hat Microsoft das "Windows Subsystem für Linux-GUI" (WSLg) finalisiert [3]. Die Basis hierfür bildet die WSLg-System-Distribution auf Basis von CBL-Mariner (Bild 1). Darin läuft mit Weston die Referenz-implementierung des Servers für das Remote-Display-Protokoll Wayland, die Microsoft für den Einsatz mit WSL angepasst und für die Darstellung einzelner Applikationen statt ganzer Desktopumgebungen via RDP optimiert hat. Neben Wayland-Anwendungen kann WSLg auch klassische X11-Applikationen handhaben. Der zusätzliche "Pulse Audio Server" kümmert sich um die bidirektionale Übermittlung von Audiosignalen.
Von dieser auf den ersten Blick komplex erscheinenden Architektur bemerken Sie bei der praktischen Arbeit mit WSL nichts und der Ansatz bringt gleich mehrere Vorteile mit sich. So können die Anwendungen innerhalb Ihrer User-Distributionen, von denen Sie mehrere parallel installieren und ausführen dürfen, ohne Anpassungen ihre gewohnten Linux-Schnittstellen nutzen. Windows auf der anderen Seite greift per RDP darauf zu, ohne sich um die Implementierung von X11 oder Wayland kümmern zu müssen. Auf diesem Weg können Linux-Anwendungen auch die physischen GPUs des Hosts nutzen – sofern vorhanden. Davon profitieren nicht nur grafikintensive Applikationen, sondern auch solche, die GPUs etwa für Machine Learning (ML) oder Anwendungsfälle künstlicher Intelligenz (KI) benötigen. Microsoft hat dazu die Schnittstelle DirectX 12 mittels eines eigenen Kernel-Treibers auf Linux portiert [4].
Upgrade von Windows 10 auf 11
Microsoft hat WSLg allerdings exklusiv Windows 11 als jüngstem Spross der Familie vorbehalten und nicht auf Windows 10 zurückportiert. Die gute Nachricht: Sofern Sie ein für Windows 11 taugliches Endgerät Ihr Eigen nennen, können Sie gefahrlos aktualisieren. In unseren Tests überlebten bereits vorhandene Linux-Instanzen komplikationslos eine Upgrade-Installation von Windows 10 auf 11.
Stellen Sie nach einem Upgrade lediglich sicher, dass WSL auf dem neuesten Stand ist und auch Ihre Linux-Instanzen alle die zweite Version des Subsystems nutzen. Das bewerkstelligen Sie per Kommandozeile mit erhöhten Rechten und dem Befehl wsl --update. Anschließend listen Sie alle vorhandenen Linux-Distributionen mit wsl --list -v auf. Sollte sich darunter eine Distribution finden, die noch nicht auf Version 2 unterwegs ist, stellen Sie sie um:
wsl --set-version <Name der Distribution> 2
Zu guter Letzt starten Sie das Subsystem via wsl --shutdown neu.
Zwei Wege zur frischen Installation
Starten Sie stattdessen mit einer frischen Installation von Windows 11, auf der bislang noch kein WSL lief, führen zwei alternative Wege zum Ziel. Bevor Sie loslegen, sollten Sie zunächst sicherstellen, dass im BIOS Ihres Systems die Hardwarevirtualisierung aktiv ist. Das Setup von WSL prüft dies nicht und reagiert ansonsten beim Versuch, eine Linux-Distribution zu starten, mit einem wenig aussagekräftigen HEX-Code als Fehlermeldung. Die Hardwarevirtualisierung heißt je nach Hersteller des Prozessors "Intel VT-d/VT-x" oder "AMD IOMMU", kann sich davon abweichend je nach Computerfabrikat im BIOS aber auch unter anderen Begriffen oder in einem Submenü verstecken. Im Zweifelsfall konsultieren Sie die Dokumentation des Herstellers.
Ist die Hardwarevirtualisierung aktiv, öffnen Sie eine administrative Kommandozeile und gelangen mit nur einem Befehl zum fertigen WSL: wsl --install. Dieses Kommando nimmt Ihnen sämtliche Arbeit ab. Es installiert zunächst die nötigen Windows-Features, die "Plattform für virtuelle Computer" und das eigentliche "Windows-Subsystem für Linux", falls diese noch nicht vorhanden sind. Davon können Sie sich auch unter Windows 11 in der althergebrachten Systemsteuerung unter "Programme und Features / Windows-Features aktivieren oder deaktivieren" überzeugen. Dann lädt die Setuproutine als Standarddistribution die aktuelle LTS-Version von Ubuntu aus dem Microsoft Store. Bevorzugen Sie stattdessen eine andere Distribution, etwa das bei Forensikern beliebte Kali Linux, hilft:
wsl --install --distribution kali
Der Vorteil ist, dass dieser Befehl alle nötigen Schritte in einem Rutsch erledigt. Doch der Ansatz bringt auch einen Nachteil mit sich.
Bei der Installation per wsl.exe beziehen das Subsystem selbst und der Linux-Kernel Aktualisierungen zusammen mit dem Betriebssystem über den Windows-Update-Dienst. Dies ist jedoch nicht mehr der von Microsoft bevorzugte Weg. Stattdessen möchte Microsoft die Updates für WSL vom Betriebssystem entkoppeln und künftig über den Microsoft Store ausliefern [5]. Sie finden das WSL im Microsoft Store als "Windows Subsystem for Linux Preview" – doch keine Angst davor, dass Microsoft die App derzeit noch als Vorschau deklariert. Sie bringt Ihnen den identischen Funktionsumfang, nur eben nicht als Windows-Feature, sondern als moderne Store-App.
Im Gegensatz zum wsl-Kommando kümmert sich die Store-App jedoch leider nicht um die Abhängigkeiten. Ohne die Plattform für virtuelle Computer endet der Versuch, eine Linux-Distribution zu starten, mit einem Hex-Code-Fehler und dem Hinweis, dass ein erforderliches Feature nicht installiert ist. Daher müssen Sie Windows zunächst dieses Feature hinzufügen. Das erledigt wahlweise die Systemsteuerung oder eine Kommandozeile mit erhöhten Rechten und dem Befehl
Nach dem obligatorischen Neustart installieren Sie eine Linux-Distribution, wie etwa Ubuntu oder Kali Linux, aus dem Microsoft Store und finden diese anschließend im Startmenü wieder. Beim ersten Aufruf öffnet WSL zunächst eine Shell zur jeweiligen Linux-Instanz, initialisiert diese und fordert Sie auf, einen Benutzer nebst Passwort festzulegen. Dieser ist unabhängig von Ihrem Windows-Benutzerkonto und existiert nur innerhalb dieser Linux-Instanz.
Aktualisieren Sie Linux mit den gewohnten Shell-Kommandos und installieren Sie grafische Applikationen, wie den Gnome-Text-Editor oder auch den Webbrowser Mozilla Firefox:
sudo apt update
sudo apt upgrade
sudo apt install gedit -y
sudo apt install firefox -y
Anschließend können Sie sich davon überzeugen, dass grafische Anwendungen nicht nur aus der Shell heraus starten, sondern zusätzlich auch in Unterordnern pro Linux-Distribution im Startmenü erscheinen (Bild 2). WSL hat damit zu Google Chrome OS aufgeschlossen und integriert Linux-Apps nahtlos in die Windows-Oberfläche.
Der Dateiaustausch zwischen den beiden Welten funktioniert weiterhin bidirektional. Alle Windows-Laufwerke erreichen Sie in WSL unter Mount-Punkten wie "/mnt/c" und "/mnt/d". Unter Windows finden Sie die Root-Dateisysteme aller installierten Distributionen in Unterordnern der virtuellen Netzwerk-Freigabe "\\wsl$".
Wer grafische Werkzeuge benötigt, die nicht als native Anwendung für Windows existieren, oder ML-/AI-Anwendungsfälle mit der Zielplattform Linux entwickelt, hat mit WSL unter Windows 11 ein praktisches Werkzeug zur Hand.
Daemons mit Workarounds
Das Init-System systemd hat sich inzwischen als Quasi-Standard in den meisten Distributionen durchgesetzt. Leider muss WSL im Gegensatz zu einer ausgewachsenen Linux-VM jedoch immer noch ohne systemd und somit auch ohne übliche Befehle wie systemctl auskommen. Kommentare im Entwicklerforum der Distribution Ubuntu machen Hoffnung, dass systemd auch für WSL erscheinen könnte [6]. Bis zum Redaktionsschluss zeichnete sich aber noch nicht ab, ob und wann. Benötigen Sie ein klassisches Trio bestehend aus Webserver, Skript-Interpreter und Datenbank, wie etwa Nginx, PHP und MySQL und möchten deren Daemons automatisch starten, so gelangen Sie vorerst nur auf Umwegen zum Ziel. Um den Webserver Nginx mittels Shell-Skript zu starten, installieren Sie im ersten Schritt den Webserver:
sudo apt-get install -y nginx
Öffnen Sie dann die Konfiguration der Shell mittels nano ~/.bashrc. Am Ende der Datei ergänzen Sie die folgenden Zeilen:
# Start Nginx
sudo /etc/init.d/nginx start
Weiterhin sorgen Sie nun noch dafür, dass der Webserver automatisch startet, ohne zuvor ein Passwort zu fordern. Dies erledigen Sie mit sudo visudo. Am Ende dieser Konfiguration fügen Sie Folgendes ein:
# Start Nginx
%sudo ALL=NOPASSWD: /etc/init.d/nginx
Beim nächsten Start der Linux-Distribution wird auch der Webserver automatisch seine Arbeit aufnehmen. Am Beispiel MongoDB beschreibt Microsofts Online-Dokumentation einen alternativen Weg zur Integration von Datenbanken [7].
USB-Support per Netzwerk
Sie benötigen einen Smartcard-Leser oder entwickeln IoT-Anwendungen und möchten einen Mikrocontroller per USB konfigurieren? Dann werden Sie leider feststellen, dass WSL noch nicht auf direktem Weg mit unter Windows verbundenen USB-Geräten kommunizieren kann. Doch auch hier führt ein Spiel über Bande zum Ziel – und zwar mittels des Netzwerkprotokolls USB/IP. Früher mussten Sie dazu aufwändig den Linux-Kernel anpassen, unter Windows 11 beherrschen aktuelle Instanzen von WSL 2 ab Kernel-Version 5.10.60.1 aufwärts dies bereits von Haus aus.
Installieren Sie die jüngste Version von usbipd-win, wie auf der GitHub-Seite des Projekts beschrieben, per winget-Befehl oder als MSI-Paket [8]. Nun starten Sie eine Linux-Distribution und installieren auch dort die passenden Werkzeuge für USB/IP [9]:
Auf der Seite von Windows listen Sie in einer administrativen Kommandozeile sämtliche verfügbaren USB-Geräte auf und verbinden diese in die Linux-Umgebung:
usbipd wsl list
usbipd wsl attach --busid <ID>
Ein erneuter List-Befehl zeigt, dass das Gerät verbunden ist. Auf der Gegenseite unter Linux sollte das lsusb-Kommando dies bestätigen, wie unser Beispiel anhand eines Smartcard-Lesers demonstriert (Bild 3). Nach getaner Arbeit entkoppeln Sie das Gerät wieder mittels
usbipd wsl attach --busid <ID>
Auch für hardwarenahe Entwicklungen ist WSL folglich durchaus geeignet.
Ausblick auf das Subsystem für Android
Ganz ähnlich dem technischen Unterbau von WSL möchte Microsoft mit dem "Windows Subsystem für Android" (WSA) auch mobile Apps für Android unter Windows ausführen. Anders als WSL steckt WSA allerdings noch in den Kinderschuhen und hat es bislang nicht in die finale Version von Windows 11 geschafft. Weiterhin beschränkt sich das offizielle Angebot derzeit nur auf einige wenige Apps aus dem Amazon App Store und der funktioniert auch nur mit einem US-Account.
Microsoft plant, WSA erst mit der kommenden Windows 11 Version 2022 alias "Sun Valley 2" im Herbst dieses Jahres fertigzustellen. Eine Vorschau soll bereits früher bereitstehen, doch bis zum Redaktionsschluss beschränkte sich diese Aussicht auf eine eher vage Ankündigung in Microsofts Blog. Wenn Sie diese Ausgabe in Händen halten, ist die Vorabversion von WSA vielleicht auch hierzulande schon im Microsoft Store verfügbar, so dass Sie den folgenden Absatz überspringen können.
Auf Umwegen zum WSA
Sie können bereits vorab einen Blick auf WSA wagen und das sogar, ohne einen Beta-Build des Betriebssystems aus dem Windows-Insider-Programm installieren zu müssen. Nutzen Sie dazu den Online-Link-Generator für den Microsoft Store [10]. Im ersten Dropdown-Feld verwenden Sie als Suchkriterium die "ProductId". Suchen Sie nach der ID "9P3395VX9 1NR". In der Ergebnisliste scrollen Sie ganz nach unten bis zur Datei "MicrosoftCorporationII.WindowsSubsystemForAndroid…" mit einer Größe von über 1,2 GByte. Falls Ihr Browser sich darüber beschweren sollte, dass der Download nicht sicher sei, bestätigen Sie ausdrücklich, dass Sie die Datei trotzdem herunterladen möchten. Anschließend öffnen Sie eine PowerShell-Sitzung mit erhöhten Rechten und begeben sich in den Ordner, der den Download enthält. Installieren Sie WSA mit folgendem Cmdlet:
Add-AppxPackage -Path <Dateiname>
Im Startmenü finden Sie daraufhin die "Windows-Subsystem für Android-Einstellungen". Darüber starten Sie die einzige ab Werk mitgelieferte App, den Dateimanager des Subsystems. Anders als bei WSL gibt es leider noch keinen direkten Weg, Dateien mit Windows auszutauschen. Doch wie finden nun Daten und weitere Apps ihren Weg ins Subsystem? Scrollen Sie in den Einstellungen des Subsystems weiter nach unten und aktivieren Sie den Entwicklermodus. Nun können Sie die "Android Debug Bridge" aus dem Umfang von "Googles SDK Platform Tools" nutzen, um per Kommandozeile Apps zu installieren, sofern Sie diese als Android Package (APK-Datei) zur Hand haben. Doch es geht noch einfacher.
Grafischen Paketmanager nachrüsten
Der "WSA Paketmanager" (WSA PacMan) greift ebenfalls auf die Entwicklerschnittstelle von WSA zu und installiert Android-Pakete per Doppelklick. Laden Sie den Installer für WSA PacMan von der GitHub-Seite des Projekts herunter [11] und installieren Sie die Software. Sie möchte sich als Standard für den Dateityp "APK" registrieren. Nach einem Neustart des Systems rufen Sie den Paketmanager aus dem Startmenü auf, der darauf hinweist, dass WSA noch nicht läuft, und anbietet, das Subsystem zu starten.
Im nächsten Schritt laden Sie unter Windows die Android Packages der alternativen Open-Source-Quellen für Android-Apps F-Droid [12] oder AuroraOSS [13] herunter. Sobald Sie nun auf einen der Downloads im APK-Format doppelklicken, zeigt WSA PacMan an, welche Berechtigungen die jeweilige App anfordert, und installiert diese dann im Subsystem. Sie finden sie anschließend im Startmenü von Windows wieder. Alternativ können Sie aus dem Paketmanager heraus den App-Launcher von Android aufrufen und dann über die alternativen App Stores weitere Software installieren, etwa den Datenschutz-orientierten Browser der Suchmaschine DuckDuckGo, der anschließend ebenfalls als direkter Link im Startmenü von Windows erscheint (Bild 4).
Auch ohne die alternativen App-Stores bieten diverse Onlineportale den direkten Download von Android Packages an den offiziellen App-Stores von Google und Amazon vorbei an. Hier gilt es, vorsichtig zu sein, da solche Angebote nicht von Store-Anbietern kuratiert sind und entsprechend nicht auszuschließen ist, dass die Packages Schadsoftware enthalten. Hinweise dazu, welche Android-Apps mit WSA harmonieren, finden Sie ebenfalls auf GitHub [14].
Fazit
Microsoft entwickelt WSL konsequent weiter. Unter Windows 11 hat das Subsystem bereits einen praxistauglichen Reifegrad erreicht, der für viele Linux-Anwendungsfälle eine ausgewachsene virtuelle oder gar physische Maschine erübrigt. Grafische Anwendungen integrieren sich nahtlos. Lediglich das Init-System systemd vermissten wir noch.
Derweil steht WSA noch ganz am Anfang. Dieses neue Subsystem demonstriert, dass Windows durchaus auch als Plattform für Android-Apps taugt. Der praktische Nutzen steht und fällt mit den verfügbaren Apps. Hier bleibt abzuwarten, ob es Microsoft und Amazon gelingt, das Angebot auszubauen und auch für Kunden außerhalb des US-Markts zu öffnen. Bis dahin ermöglicht der Entwickler-Modus immerhin erste Gehversuche mit WSA.