As someone who cut their teeth on early versions of Unix, one thing I’ve really missed on Windows is the wide variety of powerful and flexible commands that come along with most Unix distros. As a practical matter, the Windows shell (and PowerShell) have grown over time to provide essentially the same capabilities, but why relearn everything? Especially for those of us who also have Linux-based dev systems, and Linux-based servers, it is really painful to have to do everything two different ways. Cygwin is nice, but not really seamless or all-encompassing. So I couldn’t wait to try out Canonical’s Ubuntu for Windows when Microsoft announced it would become part of Windows 10. I snagged the Insider build as soon as it was available, and so far, have not been disappointed.
Presumably this will be easy once the final “Anniversary Edition” of Windows 10 ships, but for now it involves a few steps. For starters, you need the latest Windows Insider preview build 14316 installed. Then, you need to make sure you have Developer Mode enabled in Settings, and add the Windows Feature for “Windows Subsystem for Linux (Beta)” (which may in turn require a reboot). Then you can type bash at a command prompt, and the system will download a compressed Ubuntu file system, extract it, put your disk drives under /mnt, and you’re good to go! Microsoft’s full set of instructions and disclaimers are online.
It’s a real productivity assist to have your favorite aliases available wherever you’re working, so the first thing I wanted to try was to bring over a .bashrc. I’ve gotten pretty lazy about my “.” files over the years, so I figured my simple one wasn’t a real test. Instead, I snagged this fairly complex, 99-line, .bashrc file, that tested out fine on my CentOS-powered server, and it did equally well on my Windows 10 + Ubuntu system. Cool!
Somehow, no matter how much I read that this was “really” Ubuntu, I kept expecting something fairly limited, and certainly didn’t expect I could simply grab packages. But there it was, apt-get. I almost didn’t dare try it, but it worked! For example, git is not part of the default installation, but it was easy enough to have the needed packages retrieved and installed with a single command.
As a longtime Sun employee, my favorite version of Unix has always been BSD. So I was really jealous that all my Mac-owning friends could use all the great commands that I’d gotten used to — want to get a file, use rcp (aka scp); want to archive, use tar, or gzip; and so on. The great thing about modern distros is that they’ve mostly absorbed all the possible Unix command sets into one big, glorious one. So these command are all pretty much either there, or can be aliased to a newer version (like vi to vim).
Microsoft is very clear that this is a super-early release. As they state, the terminal emulation isn’t perfect. Many of the control characters don’t do what they should, and top doesn’t work right, for example. But I was amazed at how well all the basic stuff works.
At some point you do hit the limits of what’s possible. For example, there is a netstat command, but it can’t find the devices it expects under /proc, so it doesn’t report much. I guess I can imagine even that being fixed before the final shipment, but it’s a pretty small price to pay to have a few system commands not work.