Like most of the rest of the world, I was pretty sure that Microsoft's announcement that they had partnered with Canonical to get Ubuntu on Windows 10 was an April Fool's joke. Especially since it really didn't pick up news coverage until April 1st, despite being announced a couple of days prior. As it turns out, it's totally real and it's happening.

If you're looking for a tutorial on how to get it running, this is a decent one.

From a business perspective, I think it makes a ton of sense for both companies. Microsoft has been getting stomped by Apple when it comes to developer market-share, and for good reason. Poor support for many open source libraries and workflows, including the total absence of a usable terminal, results in a really crippled development experience on Windows. How many web developers have you seen not using a MacbookPro in the last 10 years, for example? By supporting the full Ubuntu stack on Windows, users can now natively use many of the tools, programs, and workflows they prefer, but in Windows.

On the other side, Canonical has been trying for years to get into enterprise, without much success. The fact of the matter is that Microsoft has a ton of expertise, resources, and entrenched products for enterprise IT, and it would be a huge hassle for large IT departments to suddenly migrate or adopt Ubuntu workstations for employees. By partnering with Microsoft, they can get Ubuntu deployed on enterprise workstations without impacting enterprise system administration.

In short, I think it's actually a pretty brilliant move for both companies. I also think it's a huge win for free & open-source software. It's an acknowledgement of the value, prevalence, and impact of open source software, and will make FOSS programs accessible to a huge demographic that may never have used them otherwise.

I'm also excited about it because it may make it much easier to provide Windows support for programs primarily developed in *nix environments. This has long been a pain point for Ettus Research's driver package, UHD, and the GNU Radio project. Building Windows support into programs is rarely easy, and can in some cases become bizarrely complicated if you aren't already familiar with the intricacies of MSVC and Windows development. My understanding of the Ubuntu-on-Windows design is that it's actually the Ubuntu OS making direct calls into the Windows kernel. This should mean that programs written to support Ubuntu could pretty easily support Windows. In the ideal scenario, this would mean getting Windows support 'for free', which would arguably be one of the greatest things ever.

In addition to my X1 Carbon that I run Fedora on, I also have a SurfacePro4 for work. I was eager to try out Ubuntu-on-Win10, and so this morning I strapped on my parachute and made the jump.

This turned out to be a really poor decision. The Windows Subsystem for Linux (WSL) is still highly beta, and so, as described in the guide linked above, in order to get access to it you must sign up for Windows Preview Builds. Microsoft is pretty clear that the 'Preview Builds' are unstable, but as it turns out, calling them 'unstable' is perhaps too kind. As soon as I booted into the preview build, it became clear that I had made a terrible mistake. Some pretty important features were completely broken, including my ability to access internal company resources through MS Direct Access. I didn't think this was a big deal, as you can turn Preview Builds on / off.

This is when I discovered the giant proverbial hole in my parachute in the form of a bug that makes it impossible to turn the Preview Builds off. This may be one of my favorite bugs, ever. In short, I can't get back to a stable build without re-installing Windows. Such programming. Much Microsoft. Very stereotype.

So, anyway, since the bridge behind me had burned to the ground, I decided to go ahead and give this thing a whirl. I started out by installing a bunch of dev tools, including git, and then checking out and building UHD from source. This worked perfectly, the first time, without any issues.

Unfortunately, I then discovered the first major constraint. It looks like access to hardware devices is pretty limited. As an example, you can't even ping:

This was surprising, because using apt to update the system worked without issue. It must be some special set-up, though, because ifconfig also claims ignorance:

I got a similar result when I tried to use a program that initializes a libusb context:

What's interesting, here, is that libusb1.0.0-dev is actually installed... you just can't use it.

I then tried to install the Boost libraries so that I could install GNU Radio, and got this message:

This is enough to convince me to stop trying for a while. Unfortunately, I can't make much use of this in its current state. I also can't turn it off, though, so I suppose I'll keep playing with it over the coming months to monitor its progress.

Overall, I'm pretty excited about this, and am very happy that Microsoft and Canonical decided to play ball together. I think this could turn out really great for the free software & open source communities.