Microsoft announced a new as-yet-unnamed version of Windows aimed at the so-called Internet of Things during its Build 2014 keynote in April, triggering an avalanche of questions. And now, three months later, the firm has finally released its first SDK for Windows IoT, letting developers get an early peek at this unique environment. Does this release clear up any of the questions?
Sort of. From what I can see, this is basically just another stab at a version of Windows aimed at embedded devices, an evolutionary design that is focused on interconnectivity with the cloud and Internet services. But it appears to eschew modern developer technologies, which is a bit curious.
Before getting into the details of what Microsoft just released, let's step back for a moment and examine the Internet of Things (IoT) and a planned Microsoft product that sort of called Windows for the Internet of Things (Windows IoT), at least for now.
At the Build 2014 keynote in early April, Microsoft's Terry Myerson provided what I consider to be the key segment of that presentation. During this, he suddenly announced a ton of important things very quickly, and we've been asking questions ever since. Among these announcements was a coming new Windows offering for very small devices that connect to the cloud, Windows IoT.
"There's a whole class of devices that our industry is abuzz with right now," he said at the time, "that are broadly called the Internet of Things. What's making these new devices possible are phenomenal breakthroughs in the silicon ecosystem. Where we used to have these large motherboards, we now have these incredibly small, incredibly powerful chips. We've ported Windows to ARM. But one company that's really done some incredible work lately is Intel."
He then showed off Intel's Galileo development board, which is required if you want to get started with Windows IoT development today. It's based around a (32-bit) x86 System on a Chip (SoC) design, called Quark, meaning it is a modern and miniature PC chip. (It's roughly analogous to a Pentium CPU, but in a tiny 5mm design.)
"You have to ask yourself, what kinds of devices are possible when a PC runs on something the size of an eraser?" Mr. Myerson asked at Build. He showed off a goofy large-sized piano, which was a good demo but a bit of an unfortunate choice, since the point behind the Intel SoC and Windows IoT, of course, is to put the power of Windows into the smallest possible—and connected—devices.
If you're familiar with Microsoft's various embedded OSes, all of which are in fact based on Windows to one degree or another, you may be wondering what the big deal is here. I guess I'd say it's three-fold. First, these devices—whatever they may be—can run real Windows apps, and that means that developers can leverage their existing skills, code and even actual applications in some cases.
Second, for (basically) the first time an embedded version of Windows is running on real Intel hardware, so there's no porting involved. Up until now—and, yes, Microsoft will continue to support its other embedded efforts—these sort-of Windows systems ran on non-Intel hardware (either exclusively or for the most part).
And third, for the first time a Microsoft embedded OS is designed exclusively for an interconnected world. These devices can connect to the Internet, can take advantage of cloud-based data, and can conversely feed cloud-based data stores with live information.
"The devices we are programming to are going to change," Myerson added. "Leveraging all the skills and tools [Microsoft] has, and leveraging all the creativity [from developers], we should be making amazing devices that do amazing things, and connect to the cloud. So let's make it happen."
The Build explanation for Windows IoT was a whirlwind and as such was pretty confusing. At the time, developers were told to obtain an Intel Galileo board and wait for a coming SDK that would let them get started with Windows IoT, If you're familiar with how these things work, you know that such an SDK would provide a nice peek at whatever capabilities the system has. So we've waited, about three months now.
And yesterday, Microsoft announced the Windows Developer Program for IoT, which includes the first-ever SDK release. It's very basic and curiously anachronistic: Instead of being based on some modern, .NET or Windows Runtime-type framework, this first version only supports the C++ programming language and, amazingly, the once-deprecated Win32 API. This is basically how Windows apps were developed in the 1990s, folks. (The .NET Framework first appeared in 2002.)
One tech reporter coolly suggested to me that it actually made sense that the IoT developer environment was based on C++ and Win32, because it allows applications to speak directly to the hardware. After openly (and jokingly) wondering why Microsoft didn't just support its legacy MASM assembly language programming tool too, I looked it up. And no worries, while C++ and Win32 are the only options available now in this initial release, "the intent in the future is to support the Universal app model announced at Build."
And that Galileo board requirement really is a requirement: Though you can develop Windows IoT apps using Visual Studio—including the free Visual Studio Express for Windows Desktop, which is amazing—you must have a Galileo board on which to run those apps. That is, there's no emulator as there is for Windows Phone and.x app developers. You communicate with the board via Telnet and remote debugging in Visual Studio. I don't have such a board, so I wasn't able to test this, but it should be clear to even non-developers that this strange set up—which harkens back to the days of "Pegasus," which became Windows CE in the mid-1990s's—is pretty old school.
If you're interested, you can sign up for the Windows Developer Program for IoT. There's a waiting list, but I believe Microsoft will actually send out the boards to those accepted into the program. You can also try to buy a board online.
While developer get cranking away on Windows IoT, there are a few more bits of info you might find interesting.
Windows IoT is not (necessarily) the name of the product. "For now, it's just Windows," Microsoft says. "It doesn't have a specific fancy product name yet." In other words, the name "Windows for the Internet of Things" isn't a name at all. It's a description. This is a version of Windows that will run on those devices that are part of the Internet of Things.
It won't just be Win32. While Windows IoT currently supports a "subset of Win32" and Arduino Wiring API set—well-understood by hardware kit developers—it will be expanded over future pre-release milestones to the Universal App model announced at Build and, presumably, a wider range of hardware components.
There's no UI, yet. This initial release has no UI, which explains the Telnet interface: This lets you run a command line against the Windows version on the hardware.
It's free. Microsoft announced this at Build, but it's worth repeating that Windows IoT is free to license. Or, "there is no cost for this version of Windows." Likewise, it's free to develop for. As noted previously, you can create Windows IoT apps with a free version of Visual Studio.