Microsofts "Linux on Windows" ausprobiert

11. September 2016, 15:39
158 Postings

Das Unternehmen kündigte auf der Build an, dass Linux-Programme zukünftig "in" Windows laufen können

Ende März war es "die" Überraschung auf Microsofts großer Entwicklerkonferenz "Build 2016" -- jetzt ist es Realität: Windows 10 enthält Linux. Sofern auf Ihrem Rechner eine 64-Bit-Installation Windows 10 mit den aktuellsten Updates läuft (Windows-Version 1607), können Sie in zwei einfachen Schritten Linux innerhalb von Windows installieren. Dazu aktivieren Sie in den Update-Dialogen den Entwicklermodus und starten dann das Programm "Windows Features aktivieren". Dort aktivieren Sie das "Windows-Subsystem für Linux" und starten nach der Installation Ihren Rechner neu -- fertig. Um Linux auszuprobieren, starten Sie anschließend das Programm "bash".

Radikalerer Ansatz

Nun kann Linux natürlich schon lange als virtuelle Maschine unter Windows ausgeführt werden (und umgekehrt). Microsoft wollte aber erreichen, dass Linux-Programme ohne den beachtlichen Virtualisierungs-Overhead direkt unter Windows ausgeführt werden können. Relativ unbekannt ist, dass Windows schon seit mehr als zwei Jahrzehnten Subsysteme für POSIX und OS/2 enthält. Diese Subsysteme halfen, vorhandenen Quellcode für UNIX bzw. OS/2 mit vertretbarem Aufwand auf Windows zu portieren. Jede Portierung setzte allerdings Änderungen im Code und ein neuerliches Kompilieren voraus.

Das "Windows Subsystem for Linux" (WSL) ist in dieser Hinsicht radikaler: Es kann für Linux kompilierte 64-Bit-Binaries ohne jede Änderung direkt ausführen. Das ist nicht so einfach, wie es vielleicht klingt. Linux-Programme und -Bibliotheken erwarten, dass alle Grundfunktionen des Kernels zur Verfügung stehen – eine Voraussetzung, die unter Windows natürlich nicht erfüllt ist. Um diese Hürde zu überwinden ist Microsoft eine Kooperation mit Canonical eingegangen, also der Firma hinter der bekannten Linux-Distribution Ubuntu. Gemeinsam entwickelten sie mehrere Bausteine, die zusammen das WSL ergeben.

Im sogenannten User-Space dient bash.exe als Startpunkt. Das ist eine speziell für Windows kompilierte Version der Shell bash. Nach außen sieht bash.exe wie das Programm cmd.exe aus – aber im Unterschied dazu kann es (fast) alle Kommandos ausführen, die üblicherweise unter Ubuntu 14.04 zur Verfügung stehen. Demnächst soll es ein Update auf die aktuelle Ubuntu-Version 16.04 geben. Momentan scheitert dieses noch an Inkompatibilitäten zwischen dem WSL und Ubuntu 16.04.

Fehlende Kommandos können sogar mit dem Kommando apt-get nachinstalliert werden – direkt aus den Ubuntu-Paketquellen. Bash.exe kommuniziert mit den neuen Windows-Kernel-Treibern LXSS (lxss.sys) und LXCore (lxcore.sys). LXSS fungiert dabei als "Broker" und übersetzt Linux- zu Windows-Funktionen.

Prozessverwaltung

Gleichzeitig kümmert sich LXSS um die Linux-Prozessverwaltung: Vor bash.exe wird ein Init-Systemgestartet. Aus bash.exe heraus können dann sowohl Vorder- als auchHintergrundprozesse gestartet werden. LXSS greift dabei auf Pico-Prozesse aus dem Sandboxing-Framework Drawbridge zurück. Damit sind Linux-Prozesse von Windows-Prozessen getrennt, Systemaufrufe werden direkt vom zugeordneten Treiber LXCore verarbeitet. Wenn bash.exe beendet, das entsprechende Fenster also geschlossen wird, dann enden damit zugleich auch alle laufenden Linux-Prozesse. LXCore stellt für Windows die wichtigsten Linux-Kernelfunktionen zur Verfügung. In einfachen Fällen kann LXCore eine äquivalente Windows-Kernelfunktion aufrufen. Da es nicht immer gleichwertige Funktionen gibt, enthält LXCore die Nachbildung diverser Linux-Kernelfunktionen.

Von Grund neu entwickelt

Microsoft betont in diesem Zusammenhang, dass LXCore von Grund auf neu entwickelt wurde und keinen Linux-Quellcode verwendet (Cleanroom-Implementierung). Offensichtlich versucht Microsoft hier, Lizenzproblemen (GPL) von vorne herein aus dem Weg zugehen. Jetzt verbleibt noch ein großes Hindernis: Die Dateisysteme von Linux und Windows sind grundverschieden und inkompatibel zueinander. Das beginnt bei der Differenzierung zwischen Groß- und Kleinbuchstaben und endet bei den Metadaten zu Dateien (Besitzer, Gruppe, Zugriffsrechte). Zwei neue Dateisystemtreiber schlagen hier die Brückezwischen Linux und Windows.

VolFs stellt den Linux-Prozessen ein Dateisystem zur Verfügung, das wie unter Linux funktioniert. Das gesamte Linux-Systemverzeichnis ist unter Windows auch im Explorer sichtbar, und zwar im verborgenen Verzeichnis C:\Users\name\lxss\rootfs. Details zur internen Implemtierung von VolFs hat Microsoft noch nicht verraten. Obwohl Microsoft im MSDN-Blog darauf hinweist, dass ein Zugriff durch Windows-Programme auf Dateien im lxss-Verzeichnis nicht vorgesehen ist, ist dieser dennoch möglich: Sie können also beispielsweise mit Notepad.exe eine Datei aus dem Linux-/etc-Verzeichnis öffnen, verändern und speichern, auch dann, wenn bash.exe gar nicht läuft. Um umgekehrt Linux-Programmen Zugriff auf das Windows-Dateisystem zugeben, wird dieses unter /mnt/c in den Linux-Verzeichnisbaum eingebunden.

Verantwortlich dafür ist ein zweiter neuer Dateisystemtreiber, nämlich DriveFS. Linux-Kommandos dürfen damit ganzoffiziell auf Windows-Dateien zugreifen – etwa um mit find und grep nach Dateien zu suchen.

Betaversion

Microsoft betrachtet die aktuelle Implementierung von WSL noch als Betaversion. Diese ist in der aktuellen Implementierung noch mit vielen Einschränkungen verbunden. Diese reichen von Darstellungsfehlern in bash.exe bis hin zu fehlenden Device-Dateien, die den Start von Netzwerkdiensten wie dem SSH-Server unmöglich machen.

Dessen ungeachtet zeigt WSL bereits in der aktuellen Form ein beachtliches Potenzial.Trotz Microsofts neuer Offenheit der Open-Source-Welt gegenüber bleiben viele Fragen offen: Wird Microsoft die Komponenten von WSL selbst im Quellcode freigeben? Wird WSL auch andere Linux-Distributionen unterstützen? Ist längerfristig daran gedacht, auch grafische Linux-Programme zu unterstützen? Stoff zum Grübelnhaben im Übrigen auch Linux-Fans: Kann man WSL überhaupt "Linux" nennen, wenn doch dessen wichtigster Bestandteil, der Kernel, gar nicht zur Verfügung steht? (Michael Kofler, 11.9.2016)

  • Das Subsystem kann in den Einstellungen aktiviert werden.
    screenshot: kofler

    Das Subsystem kann in den Einstellungen aktiviert werden.

  • Das Linux-Dateisystem befindet sich im AppData-Verzeichnis des Windows-Nutzers.
    screenshot: kofler

    Das Linux-Dateisystem befindet sich im AppData-Verzeichnis des Windows-Nutzers.

  • Es ist möglich, in der bash eine Datei zu erzeugen, die auf dem Windows-Desktop sichtbar ist.
    screenshot: kofler

    Es ist möglich, in der bash eine Datei zu erzeugen, die auf dem Windows-Desktop sichtbar ist.

  • Der Process Explorer zeigt auch Linux-Prozesse und -Bibliotheken.
    screenshot: kofler

    Der Process Explorer zeigt auch Linux-Prozesse und -Bibliotheken.

Share if you care.