In case you missed it, Microsoft made a bunch of Linux-related announcements recently. First, we found out Microsoft was offering SQL Server running on Linux. Then at Build last week, Microsoft introduced “native Ubuntu Linux binaries running on Windows” and treated us to a demo of Bash on Windows 10.
The fact that Microsoft now supports SQL Server on Linux isn’t really a technical development -- it’s a business move. Fortunately for Microsoft, the Ballmer blinders are gone, and the company can see that Linux is the OS of choice for our cloud future, not Windows. Microsoft lost that battle a long time ago. Not surprisingly, the Azure cloud folks have taken the lead in pushing Microsoft toward supporting Linux (and other open source cloud-related technologies, including Docker, Kubernetes, and various NoSQL databases).
Offering Microsoft SQL Server on Linux will likely increase revenue, not harm it. All of the major competitors to Microsoft SQL Server run on Linux, but SQL Server didn’t, so Microsoft was losing sales and associated support contracts. The truth is that Microsoft SQL Server is a solid database and should have begun the multiplatform process a long time ago. The upshot is that a bunch of old Windows systems that still run Microsoft SQL Server will become Linux boxes, which for Microsoft is better than them becoming Linux boxes running Oracle or DB2.
The Linux-on-Windows announcement is more interesting, but requires some clarification. This is not Linux running in a VM -- there's no Linux kernel present, nor a hypervisor emulating hardware. This isn’t Cygwin, which is a Unix environment compiled specifically to run on the Windows platform. It’s not a container, either. The Ubuntu environment running on Windows 10 contains binaries identical to the binaries running on an Ubuntu platform -- an ELF executable.
What Microsoft has done is build a system call translation layer. When a Linux binary makes a syscall, Microsoft’s Windows Subsystem for Linux translates it into a Windows syscall and delivers what the binary expects. It’s akin to WINE, which does something similar for Windows binaries running on Linux. Also like WINE, it’s not magic -- many binaries won’t "just work." This is only the beginning of a long process for Microsoft.
The real question: Why is this happening? Why did Microsoft suddenly decide after all this time to partner with Canonical and write this translation layer? Primarily for a very similar reason that it's releasing SQL Server for Linux -- the company is losing ground at the desktop level with developers, system admins, devops engineers, and the like. Today all those folks are working more on Linux server platforms than on Windows, and using Windows on your laptop while developing for Linux is cumbersome at best and useless at worst.
Developers can’t easily stand up a dev environment for a Linux-based app on their Windows laptop. They need somewhere to run that environment, which becomes either a remote server or a VM running on their Windows installation. Pretty quickly, the speed bumps incurred by such a setup are visible, so the developer heads to Linux on the laptop or (more commonly) picks up a Mac, since the BSD underpinnings of OS X make it much simpler to get where they need to be, natively.
This is why you look around development houses, conferences, and other areas where developers tend to congregate and you see a sea of Apple logos. Fundamentally, working on *nix systems from any point of view is easier when you’re using a *nix box yourself. With the world moving to a cloud powered mostly by Linux, that trend is undeniable.
This isn’t Microsoft embracing Linux, even as part of its traditional “embrace, extend, exterminate” scheme. This is Microsoft belatedly taking a step toward Linux acceptance. Microsoft will face big problems down the road due to this procrastination, but at least it has begun the process. Before, this would have been an impossibility because the powers that be refused to see what was apparent to everyone else: Linux was winning the cloud server space, and for better or worse, that’s where the world is headed.
Microsoft has a long and storied history of getting to the party late, all the way from the apocryphal “640K ought to be enough for anybody” statement to completely ignoring the Internet to realizing the virtualization thing might be a big deal. Microsoft is not really an innovator. Once it steps into a space, however, it brings its Goliath weight and pour resources into it until there's a viable, competitive product or service.
In this case, Microsoft is very, very late to the game and isn't offering a competing product -- it's trying to accommodate the competition in an effort to save itself. We haven't seen that before, and it will be interesting to note how it all plays out.
In the meantime, I’m pretty sure there won’t be a mad rush of devs and admins dying to run a highly limited Ubuntu user space on Windows 10. They'll stick with their Macs and Mint boxes.