Das Bash auf Ubuntu unter Windows ermöglicht die Ausführung nativer Linux-ELF64-Binärdateien unter Windows über das Windows-Subsystem für Linux (WSL). Obwohl viele Leute von der Bash on Ubuntu-Ankündigung schockiert waren, ist es erwähnenswert, dass sie neue Türen für die Kompatibilität zwischen verschiedenen Betriebssystemen öffnet. Microsoft geht einen weiteren Schritt nach vorne und enthüllt, wie seine WSL funktioniert, damit wir besser verstehen können, wie die beiden Systeme miteinander kommunizieren.
WSL wurde vom Microsoft Windows Kernel-Team erstellt und enthält sowohl Benutzermodus- als auch Kernelmodus-Komponenten. Genauer gesagt besteht das System aus:
- ein Session-Manager-Dienst im Benutzermodus, der den Lebenszyklus einer Linux-Instanz verarbeitet
- Pico-Anbietertreiber (lxss.sys, lxcore.sys), deren Aufgabe darin besteht, einen Linux-Kernel zu emulieren, indem sie Linux-Systemaufrufe übersetzen
- Pico-Prozesse, die den unveränderten Benutzermodus Linux hosten (z. B. /bin/bash).
Die Verbindung zwischen den drei Komponenten wird wie folgt beschrieben:
Es ist der Raum zwischen den Linux-Binärdateien im Benutzermodus und den Windows-Kernelkomponenten, in denen die Magie passiert. Indem wir unmodifizierte Linux-Binärdateien in Pico-Prozesse platzieren, ermöglichen wir, dass Linux-Systemaufrufe in den Windows-Kernel geleitet werden. Die Treiber lxss.sys und lxcore.sys übersetzen die Linux-Systemaufrufe in NT-APIs und emulieren den Linux-Kernel.
Die größte Herausforderung dabei besteht darin, die beiden Systeme zusammenarbeiten zu lassen:
WSL führt unmodifizierte Linux ELF64-Binärdateien durch Virtualisierung einer Linux-Kernel-Schnittstelle auf dem Windows NT-Kernel aus. Eine der Kernel-Schnittstellen, die es verfügbar macht, sind Systemaufrufe (syscalls). Ein Systemaufruf ist ein vom Kernel bereitgestellter Dienst, der aus dem Benutzermodus aufgerufen werden kann. Sowohl der Linux-Kernel als auch der Windows NT-Kernel stellen mehrere hundert Systemaufrufe für den Benutzermodus bereit, aber sie haben unterschiedliche Semantiken und sind im Allgemeinen nicht direkt kompatibel. Zum Beispiel enthält der Linux-Kernel Dinge wie fork, open und kill, während der Windows NT-Kernel die vergleichbaren NtCreateProcess, NtOpenFile und NtTerminateProcess hat.
Das Windows-Subsystem für Linux enthält Kernelmodustreiber (lxss.sys und lxcore.sys), die für die Verarbeitung von Linux-Systemaufrufanforderungen in Koordination mit dem Windows NT-Kernel verantwortlich sind. Die Treiber enthalten keinen Code aus dem Linux-Kernel, sondern sind eine Reinraum-Implementierung von Linux-kompatiblen Kernel-Schnittstellen. Unter nativem Linux wird ein Systemaufruf von einer ausführbaren Datei im Benutzermodus vom Linux-Kernel verarbeitet. Wenn unter WSL ein Systemaufruf von derselben ausführbaren Datei erfolgt, leitet der Windows NT-Kernel die Anforderung an lxcore.sys weiter. Wenn möglich, übersetzt lxcore.sys den Linux-Systemaufruf in den entsprechenden Windows NT-Aufruf, der wiederum die schwere Arbeit übernimmt.
Angesichts des Interesses von Microsoft an Open-Source-Plattformen fragten sich viele Leute, ob der Technologieriese sollte große Linux-orientierte Unternehmen wie Canonical übernehmen, das Unternehmen hinter dem Ubuntu-Betriebssystem. Obwohl Microsoft und Canonical bei Open-Source-Software kooperierten, gaben beide keine Kommentare zu dieser Möglichkeit ab.
Wenn Sie daran interessiert sind, wie sich die Interaktion zwischen Linux und Windows entwickelt, gehe zum Microsoft-Blog. Das Team versprach, dass weitere Blogbeiträge zu diesem Thema folgen würden.
VERWANDTE GESCHICHTEN, DIE SIE SICH ANSEHEN MÜSSEN:
- Linux-Benutzer melden "Kopfhörer funktionieren unter Windows 8.1 nicht mehr"
- Microsoft und Canonical bringen Bash auf der Build 2016 auf Windows 10
- München verteilt kostenlose Ubuntu-CDs an Windows XP-Benutzer