Met veel enthousiasme is Ubuntu on Windows bekend gemaakt door Microsoft en Canonical. Het maakt deze zomer standaard onderdeel uit van Windows 10. Ubuntu on Windows, wat is dat nou weer?

Ubuntu on Windows. Dat klinkt als een virtual machine. Je installeert VirtualBox, maakt een nieuwe VM en installeert Ubuntu 16.04 LTS vanaf de dvd die bij dit magazine zit. En voila: Ubuntu on Windows. Toch is het gezamenlijke initiatief van Microsoft en Ubuntu niets van dit alles. Linux Magazine installeert Ubuntu on Windows. 

 

Geen VM

Ubuntu on Windows gebruikt geen VM en er komt geen hypervisor aan te pas. Het belangrijkste verschil tussen het draaien van Ubuntu in een VM en Ubuntu on Windows, is dat de VM een complete computer is. Deze boot en draait de Linux kernel met Ubuntu, heeft een virtuele netwerkadapter en een eigen IP-adres. Je kunt netwerken tussen de host en de guest als je wilt. Ubuntu on Windows heeft dat niet: het draait native en lokaal. 

 

Geen Cygwin

Vroeger had je al de MKS Toolkit (bestaat nog steeds), een commercieel Windows-product met Linux-commando’s gecompileerd voor Windows. Je kunt hiermee bijvoorbeeld ls en vi gebruiken op de Windows-opdrachtregel en nog veel meer integratietaken uitvoeren. Open source doe je het met de GNUtools voor Windows of, beter nog, met het populaire open source Cygwin voor Windows. Microsoft zelf had vroeger al een POSIX.1 subsysteem, maar dat is uit gefaseerd vanaf Windows XP. Daarna is Interix gebruikt voor het Microsoft-product Windows Services for UNIX. Na de overname van Interix door Microsoft is het product geëvolueerd tot het Subsystem for Unix-based Applications (SUA). Al deze producten zijn niet te vergelijken met Ubuntu on Windows. Alle genoemde tools bieden native Windows-support voor UNIX/Linux-commando’s, tools en services. Het zijn tools die leven in de Windows-wereld, simpel gezegd zijn het dus .exe bestanden. Ubuntu on Windows leeft in de Linux-wereld: je draait Linux-executables (elf-executables) op Windows. Microsoft hoeft die dus niet te onderhouden, het zijn de gewone Ubuntu packages uit de Ubuntu repository die je op Windows draait! 

 

Aan de slag

Om te beginnen moet je de Windows 10-preview hebben van build 14332, die je (gratis) als evaluatie kunt downloaden bij Microsoft als je bent aangemeld als Insider (eveneens gratis). Maar eerst moeten we “Windows on Linux” inschakelen: Installeer en/of start VirtualBox op je Linux werkstation. Installeer hierin de gedownloade preview van Windows 10. Schakel de ontwikkellaarsmode in, kies de Insider preview download fast. Daarna schakelen we het Linux subsysteem voor Windows in. Vervolgens roep je bash aan. Hiermee wordt Ubuntu gedownload en een paar minuten later kun je aan de slag! Volg ons 10-stappenplan in het kader om snel aan de slag te gaan.

 

User-mode

Het Ubuntu Linux-image is samengesteld door Canonical, maar bevat alleen de user mode code. System calls vanuit deze userspace worden direct naar het nieuwe Windows 10 kernel subsysteem gestuurd. De Windows 10 kernel doet zich voor als een Linux-kernel, doordat Microsoft er een Linux-subsysteem aan heeft toegevoegd: het Windows Subsystem for Linux – WSL – bestaat uit lxcore.sys en lxss.sys. Zo draai je applicaties die voor Linux zijn gecompileerd (elf-binaries) direct in de Bash shell binnen Windows. Het is uiteraard niet mogelijk om Windows-tools aan te roepen in deze shell, want dat zijn immer Windows-binaries. Ook andersom, het aanroepen van Linux-tools vanuit Windows Powershell, is logischerwijze niet mogelijk.

 

WINE

De beste vergelijking die we kunnen bedenken is die met WINE. WINE vangt Windows-system calls af en vertaalt ze naar Linux system calls en maakt het zo mogelijk Windows-binaries te draaien op Linux. Met WINE installeer en draai je bijvoorbeeld een oudere versie van Microsoft Office op Linux. WINE is buggy en sloom, dat komt vooral omdat er wordt gepoogd complexe grafische Windows-applicaties te draaien op een eveneens complexe grafische Linux desktop. Veel moderne Windows apps hebben problemen onder WINE. Bash on Ubuntu on Windows is een WINE for Windows, een soort omgekeerde WINE. Linux-systemcalls worden hier opgevangen door de Windows-kernel met WSL en worden als Window-systemcalls afgehandeld.

 

GNU

Linux is eigenlijk GNU/Linux – GNU-tools met een Linux-kernel. Een alternatieve kernel zoals Hurd gecombineerd met GNU-tools heet dan GNU/Hurd. Ubuntu on Windows zou je dan eigenlijk GNU/Windows moeten noemen, GNU tools met een Windows-kernel. Maar zonder ‘Windows’, want er is geen grafische omgeving. Eigenlijk zou je de term ‘Linux’ binnen Ubuntu for Windows niet moeten gebruiken, het heeft immers niets te maken met Linux. Omdat Ubuntu in de distro ook tools toevoegt aan de GNU-set, is een nog beter benaming: Ubuntu/Linux (Ubuntu tools op de Linux kernel) en Ubuntu/Windows (Ubuntu tools op de Windows kernel). Maar wacht, daar zijn we weer: Ubuntu on Windows. 

 

Ubuntu draait ook op de FreeBSD-kernel. Naar analogie van Ubuntu on Windows zou je dit ook geen Linux meer mogen noemen. Een betere benaming is Ubuntu/FreeBSD of Ubuntu on FreeBSD. De maker noemt de bèta UbuntuBSD en het is gebaseerd op Ubuntu 15.10 en de FreeBSD10.1-kernel: https://www.ubuntubsd.org.

  

Voor wie?

Ubuntu on Windows is duidelijk bedoeld voor Windows-ontwikkelaars (in het bijzonder ontwikkelaars van webapplicaties) om ruby, node en bijvoorbeeld Java apps te testen. Het kan de productiviteit van de ontwikkelaar verhogen als je hierdoor geen dual-boot, geen Mac of geen VM meer hoeft te gebruiken. Het is puur opdrachtregel georiënteerd, er is geen grafische omgeving en er draaien geen Linux desktopapplicaties. Door het ontbreken van de grafische omgeving is Bash on Ubuntu on Windows stabiel en werken veel tools, maar niet alles is zoals je verwacht. 

 

Best compleet 

Voor een eerste versie is Bash on Ubuntu on Windows best compleet te noemen. Je installeert Ubuntu-packages met apt-get, edit bestanden met vi of nano, compileert apps met gcc (na installatie uit de repository). Zelfs de fork-systemcall werkt, er is een /proc en er is een /dev/null. Je installeert zonder probleem Ruby, Php, Perl, Python en meer. Maar niet alles werkt. Vooral waar interactie is met het bestandssysteem of het netwerk, lijken problemen voor te komen (ping en df geven bijvoorbeeld foutmeldingen). Omdat je geen Linux-kernel hebt, zal iets als Docker ook niet werken. Windows en Linux vormen gescheiden werelden, er is geen interactie op het gebied van processen en commando’s. De enige interactie die mogelijk is tussen beide werelden, is het bestandssysteem. De C:-drive van Windows zie je terug on /mnt/c, dat is handig om in beide omgevingen toegang te hebben tot bijvoorbeeld de sourcecode van je project. 

 

Gemengde gevoelens

Het was te verwachten. Het product roept gemengde en soms heftige gevoelens op, bij zowel open source fans als bij sommige Windows-ontwikkelaars. Maar bekijk het van de positieve kanten: het is goede reclame voor Ubuntu en open source in het algemeen en Windows-ontwikkelaars kunnen native open source-tools gebruiken. Prima toch?

 

‘Ubuntu on Windows’ op Linux in 10 stappen

 

1. Meld je aan bij Microsoft als Insider (via https://insider.windows.com) en log in.

2. Download het ISO-bestand voor Windows 10 preview build 14332 of hoger.

3. Installeer en start VirtualBox. Maak in VirtualBox een nieuwe VM aan en koppel hier de gedownloade ISO aan.

4. Boot de VM vanaf de ISO en installeer Windows 10.

5. Schakel in Windows 10 de ontwikkelaarsmodus in 

6. Login binnen Windows 10 in Insider en zet Preview updates op Fast 

7. Schakel het Windows-subsysteem voor Linux in en reboot daarna de Windows 10 VM (zie afbeelding 3)

8. Open PowerShell op Windows 10 en tik bash en automatisch wordt Ubuntu on Windows gedownload van de Windows Store

9. Vul een Linux loginnaam en wachtwoord in zodra hierom gevraagd wordt

10. Plaats eventueel Bash on Ubuntu on Windows op je bureaublad, start bash en test!