The Microsoft Build Conference took place a few weeks ago, and as always, it gave us a good glimpse into how Microsoft is shaping up and the ways in which it can entice developers. Let’s face it: Windows 10, in its current state, features only 60-70% of apps people would want — and the problem is compounded further on the phone platform. For the past few years, the reality of so-called universal apps has materialized, though even that still only created minor ripples in the Windows App Store quality. We finally heard of projects which allow for developers to (relatively easily) port over apps they created for the iPhone to Windows last year, along with a similar bridge for Android. This Android bridge was codenamed Project Astoria, and unfortunately was killed off earlier this year (which is quite a shame, as Android apps are far greater, though one could debate the quality of those in either store depending on price or content).
Yes, Android and iOS apps on Windows devices and computers. Sure, it’s not like any app would magically work just by running on the Windows platform, though I’m positive that this might not be fully out of the cards. Many of you might have already moved passed Windows, using only iOS or Android as the platform of choice for your daily needs. This is exactly the case in upcoming nations where the reality of the internet is only now dawning. Here, cell phones represent a large majority of traffic, and some of these countries have never gone through the complete timeline of laptops and computers as they evolved, certainly not in the social lives of citizens. This is the big target for many companies, and it is one way that Microsoft can reclaim some ground. For industrialized countries, this could also prove attractive — especially if the boundaries between ecosystems are bridged. It is clear that by developing Office on Android first, and allowing Cortana to display notifications from Android devices on Windows PCs, Microsoft’s goal today is not entirely to make Windows the dominant platform. Allowing it to be transparent with what types of apps PCs can run, and how developers can best create those apps is far more important.
Linux on Windows: Who is it for?
I wanted to lay down the groundwork for the implications this new Windows feature creates. It is essentially a full commandline Linux environment, and for this reason already, not many will have the courage, or even the need, to check it out. Linux is another operating system, one which Android and many businesses use at their core. While graphical Linux releases certainly exist such as Ubuntu, at the core of these, a powerful commandline engine drives every feature and click. When it comes to server management, Linux is clearly a winner, and doing these from within a Linux environment (I.E. connecting to other servers, compiling code, etc) is a huge convenience. You no longer have to run a virtual machine, no longer have to worry about an emulated environment which you need to change makefile arguments in when you build something. This is not a virtual machine – which is both a curse and a blessing.
The curse of being native, for now
Since this is integrated into the Windows core and Kernel, Linux has some limitations as of now. It cannot run graphical apps (no games, no programs, no Orca, no GTK) and certainly getting them to run is not yet possible. Many devices and connections are not implemented yet as of this beta. Let’s take a look at the /proc directory, which gives you an idea of what is available from the kernel:
1 2 cmdline filesystems loadavg mounts self sys version
14 24 cpuinfo interrupts meminfo net stat uptime
Some of these though are empty: The TCP file in /proc/net has nothing, so no ifconfig or dhcp management — at least, not as of this beta.
There is of course no device list, no way to interface with sound cards yet, thus any tts or sound-based testing will not work.
The blessings of going native
I possess far greater excitement for what this current implementation does allow than dismay for what it does not. We have native mounting support, which means that all file systems and drives connected to your computer show up under the /mnt directory as a mountpoint, such as /mnt/e. There is full compatibility with running Debian 64-bit code. If you wanted to, you could install Python and start compiling basic code, and in other languages, you could compile your code and run the binary elsewhere — that’s still one less step to do. You can install GCC, all of the compile and build tools, to your heart’s content. To test this, I also downloaded a few programs, such as TeamTalk, or a simple linux unit conversion commandline tool, as well as the popular perl twitter client oysttyer The nice thing is that these all worked great, although Team Talk proved my theory that as far as hosting a server, there are still no TCP/IP stacks fully implemented, but at least basic requests work. It was a good feeling to natively run Linux tools and commandline programs. For beginners or advanced users who want a good capable simple Linux environment, this is worth your time.
How do you install it?
You know a review is good when you spend less time talking about how a product works than what it is and what it allows / does not allow for. It shows that the implementation is simple. You need to be running the latest Insider build of Windows 10 (10328 as of this writing, though it was first in 10316) – anyone can still become an insider, though I’m not sure if I recommend trying it in a virtual machine as by that point you might as well just fire up Linux itself. With this, Microsoft took a developer-centric approach: To get Linux on Windows to work, simply open settings, go to update and security, for developers, and enable developer mode there. Next, press Windows Key + X to bring up the power menu, choose programs and features, and go to the “turn Windows features on and off” section. Here, be sure to check the “Windows Subsystem for Linux” option and press OK. After the restart, all you have to do is type bash into a run dialog and press y to grab the components from the store.
After this, you will be asked for a default user log-in (not tied to your regular home folders though in linux) and you can begin using the environment.
A couple of odd things.
If compiling code in paths where spaces exist, commands will break. Presumably using quotes might fix this, however for now I just made sure that my folders resided in /mnt/c/ a one word directory name.
Along with this, I’m still unsure as to where the file system image for linux is stored at, or how I could access my “home folder” of Linux from within File Explorer. This is not entirely documented, but I suspect will not be possible, as the lxcore service mounts the image of the entire Linux OS structure.
Another odd behavior is the /proc/mem file: You can tell that the memory information there is simply a dummy file. Again, these are just external statistics that the kernel might not be able to properly gather. The fact that hundreds of other functions which make running a Linux app are there is a good start already.
Conclusions, final thoughts
If you want to go 100% into geek territory, We recommend you read this blog post from Microsoft on how the Linux Subsystem is implemented. It is definitely fascinating… If you’re a coder, that is.
In the broad spectrum though, Linux on Windows allows us to see where the Android bridge could have headed, and just how much work they put into trying to get Linux applications to natively cooperate with the NT kernel. It’s not easy, and Microsoft has publicly embraced open-source, ever since Satya Nadella became the CEO. It’s good news for the future of a company which needs to go through a transition from enterprise to cloud, from physical ecosystems to universal and service-based products. Microsoft can do it. This is just one small step in an overall change in the picture.