Last Spring, Microsoft unveiled their plan for Windows and the Internet of Things. It starts with the Raspberry Pi and Windows 10 IoT Core – a stripped down system with Windows API calls running on an ARM architecture. Yes, Microsoft is finally moving away from the desktop, building a platform for a billion Internet of Things things, or filling the gap left by tens of thousands of POS terminals and ATMs running XP being taken offline. Either one is accurate.
Earlier this week, Microsoft announced the first public release of Windows 10 IoT Core. This is the review, but here’s the takeaway: run. Run as fast as you can away from Windows IoT. It’s not worth your time unless you have a burning desire to write apps for Windows, and even then you could do a better job with less effort with any Linux distro.
When Windows 10 IoT was first announced, there was great hope for a Windows RT-like experience. Being able to run real Windows applications on a Raspberry Pi would be a killer feature, and putting Skype on a Pi would mean real Jetsons-style video phones appearing in short order.
The majority of interaction with Windows 10 IoT Core is over the web. After booting and pointing a browser to the Pi, you’re presented with a rather complete web-based interface. Here, you can check out what devices are connected to the Pi, look at the running processes, and run new apps. Think of this feature as a web-based Windows control panel.
While Windows 10 IoT uses the HDMI output on the Pi, this is merely informational, the video output capabilities of the Pi reserved for application-specific displays – digital signage, POS terminals and ATMs are where Windows 10 IoT Core excels. For general-purpose computing, you’re better off looking elsewhere.
Officially, the only way to install Windows 10 IoT Core is with a computer running Windows 10. There are a few ways around this is with the ffu2img project on GitHub. This Python script takes the special Microsoft .FFU image file format and turns it into an .IMG file that can be used with dd under *nix and Win32DiskImager on Windows.
Yes, Windows 10 is free for everyone with a relatively modern Windows box, but since the only requirement for running Windows 10 IoT core is putting an image on an SD card and monitoring a swarm of IoT Core devices, there is no reason why this OS can’t be supplied in an .IMG file.
After putting the image on an SD card, installing Windows 10 IoT Core is as simple as any other Raspi distro: shove the card in the Pi, connect an Ethernet cable, and give it some power. No, you don’t need a keyboard or mouse; there’s very little you can actually do with the Pi. In fact, the only thing that is displayed through the Pi’s HDMI port is a screen giving you the IP address and what USB devices are attached.
You do get a few options for language and network settings, and there are a few tutorials and examples – connecting to Visual Studio and blinking an LED – but that’s it. The base user experience of Windows 10 IoT Core is just network information, a device name, and a picture of a Raspberry Pi.
There are a few shortcomings of the Windows 10 IoT core for the Raspberry Pi. Officially, the only supported WiFi module is the official Raspberry Pi WiFi module with a BCM43143 chipset. By far, the most popular WiFi module used for the Raspberry Pi (and something you should always carry around in your go-bag) is the Edimax EW-7811Un, a tiny WiFi module that uses a Realtek chipset. Odds are, if you have a Raspberry Pi 2, that WiFi module you picked up won’t work. Common sense would dictate that you could install the Windows driver for the Realtek chipset, but this is not the case; no Windows driver will ever work with Windows 10 IoT core. Even devices from the Raspberry Pi foundation, like the Raspberry Pi camera, are not supported by IoT core
If you’ve ever wanted clearer evidence the Windows 10 IoT core is not meant to be an extensible system like every other Linux-based single board computer, you need only look a little deeper. Digital audio is completely ignored, and pins 8 and 10 – normally reserved for a 3.3V UART on every other Raspberry Pi distribution – are reserved pins. Microsoft managed to make a single board computer without a hardware UART.
Fortunately, some of these problems are temporary. A representative from the Windows On Devices team told us more WiFi dongles will be supported in the future; the only driver they were able to bring up in time is the official dongle from the Raspberry Pi foundation. A similar situation of engineering tradeoffs is the reason for the lack of UART support.
Who is this for, exactly?
The idea that Microsoft would put out a non-operating system without support for the de facto standard WiFi adapter, a hardware UART, or drivers for the majority of peripherals is one thing. Selling this to the ‘maker movement’ strains credulity. There is another explanation.
Let’s go over once again what Windows 10 IoT Core actually is. By design, you can write programs in Visual Studio and upload them to one or many devices running IoT core. These programs can have a familiar-looking GUI, and are actually pretty easy to build given 20+ years of Windows framework development. This is not a device for makers, this is a device for point of sale terminals and ATMs. Windows XP – the operating system that is still deployed on a frighting number of ATMs – is going away soon, and this is Microsoft’s attempt to save their share of that market. IoT Core isn’t for you, it isn’t for me, and it isn’t for the 9-year-old that wants to blink an LED. This is an OS for companies that need to replace thousands of systems still running XP Embedded and need Windows APIs in kiosks and terminals.
Save your SD card
For anyone with a Raspberry Pi 2 and an SD card, the only investment you’ll make in trying out Windows 10 IoT Core is your time. It’s not worth it.
While Windows 10 IoT Core is great for any company that has a lot of Visual Basic and other engineering debt, it’s not meant for hackers, makers, or anyone building something new. For that, there are dozens of choices if you want an Internet-connected box that can be programmed and updated remotely. The Cloud9 IDE for the Pi and BeagleBone allow you to write code on single board computers without forcing you to install Visual Studio, and Linux is king for managing dozens or hundreds of boxes over the Internet.
This is not an OS that replaces everything out there. A Linux system will almost always have better hardware support, and this is especially true on embedded devices. Windows 10 IoT Core is a beginning, and should be viewed as such. It’s there for those who want it, but for everyone else any one of a dozen Linux distributions will be better.