What sounded like an April Fools' joke turned out to be anything but: Core Linux tools, including the shell, are now available to run natively inside Windows 10 thanks to an official Microsoft project that translates Linux system calls.
Primordial as this project may be, it's promising. But here are four key points to keep in mind.
1. To use it, you'll need to jump through some hoops, and you may need to wait
If you using the Linux command line at all, odds are you consider yourself a pro. Consequently, the Linux subsystem in Windows is hidden behind a "for pros only" side entrance that you can only get into if you're running Windows 10 from the Fast Ring developer builds numbered 14316 or greater, via the Windows Insider program. (Go to the Windows Insider website to learn more about that.)
Note that once you're an Insider and on the Fast Ring, you may have to wait a few days to get build 14316 pushed to your system. As far as I've been able to tell, there's no quick way to get an .ISO of the latest build.
Once you do have build 14316 running, go to Settings > Update & security > For developers, and choose Developer mode. Then type
Windows features in the Search box and select "Turn Windows features on or off." From there, select "Windows Subsystem for Linux (Beta)."
Once it's installed, launch a command prompt and type
bash. You'll then be invited to download and install Bash from the Windows Store. (Don't bother searching for it in the Store interface; you won't find it there.) From then on, typing
bash from within Windows's CLI will pop you into the Linux subsystem and launch a command line from which you can launch any number of other applications, such as
2. These are real Linux binaries and run as-is -- to a point
When Microsoft first announced this during Build 2016, it emphasized that the Linux subsystem is not a VM. It's a translation layer, where Linux binaries run as-is and have their system calls translated into something resembling Windows system calls.
With this comes good news and bad news. The good news is the vast majority of Linux binaries, as long as they're compiled for Ubuntu Linux, can run as-is. Packages can be downloaded via apt, as they are in Ubuntu. A few brave souls have apparently even been able to run
gcc, a common Linux C compiler, although it's unclear whether they can be used to build working Linux applications within the subsystem.
Over on Reddit, there's now a thread where intrepid experimenters are trying to run various Linux applications in the subsystem and recording how much success they have.
3. There's still a lot of stuff missing, by design
With this first iteration of the subsystem, Microsoft wanted to provide the tools that Linux developers use most often (and miss most when using Windows). That means the bash shell, the ssh remote connection tool, and many others. It doesn't mean you should expect to be able to run Docker or VMs.
On the other hand, you might be surprised at what does work, evenearly on. In the aforementioned Reddit thread, folks have reported that while the Apache Web server does work, it's buggy and only functions on a local loopback network. But the fact that it works at all is impressive. Likewise, the
xorg client for X Windows runs, although it requires manual configuration and an X display server on the Windows host.
4. Don't expect Linux and Windows apps to be able to talk to each other directly
Linux apps running in the subsystem have no idea they're running in a subsystem. To them, their universe is a Linux machine, Linux applications won't know about the presence of Windows apps. Windows apps might in time be able to know about Linux apps, depending on how Microsoft expands on the functionality of the Linux subsystem and what kind of developer APIs Microsoft exposes.
That said, Linux apps can speak to the Windows world right now through two main avenues. The first is through the network, although that requires a Windows app to listen on the other end. Second is via the filesystem, since the Linux subsystem automatically creates mount points in
/mnt that correspond to drives in Windows. It doesn't appear possible to create files from within Linux -- this might be by design or a permissions issue -- but you can read and modify existing ones.