Bis vor ein paar Tagen hätte jeder diese Überschrift für einen Aprilscherz gehalten, aber die Zeiten ändern sich manchmal schnell …
Microsoft auf auf der Entwicklerkonferenz Build 2016 einigermaßen überraschend verraten, dass in zukünftigen Windows-Versionen die bash sowie eine ganze Sammlung von Linux-Tools auf der Basis von Ubuntu 14.04 integriert werden soll. Später soll dieses Angebot auf Ubuntu 16.04 aktualisiert werden. Hier die Links zu den quasi »offiziellen« Ankündigungen:
- http://blog.dustinkirkland.com/2016/03/ubuntu-on-windows.html
- http://www.hanselman.com/blog/DevelopersCanRunBashShellAndUsermodeUbuntuLinuxBinariesOnWindows10.aspx
- https://channel9.msdn.com/Events/Build/2016/C906
Es schadet vielleicht nicht, nochmals zu wiederholen, wofür das Linux-Subsystem gedacht ist (und wofür nicht): Microsoft will offensichtlich Entwicklern helfen, die in beiden Welten arbeiten — die also unter Windows Programme entwickeln, aber gleichzeitig Linux-Server-Dienste ausführen möchten oder auch nur einen vernünftigen Werkzeugkasten mit ssh/scp/less/grep/find/sed etc. brauchen.
Das führte bisher meist dazu, dass parallel zu Windows eine virtuelle Linux-Maschine lief. Aber noch eleganter ist es natürlich, wenn diese Werkzeuge direkt unter Windows laufen. Selbst innerhalb von Microsoft kann man eventuell argumentieren, dass ein in Windows integriertes Linux-System im Vergleich zu einer vollwertigen Linux-Installation in einer VM immer noch das kleinere Übel ist.
Das Linux-Subsystem hat keine grafische Benutzeroberfläche, diese ist auch nicht geplant. Insofern richtet sich das Angebot definitiv nicht an Einsteiger. Momentan gibt es offensichtlich keine Absichten, X (oder Wayland oder gar Mir?) ebenfalls in Windows zu integrieren. Aber, so beweglich, wie Microsoft zur Zeit agiert, gilt wohl: Sag niemals nie.
Update 11.9.2016: derStandard.at hat meinen Artikel Microsofts „Linux on Windows“ ausprobiert veröffentlicht.
Voraussetzungen
Die Linux-Umgebung ist zwar (bei weitem) noch nicht fertiggestellt, lässt sich aber mittlerweile testen. Eine ausführliche Installationsanleitung gibt es hier:
http://blog.dustinkirkland.com/2016/04/howto-ubuntu-on-windows.html
Die Kurzfassung:
- Sie brauchen Windows 10 (64 Bit!), wobei es ausreicht wenn das Ding in einer virtuellen Maschine läuft :-)
- Sie müssen Mitglied im Insider Preview Programm sein und in Windows den Insider-Modus aktivieren.
- Sie müssen den Windows-Entwickler-Modus aktivieren (Systemeinstellungen, Modul Update und Sicherheit, Dialogblatt Für Entwickler).
- Sie müssen für die Insider Previews die »Fast Lane« aktivieren (Systemeinstellungen, Modul Update und Sicherheit, Dialogblatt Windows Update, dann Erweiterte Optionen, schließlich den Regler für die Insider-Stufe ganz nach rechts ziehen).
- Sie müssen den aktuellen Insider-Build 14316 herunterladen (oder in Zukunft eine neuere Version).
- Sie müssen das Feature Windows Subsystem for Linux (Beta) aktivieren. Den entsprechenden Dialog finden Sie, wenn Sie im Startmenü nach Windows-Features aktivieren oder deaktivieren suchen.
- Sie müssen, nochmals im Startmenü, das Programm bash starten. Die bash wird in
cmd.exe
ausgeführt (igitt!) und fragt beim ersten Start, ob es Ubuntu on Windows aus dem Windows Store herunterladen soll. Ja bitte!
Wie unter Windows üblich, sind im Verlauf dieser Arbeiten zumindest ein halbes Dutzend Neustarts erforderlich.
Erste Tests
Der Start von bash im Windows-Menü öffnet ein neues, cmd.exe
-ähnliches Fenster mit Ubuntu-Logo. Der Prompt ist anders (root@localhost
), und auch sonst hat das Fenster mehr Ähnlichkeiten mit einem Linux-Terminal als mit cmd.exe
. Sogar die Farbdarstellung funktioniert, z.B. bei grep
oder ls
.
dpkg -l
zeigt, das standardmäßig beachtliche 437 Ubuntu-Pakete installiert sind, unter anderem:
- apt
- bash
- cron
- dpkg
- nano
- openssh-client und -server
- openssl
- perl
- python (Version 2.7 und 3.4)
- rsync
- sed
- sudo
- tar
- upstart
- vim
Die Paketverwaltung funktioniert wie in Debian/Ubuntu gewohnt, Sie können also problemlos weitere Pakete mit apt-get install
installieren. sources.list
enthält übrigens die ganz gewöhnlichen Ubuntu-Paketquellen, keine speziellen, für Windows optimierte/kompilierte Pakete!
cat /etc/apt/sources.list
deb http://archive.ubuntu.com/ubuntu trusty main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu trusty-updates main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu trusty-security main restricted universe multiverse
Netzwerkfunktionen
Hier gibt es noch große Problem. ping google.at
liefert die Fehlermeldung Socket type not supported. ssh meinserver
funktioniert problemlos. Die Kommandos ip addr
und ifconfig
liefern aber wieder Fehler (cannot open netlink socket bzw. cannot open /proc/net/dev).
Zeit
date
zeigt die GMT-Zeit an. Es ist aber möglich, die Zeitzone zu ändern:
ln -s -f /usr/share/zoneinfo/Europe/Berlin /etc/localtime
Init-System
Da Ubuntu 14.04 als Basis dient, ist Upstart als Init-System installiert. Es scheint aber momentan nur wenige Funktionen (keine?) zu bieten. ps ax
zeigt, dass standardmäßig überhaupt keine Hintergrundprozesse laufen. Die Prozessliste besteht nur aus /init
, /bin/bash
und ps
.
Der Versuch, den installierten ssh-Server zu starten, scheitert:
service ssh start
initctl: Unable to connect to Upstart: Failed to
connect to socket /com/ubuntu/upstart: No such file
or directory
Auch das direkte Ausführen des Init-Scripts führt zu einem Fehler:
/etc/init.d/ssh start
* /dev/null is not a character device!
Nun habe ich versucht, sshd
manuell zu starten — leider weiterhin ohne Erfolg:
dpkg-reconfigure openssh-server
Creating SSH2 RSA key; this may take some time ...
Creating SSH2 DSA key; this may take some time ...
Creating SSH2 ECDSA key; this may take some time ...
Creating SSH2 ED25519 key; this may take some time ...
initctl: Unable to connect to Upstart:
...
/dev/null is not a character device!
/usr/sbin/sshd -D &
sshd
läuft jetzt im Hintergrund, lässt sich aber nicht verwenden. (ssh localhost
führt zum Fehler Connection closed by 127.0.0.1.) An dieser Stelle habe ich aufgegeben — und auch gleich auf alle Versuche verzichtet, als nächstes Apache einzurichten.
Losgelöst von diesen Detailproblemen ist mir unklar, wie das Linux-Subsystem mit Hintergrunddiensten umgehen wird: Sollen alle Linux-Prozesse mit dem Schließen des bash-Fensters enden? Werden die laufenden Prozesse dann wenigstens ordentlich hinuntergefahren? (Man denke etwa an Datenbank-Server …)
Benutzerverwaltung
Jegliche Arbeit in der bash erfolgt momentan als root. Man hat sich hier an Windows 95 orientiert ;-)
Nein, Scherz beiseite, Microsoft weiß, dass hier noch Optimierungsbedarf besteht. Ich habe sogar den Eindruck gewonnen, dass das Fundament schon weitestgehend funktioniert. Es ist kein Problem, mit adduser
einen neuen Benutzer einzurichten, mit su -l
einen Benutzerwechsel durchzuführen etc.
Nett wäre halt‘, wenn man beim Start der bash Ubuntu-typisch als normaler Benutzer eingeloggt würde und erst später, bei Bedarf, mit sudo
root-Rechte erlangen könnte.
Die Linux-Benutzerverwaltung erfolgt vollkommen losgelöst von Windows. Die Daten werden wie üblich in /etc/passwd
, /etc/shadow
usw. gespeichert. Allerdings ist es anscheinend so, dass der Windows-Account, von dem aus Sie die bash starten, gewissermaßen das Maximum der Rechte limitiert, mit der Sie von Linux aus auf das restliche Windows-System zugreifen können.
Tastatur-, Maus- und Darstellungsprobleme
- Die bash hat anscheinend manche Einschränkungen von
cmd.exe
geerbt. Die Navigation des Cursors an den Beginn bzw. das Ende der Zeile mit Strg+A/Strg+E funktioniert nicht. Löschen mit Strg+D funktioniert aber. Auch das Stoppen oder Unterbrechen eines Kommandos mit Strg+C bzw. Strg+Z funktioniert. Strg+L für Clear Screen funktioniert ebenfalls. -
Die Eingabe von äöüß, des Pipe-Zeichens | sowie der Zeichen
[
und}
hat in meinen Tests nicht funktioniert. (Testumgebung: Ein Mac mit OS X, Mac-Tastatur, Windows 10 in einer Virtual-Box-Maschine.) Nun ist es natürlich naheliegend, meine Testumgebung für das Eingabeproblem verantwortlich zu machen — in Notepad.exe kann ich all diese Zeichen aber problemlos eingeben. Von dort habe ich mir die Zeichen dann bei Bedarf per Zwischenablage kopiert. Das gelingt wiederum nur per Maus, weil die in Linux-Terminal üblichen Kürzel Shift+Strg+C / Shift+Strg+V offensichtlich nicht unterstützt werden. -
Markieren und Einfügen mit der mittleren Maustaste geht (natürlich) auch nicht.
-
Das Scrollen nach oben mit
less
führt zu Darstellungsfehlern. Auch bei einer Veränderung der Fenstergröße geht der Inhalt des Fensters verloren.
Ich habe versucht, die Tastaturkonfiguration selbst zu verändern, aber dpkg-reconfigure keyboard-configuration
führte zu einem Fehler. Die manuelle Veränderung von /etc/default/keyboard
blieb wirkungslos, möglicherweise wegen des fehlenden Init-Prozesses.
Dateisystem
Wo befindet sich das Linux-Dateisystem aus Windows-Sicht? Wenn Sie im Windows Explorer die Option Geschützte Systemdateien ausblenden deaktivieren (doppelte Verneinungen sind immer schön), dann finden Sie das Linux-Root-Dateisystem sowie weitere Verzeichnisse für /home
, /root
hier:
C:\Users\<ihr-user-name>\AppData\Local\lxss
Um umgekehrt vom Linux-Subsystem auf das Windows-Dateisystem zuzugreifen, verwenden Sie das Verzeichnis /mnt/c
. Wie die Verbindung hinter den Kulissen funktioniert, hat sich mir nicht erschlossen. Es gibt für das Verzeichnis keinen mount
-Eintrag, auch nicht in /etc/fstab
. Es ist auf jeden Fall möglich, von Linux aus auf das Windows-Dateisystem zuzugreifen (auch wenn es vielleicht Einschränkungen gibt, dir mir nicht bewusst sind).
bash-completion
Die Vervollständigung von Verzeichnis- und Dateinamen mit Tab funktioniert, die Vervollständigung anderer Begriffe aber nicht (also z.B. man abc<tab>
, um alle man-Seiten aufzulisten, die mit abc
beginnen).
bash-completion
ist standardmäßig installiert, aber offensichtlich nicht richtig konfiguriert. Abhilfe: Laden Sie die Datei /etc/bash.bashrc
in einen Editor und entfernen Sie die Kommentarzeichen vor den folgenden, bereits vorhandenen Zeilen:
# enable bash completion in interactive shells
if ! shopt -oq posix; then
if [ -f /usr/share/bash-completion/bash_completion ]; then
. /usr/share/bash-completion/bash_completion
elif [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
fi
Interna
Eines gleich vorweg: Dem Linux-Subsystem fehlt gewissermaßen der wichtigste Bestandteil — der Linux-Kernel. Dennoch verwendet das Linux-Subsystem die ganz gewöhnlichen, für Linux kompilierten Pakete, keine speziell für Windows hergestellten Kompilate! Wie kann das funktionieren?
Microsoft hat (in den Worten von Dustin Kirkland von Canonical) eine Art inverses Wine geschaffen, in dem Linux-Systemfunktionen durch entsprechende Windows-Funktionen ersetzt bzw. emuliert werden. Dieser Code ist ein Kernstück des Linux Subsystems für Windows. Er ist momentan nicht als Open Source verfügbar, und es gibt auch keine konkreten Informationen dazu, ob dies in Zukunft geplant ist.
Ein Mysterium ist (für mich) die Speicher- und Prozessverwaltung. Laut free
steht Linux ein GByte RAM zur Verfügung. (Meine virtuelle Maschine hat drei GByte).
free -h
total used free shared buffers cached
Mem: 1.0G 342M 664M 0B 0B 0B
-/+ buffers/cache: 342M 664M
Swap: 0B 0B 0B
Im Windows Task-Manager habe ich aber außer bash.exe keine Linux-Prozesse gefunden. Ich habe probeweise unter Linux sysbench
ausgeführt und die (virtuelle) CPU eine Weile voll ausgelastet. Der Task-Manager hat zwar auf der Seite Leistung die volle CPU-Auslastung registriert, aber weder unter Prozesse noch unter Details war ein entsprechender Prozess zu sehen. Innerhalb von Linux funktioniert top
übrigens nicht.
Etwas mehr Details verrät der Process Explorer, den Sie hier kostenlos herunterladen können. Dort sind die Linux-Prozesse einzeln aufgelistet und es ist sogar zu erkennen, welche Linux-Bibliotheken im Einsatz sind.
Fazit/Kommentar
Im aktuellen Zustand ist das in Windows integrierte Linux-System ein (sehr) interessantes Experiment, aber noch kein brauchbares Produkt. Andererseits ist verblüffend, wie viel schon funktioniert — noch ein paar Monate Arbeit, dann ist ein Linux-Subsystem innerhalb von Windows eine (für ganz bestimmte Szenarien) praxistaugliche Realität.
Die Zielgruppe sind ganz eindeutig nicht Linux-Freaks und -Administratoren — die werden sicher bei ihrem »richtigen« Linux bleiben. Aber für Microsoft-affine Entwickler kann das Linux-Subsystem eine interessante Alternative zu einer virtuellen Linux-Maschine sein.
Interessant ist, dass sich Microsoft gerade für Ubuntu entschieden hat, nicht für Debian oder SUSE oder, was eigentlich am naheliegendsten wäre, für Red Hat. Vielleicht hat das mit Firmenpolitik zu tun. Red Hat ist für Microsoft kommerziell gesehen ein ernst zu nehmender Konkurrent, den man durch eine derartige Kooperation nicht weiter aufwerten möchte. (Oder interpretiere ich hier zu viel?)
Was ist Linux? Kann man »Ubuntu on Windows« überhaupt als »Linux« bezeichnen? Microsoft verwendet unterschiedliche Begriffe, »Ubuntu on Windows«, »Windows Subsystem for Linux«, »bash on Ubuntu on Windows« etc. Besonders häufig war in der Ankündigung bzw. in den Vorträgen interessanterweise von der bash die Rede — ganz so, als wäre die bash der wichtigste Baustein dieses Konglomerat. Persönlich fällt es mir schwer, eine Tool-Box (oder eine »Distribution«?) ohne Linux-Kernel als »Linux« oder auch als »Ubuntu« zu bezeichnen. Mangels besserer Alternativen habe ich hier »Linux-Subsystem für Windows« verwendet.
Weitere Informationen und Links
- golem.de hat Windows on Ubuntu ebenfalls getestet
- und natürlich auch heise.de
- microsoft hat im MSDN-Blog technische Implementierungsdetails veröffentlicht
hmm… verstehe ich das richtig, streng genommen, ist es also kein Linux, da ja der Linux Kernel fehlt?
aufjedenfall danke für den Artikel ich bin schon darauf gespannt.
Warum sich Microsoft für Ubuntu entschieden hat?
Weil sie laut den Artikeln den Microsoft nutzern eine ähnliche umgebung geben wollen wie sie sie auf den „Servern“ vorfinden.
Und in sämtlichen Clouds oder auch Docker Images ist nun mal die Basis Ubuntu.
Also einfach Kundenwunsch entsprochen!
konnte nur einen Link finden um meine Behauptung zu bestätigen habe das aber schon öfter so gelesen:
http://thecloudmarket.com/stats#/by_platform_definition
Mich hat die Neuigkeit positiv überrascht. Als Entwickler könnte ich das vielleicht sehr gut gebrauchen. Das es keinen Linux-Kernel enthält ist mir momentan ziemlich egal. Als Kernel-Entwickler kommt man um ein Linux-System bekanntlich ja sowieso nicht herum :-)
Ich habe eine Anleitung geschrieben, mit der man den openssh-server zum laufen bringt.
Zu finden unter http://www.deskman.de/826366.html
Viele Grüsse
Seppi