When Microsoft and Canonical announced that Ubuntu would run on top of Windows 10 in late March of 2016, many Linux fans could be forgiven for thinking that this was an early April Fool’s joke. But Ubuntu running on Windows is a serious and welcome addition that will make Windows a serious development environment.
Yes, you heard that right. You can now run Ubuntu on Windows. Or rather, the command line tools such as the popular Bash shell.
Sure, there have been environments such as Cygwin that have made it possible to port Unix and Linux tools to Windows, but now you can run actual Linux binaries without having to dual boot or set up a virtual machine. It’s no secret that many developers on both sides of the aisle have been enthusiastic about this development.
Running Ubuntu on Windows
If you’re itching to try it out, it’s comparatively easy. You just need preview build 14316 of Windows 10 (the fully-fledged version will be coming out with the Windows 10 anniversary edition in the summer of 2016).
You’ll have to go into the settings to enable “Developer Mode.” After that, you’ll be able to type “bash” in the command prompt and have the popular shell running.
Why is a company that once compared Linux and open source to communism now supporting Linux in its main operating system rival, Windows? The answer, as former Microsoft CEO Steve Ballmer put it, is “Developers! Developers! Developers! Developers!”
The years of the biggest animosity between Microsoft and the Linux community were the ‘00s, when developing apps still meant developing Windows apps (and to a lesser extent, Mac apps) on the desktop, with Windows having a virtual stranglehold on the market and the software giant unwilling to lose any ground.
While Microsoft Windows is still the most popular desktop operating system, its parent company can’t afford to be complacent. The new world of mobile and cloud computing has stolen a bit of Microsoft’s thunder.
More importantly, many developers are building web and mobile apps not on Windows machines. Look around at any developer’s conference and many of the laptops you’ll see in the audience will be Macs. Many of the servers these new startups are using are Linux, because that’s what they learned to use in their computer science courses.
The Windows command line, on the other hand, has seemed stuck in the MS-DOS days, Microsoft’s attempt to replace it with PowerShell notwithstanding.
In other words, Linux rules the brave new world of software development.
Scott Hanselman, a major Windows developer, has noticed the sea change. He would routinely find tutorials on web programming only to find a “$” prompt, which meant that the tutorial wasn’t for him as a Windows developer.
With Ubuntu on Windows 10, developers will be able to have access to the same command line tools they’ve used for years on Unix-like systems without having to install virtual machines or dual boot.
It’s not as strange as it sounds. Microsoft has supported Unix before. Back in the ‘80s, it was even a major Unix vendor with Xenix, before development was handed off to the Santa Cruz Operation (SCO). Microsoft even maintained a stake in SCO for years.
Microsoft decided that AT&T’s licensing for Unix was too cumbersome and partnered with IBM to build OS/2, only to develop Windows NT after disagreements with IBM over OS/2’s and Windows’ direction. Even then, Microsoft had a foot in the Unix world. NT supported a POSIX layer initially, and its own Services for Unix offered a Unix-like environment for companies that wanted to use NT but had a lot of investment in Unix software.
How It Works
Ubuntu for Windows is made possible by Microsoft’s Windows Subsystem for Linux. It’s a compatibility layer that translates Linux system calls into Windows ones. These tools are also command line only. There are no plans to offer graphical applications, though it’s already possible to install X11 on Windows. Since most popular Linux graphical applications have native Windows ports already, it’s not going to be that big of a loss.
It’s not a fully-fledged Linux system. Only the userland utilities are running, not the kernel, though the binaries are ELF binaries instead of Windows executables.
This is different from something like Cygwin where the developers have created a DLL that translates the Linux system calls to Windows. With Cygwin, the programs are recompiled into Windows executables.
Even with Ubuntu (sort of) running on Windows, there are going to be a lot of alternatives for people who want to tap into the power of Linux while still keeping Windows around.
Cygwin and Uwin are very popular environments for people who want POSIX-compatible tools but don’t want the overhead of virtualization or have to switch operating systems. MinGW and MSYS offer a lightweight alternative.
Virtualization through VMware and VirtualBox offer much more control over the operating system, but there’s a performance penalty on slower machines. A fast machine with a lot of RAM will offer performance comparable to a bare-metal installation.
Dual-booting has been the traditional option for people who want to run both Linux and Windows. It’s very easy these days, but it can be annoying to switch between operating systems.
With the ability to run Ubuntu on top of Windows, developers will have a powerful development environment combined with the wide range of hardware choices that Windows offers.