Het WSL (Windows Subsysteem voor Linux) in Windows 10

Printvriendelijke versieVerstuur per e-mail

De Windows 10 Anniversary Update brengt ons naast allerlei andere nieuwtjes ook het Windows Subsysteem voor Linux (WSL), een echte Linux omgeving binnen Windows. Gefundenes Fressen voor Linux enthousiasten!

Al heel lang hebben we in Linux de beschikking over Wine, een Linux subsysteem voor Windows rond het programma Wine. Met Wine kunnen in Linux Windows programma’s worden gedraaid zonder dat sprake is van hardware virtualisatie. Wine doet dit door aanroepen van Windows functies on te zetten in aanroepen van overeenkomstige Linux functies. Zo denkt het programma met Windows van doen te hebben, terwijl het met Linux communiceert.

Omgekeerd bestond zoiets niet. Er was geen systeem waarmee Linux programma’s in Windows kunnen worden uitgevoerd. Wel is er onder andere Cygwin dat een onderling samenhangende verzameling Linux programma’s naar Windows brengt. Omdat de doelgroep voornamelijk uit software ontwikkelaars bestaat ligt de nadruk op programma’s voor de opdrachtregel (Command Line Interface ofwel CLI), zij het dat met Cygwin/X ook het X Window System voor de grafische gebruiksomgeving (Graphical User Interface ofwel GUI) met aan aantal bijbehorende programma’s beschikbaar is. Het gaat bij Cygwin echter niet om originele Linux programma’s, maar om Linux programma’s die voor Windows zijn gehercompileerd. Het zijn dus eigenlijk Windows programma’s geworden.

Met het nieuwe Windows Subsysteem voor Linux kreeg Windows 10 een met Wine vergelijkbaar systeem voor het draaien van originele Linux programma’s in Windows. Tot stand gekomen door samenwerking van Microsoft en Canonical zal het geen verbazing wekken dat het om Ubuntu gaat, en wel de LTS (langdurige ondersteuning) versie 14.04, bijgenaamd Trusty Tahr. WSL is gericht op ontwikkelaars van software voor meerdere platforms, zoals Windows en Linux, en is mede daarom beperkt tot programma’s voor de opdrachtregel. WSL wordt gestart met het Windows programma bash.exe (in C:\Windows\System32), dat net als de Linux shell bash een werkomgeving met opdrachtprompt en een eigen programmeertaal biedt. Daarbinnen hebben gebruikers de beschikking over de zelfde shell functies en de meeste programma’s als in Linux zelf, zij het dat grafische en server software niet wordt ondersteund. Voor Linux kenners en onderzoekers heel leuk om mee te spelen!

WSL is standaard niet direct beschikbaar, maar moet worden geactiveerd en geïnstalleerd. Dat gaat zo:

  1. Windows in ontwikkelaarsmodus zetten: Open de Windows instellingen, kies voor „Bijwerken en beveiliging” en daarin voor „Voor ontwikkelaars”. Windows vraagt u dan of deze app wijzigingen aan het apparaat mag aanbrengen, en na goedkeuring ziet u het volgende venster:

    Kies dan „Modus voor ontwikkelaars”. Aan de schuifbalk ziet u dat er onder nog meer staat: u kunt allerlei instellingen zo aanpassen dat ze meer tegemoet komen aan de eisen van software ontwikkelaars. Nodig is dat niet.
     
  2. WSL inschakelen: Open het configuratiescherm door met de rechter muisknop op de startknop te klikken en dan „Configuratiescherm” te kiezen. Open daarin „Programma’s” en vervolgens „Windows-onderdelen in- of uitschakelen”. Ook nu weer wordt uw toestemming gevraagd en dan verschijnt het volgende venster:

    Vink daarin „Windows-subsysteem voor Linux (bèta)” aan en klik OK. Dan zal u gevraagd worden Windows te herstarten.
     
  3. WSL downloaden en installeren: Klik nadat Windows opnieuw is gestart op de startknop en tik „bash”. Klik vervolgens op de gevonden opdracht „bash”. Omdat WSL nog niet is geïnstalleerd wordt nu automatisch de opdracht „lxrun /install” uitgevoerd. Het programma lxrun.exe, dat net als bash.exe in C:\Windows\System32 staat, wordt gebruikt om WSL te beheren, en in het bijzonder te installeren en te de-installeren. Hier leest u er meer over. Het volgende venster verschijnt:

    De tekst is helaas niet in het Nederlands maar in het Engels. Stel u gerust, dat blijft niet zo. Tijdens de installatie worden de landinstellingen zoveel mogelijk in overeenstemming gebracht met die van Windows, zodat WSL in een Nederlandstalige Windows voortaan zoveel mogelijk Nederlandstalig zal zijn. In het venster staat dat het om beta software gaat, en dat het Ubuntu op Windows zal installeren. Ubuntu op Windows is uitgegeven door Canonical onder een licentie waarvan de voorwaarden verkrijgbaar zijn op https://aka.ms/uowterms. Dat de software het predicaat beta heeft houdt in dat er nog dingen kunnen ontbreken en dat misschien nog niet alles goed werkt. Laat u zich hierdoor niet afschrikken: het systeem is al behoorlijk getest en in de praktijk blijkt het al heel goed te werken. Om de installatie uit te voeren moet u „y” intikken, gevolgd door de „Enter” toets. Het systeem wordt dan gedownload van de Windows Store, uitgepakt en geïnstalleerd. Tot slot wordt u gevraagd een UNIX gebruikersnaam op te geven:

    Deze gebruikersnaam hoeft niet overeen te stemmen met uw Windows gebruikersnaam. Na opgave van de naam wordt een bijbehorend wachtwoord gevraagd. Dat wachtwoord wordt voortaan alleen gevraagd bij het uitvoeren van Linux beheerstaken binnen WSL met behulp van de opdracht „sudo”. Bij het starten van Bash wordt u in het vervolg echter automatisch ingelogd zonder gebruikersnaam en wachtwoord te moeten opgeven. Elke Windows gebruiker krijft zijn eigen WSL in de map AppData\Local\lxss, waarin lxss staat voor LinuX SubSystem. Meer informatie over de ondersteuning van gebruikersaccounts vindt u op https://aka.ms/wslusers.

Nadat u een gebruikersnaam en een wachtwoord hebt gegeven verschijnt de bash prompt waarachter u Linux opdrachten kunt geven. Met de opdracht „exit” verlaat u bash. U zult zien dat in het Windows menu nu „Bash on Ubuntu on Windows” is verschenen, vergezeld van het Ubuntu logo: . Klik daarop om bash te starten.

In WSL zijn de Windows drives aangekoppeld onder /mnt/<driveletter>, waarin <driveletter> staat voor de kleine driveletter. Zo is drive C: aangekoppeld onder /mnt/c. De inhoud van de hoofdmap van C: kunt u zien met de opdracht

ls -l /mnt/c

Er zijn enkele verschillen tussen de Linux en Windows bestandssystemen waarmee in WSL natuurlijk rekening moest worden gehouden, en waarvan u zich wel bewust moet zijn:

  • In Linux hebben hoofd- en kleine letters in tegenstelling tot Windows een verschillende betekenis! Zo komen in de map /lib/xtables verschillende bestanden voor die afgezien van hoofd- en kleine letters dezelfde naam hebben, bijvoorbeeld libxt_CONNMARK.so en libxt_connmark.so. Bijzonder is dat ze in het Windows bestandssysteem ook beide zichtbaar zijn. Maar pas daarmee op! Stel dat je in Linux twee bestanden aanmaakt met de namen TEST en test, dan zullen ze in Windows ook beide te zien zijn. Als je in Linux TEST verwijdert, is test er nog steeds. Als je daarentegen in Windows TEST verwijdert is ook test verdwenen!

  • Een ander interessant gegeven is dat WSL net als Linux symbolische links (symlinks) ondersteunt. In Windows zijn ze zichtbaar als een klein bestandje met als inhoud het pad of de naam van de map waarheen wordt verwezen. Het lijkt een gewoon tekstbestandje, maar als je in Windows zo’n bestandje aanmaakt werkt het niet. Kennelijk hebben die symlinks ook in Windows een speciaal attribuut. Dat attribuut gaat wel mee bij kopiëren. En als je daarna met een editor het pad in dat bestandje wijzigt blijft het in Linux een symbolische link, maar nu naar een andere plek.

  • WSL ondersteunt ook de Linux bestandsattributen en -permissies. In de aangekoppelde Windows schijven geven de Linux permissies zo goed mogelijk de Windows permissies weer.

Een meer technisch geörienteerde uitleg van allerlei aspecten van WSL vindt u op blogs.msdn.microsoft.com/wsl/.

Eén van de eerste opdrachten die u bash kunt geven is om te laten zien met welke versie van Ubuntu we te maken hebben. Dat gaat zo:

cat /etc/os-release

Het blijkt versie 14.04.4 LTS te zijn. Het is een goed idee om om het systeem vervolgens naar de nieuwste versies van alle programma’s bij te werken. Geef daartoe eerst de opdracht

sudo apt update

om de inhoudsopgave van de Ubuntu software repositories bij te werken, en daarna

sudo apt upgrade

om het systeem naar de nieuwste versies van de programmatuur op te waarderen. Op het moment dat ik dit schrijf zijn er 48 pakketten op te waarderen. Geef toestemming om op te waarderen, en geef als alles is afgerond de opdracht

sudo apt-get clean

om alle gedownloade pakketten uit de cache te verwijderen. Ze zijn immers niet meer nodig. Wanneer we nu weer kijken welke versie van Ubuntu we hebben blijkt het inmiddels 14.04.5 LTS te zijn. De nieuwste LTS versie van Ubuntu is 16.04 en u zou in de verleiding kunnen komen om WSL naar 16.04 op te waarderen. Dat wordt echter door Canonical niet ondersteund. Het kan wel, zoals blijkt uit dit verhaal op www.omgubuntu.co.uk. Hoe het dan zal gaan met toekomstige updates van Windows met inbegrip van WSL weet ik niet. U doet het geheel op eigen risico.

Om gemakkelijk door het bestandssysteem van WSL te navigeren is het handig om de Midnight Commander te installeren. Dat is een bestandbeheerder die erg lijkt op de vroegere Norton Commander in DOS. Geef daartoe de opdracht

sudo apt install mc

Na installatie start u de Midnight Commander met de opdracht

mc

Hij ziet er uit als in het volgende plaatje:

Linux opdrachten kunnen met bash ook vanuit de gewone Windows opdrachtprompt worden uitgevoerd. Dat gaat zo:

bash -c "<Linux opdracht>"

Een upgrade naar de nieuwste programmaversies kan dus zo worden uitgevoerd:

bash -c "sudo apt upgrade"

en de Midnight Commander kan worden gestart met:

bash -c mc

Aanhalingstekens rond mc zijn niet nodig omdat er in de opdracht geen spaties voorkomen.

Bij mijn testen bleek dat in Windows aangebrachte veranderingen in het bestandssysteem, zoals naamswijzigingen, nieuwe of verwijderde bestanden etc., niet direct in een al geopende bash omgeving zichtbaar zijn. In een nieuw gestarte bash zijn ze daarentegen wel direct zichtbaar. Iets om rekening mee te houden!

Zoals gezegd wordt het draaien van grafische programma’s in WSL niet door Canonical en Microsoft ondersteund. Toch zijn er al slimme mensen die het voor elkaar hebben gekregen. Zie bijvoorbeeld dit verslag op linux.softpedia.com en dit verhaal op webwereld.nl waarin ook nog wat andere leuke trucs met WSL uit de doeken worden gedaan.

Ook blijkt het mogelijk om een andere distributie dan Ubuntu in WSL te draaien. Het artikel „How to run openSUSE Linux on Windows 10” op ZDNet beschrijft hoe je dat moet doen. En op Linux.com wordt beschreven „How to Use Different Linux Bash Shells in Windows 10” met behulp van een Python3 programma genaamd „Windows Subsystem for Linux Distribution Switcher”. Dit programma ondersteunt verschillende versies van 10 distributies: Debian, Ubuntu, Fedora, CentOS, OpenSUSE, Mageia, Oracle Linux, Alpine, Crux en Clearlinux.

Ik ben benieuwd hoe WSL zich verder ontwikkelt…..

Microsoft heeft inmiddels een tipje van de sluier opgelicht: Blijkens een bericht op TechRepublic zal de volgende grote update van Windows 10, de Creators Update, die begin 2017 wordt uitgebracht, voor het WSL de volgende verbeteringen en uitbreidingen brengen:

  • Ondersteuning van Ubuntu 16.04 (is nu 14.04).
  • Meer interoperabiliteit tussen de Bash en de Windows omgevingen, zodat Windows commando’s vanuit Bash, en Linux commando’s vanuit Windows Powershell kunnen worden uitgevoerd.
  • Betere ondersteuning voor programmeertalen als node.js, Go, Ruby en Java.
  • Betere ondersteuning voor netwerksoftware, i.h.b. de ifconfig en ping commando’s.
  • Betere weergave van de gebruikersinterface van full-screen console programma’s als de file manager mc (Midnight Commander), de editors vim en emacs en de terminal multiplexer tmux.

Computerworld.nl vind zelfs dat Bash op Windows Microsoft Linux aan het worden is!

Zie dit artikel op zdnet.com voor de stand van zaken in de Fall Creator’s update. Veel verbeteringen, beschikbaar voor elke gebruiker, meerdere distributies etc.

Hans Lunsing
6 augustus 2016
bijgewerkt 19 november 2017

 

Categorieën: