Ayesh Karunaratne: Full-time traveler, freelance software architect and security researcher
Tue, 2016-08-02 20:30
I am kind of a strong believer that you don't need a GNU/Linux operating system to be a software developer. I have several friends who own happily use MacOS and Linux operating systems. I never missed any of those awesome features the GNU ecosystem had, thanks to the
msys packages, and everyone who spent their valuable time making sure their software run well on Windows as well. If there is no way to run a particular software or tool on Windows, you always have VMWare or Hyper-V to spin a VM of any operating system.
When I saw the news about Windows Subsystem for Linux (WSL), I was rather expecting a virtual machine at first. I also watched some videos from Microsoft WSL blog, and they all looked surprisingly good. I jumped in and upgraded to Windows 10 anniversary release as soon as it was released. The update took several minutes, but the upgrade was well worth it.
Sure the Windows 10 anniversary update comes with a bunch of new features and improvements, but arguably, WSL is the best new feature that can change how many developers would work. It is not even mentioned in the Windows 10 features page.
- You need a 64 bit processor for this. Head over to the Windows update, and update to the latest version. The update will take several minutes to complete.
- Once done, search for
Use developer featuresin the start menu, open the control panel item, and opt to "Developer mode" if you have not already.
- Next, search for
Turn Windows features on or offin the start menu, open the control panel item.
Windows Subsystem for Linux. It says Linux and I really hope other Linux OSes will be supported soon as well. At least Debian at first given Ubuntu is based on Debian. You will have to restart your computer.
- Open the good ol' command prompt, and type
bash. You will be prompted to accept the terms and license. This will take a few minutes to complete. A quick sniffing revealed it's downloading what appears to be a standard Ubuntu image (
https://wsldownload.azureedge.net/trusty-server-cloudimg-amd64-root.tar.gz). You can do the same with the
Microsoft has taken a really smart way with WSL. It is not without its drawbacks, but what you get is basically an Ubuntu virtual machine, with all your disk partitions mounted, and hardware readily available. This is different from the VMs, but it is not exactly a container either.
Your disk partitions are mounted at
/mnt/d, etc. each representing the partitions in your hard disk. USB drives get mounted automatically too, but it requires you to restart the bash prompt. You can access any file (some will require
sudo from within both systems. WSL is located in
C:\Users\USERNAME\AppData\Local\lxss, where the entire file system is readily available at the
Your CPU and other hardware is shared too. There is no dedicated RAM allocation.
free command reports memory usage that matches with Windows Task Manager. The processes are different and you cannot access Windows processes from Ubuntu (for obvious reasons).
top command does not show anything about the host.
Quite interestingly, the network interface is shared between Ubuntu and Windows. For example, you can run Apache on Ubuntu, and it will work quite well in your Windows browser. This is actually one of the best features of WSL. Ruby and Python for example does not work well with Windows, and this can be handy to overcome that. It also means no more Apache module compilations, PHP module incompatibilities, etc. Note that this is still a beta feature, and I wouldn't recommend you to run an actual server stack with this. WSL, from what Microsoft says, is a tool to have a POSIX environment within Windows and to help you have a quick Linux system to get particular tasks done; not a way for complete virtualization in harmony.
You can mix and match servers too (even though it would be a nightmare to maintain). Apache in Windows, sendmail and Redis on Ubuntu, etc.
To test this, I installed Apache2 on the Ubuntu WSL, and opened the port (I already had an Apache Windows process listening to port 80, so I had to change it in Ubuntu).
- It is still in beta stage, so it is probably too early to point out the bugs.
aptworked beautifully, and every package I tried so far worked great. I still have to run a benchmark to see how Ubuntu can perform within Ubuntu. I however read that some packages do not work quite well yet.
- Even though Ubuntu brought us this far, we are still limited to cmd.exe. It should work with Powershell as well, and there should be a way to integrate this with terminal emulators such as Console2 and Cmder.
- When you close the last
bash.exeprompt, the Ubuntu subsystem gets terminated too. Your cron tasks will not work, background tasks will terminate, and so on. If you need to keep something in Ubuntu running, you need to keep
bash.exeopen all the time.
Bash on Ubuntu on Windows provides a native subsytem that can directly run Ubuntu from within Windows. It is not virtualization, not containerization, but more like how Wine runs Windows on a Linux system. WSL is doing the same thing, in reverse.