With the start of the Build conference a day away and the official Microsoft Build app now available, we have a good idea about most of the sessions and the general Azure slant of the developer offerings. As befits the occasion, Microsoft is sure to whip the Windows faithful into a frenzy.
Andy Weir at Neowin provides a good look at the Windows 10 hyperbole already flying around: "You are all gonna FREAK OUT when you see this," tweeted senior PM Rich Turner. "These features… are going to CHANGE EVERYTHING. No joke," from Scott Hanselman, principal PM for Azure. Both tweets have since been deleted.
I've been looking at the schedule, the speakers, and the details, and wondering, "Where is WinRT?"
For those of you who haven't been at this game long enough, let me start with a quick history of modern Windows development.
Old-fashioned Windows programs -- the ones you likely use every day, such as Internet Explorer and Microsoft Office -- rely on the Win32 Application Programming Interface, the set of system calls that lets programs talk to the operating system. Charles Petzold wrote the first widely used book about the Win32 API in 1988. The Win32 API grew and morphed, reaching its pinnacle in Windows 7.
When Microsoft announced Windows 8, it also announced the new Windows Runtime, a set of APIs (commonly called WinRT) that truly revolutionized Windows programming. The "Metro" apps you may recall from Windows 8 and 8.1 are based on WinRT. I'll gently sidestep the discussion of how Microsoft inexplicably built computers that would only run WinRT and instead move on to mobile.
WinRT was the great rallying cry for mobile computing -- the nexus, at the time, of the mobile-first Windows world. It has all sorts of mobile-friendly capabilities, but relatively few developers have chosen to use it. There's a reason why -- many reasons, actually.
[Windows 8] provides a common interface and programming API set from phones to servers. It is also the beginning of the end of Win32 applications on the desktop. ... Microsoft will continue to support Win32, but it will encourage developers to write more manageable and engaging applications using WinRT.
This, of course, was rubbish -- WinRT running on a phone and on a Win8 PC were completely, torturously different, and server adds an entirely new can of worms.
Microsoft pressed Silverlight -- its version of Adobe Flash -- into service as a development platform for Windows Phone 8. There was a time after the release of Windows 8.1 when developers had to choose between Silverlight 8, Silverlight 8.1, and pure WinRT, and they could only get into the Windows Phone Store if they made the hop to WinRT. I started screeching about the lack of support for Silverlight developers back in June 2011. Although Microsoft still lists Silverlight -- and offers it as an Optional update -- it's been abandoned. Devs who devoted months and years to figuring it out were tossed under the WinRT train.
With Windows 10, Microsoft announced (and repeatedly renamed) its new Universal Windows Platform. UWP incorporates WinRT but goes beyond, as David Hale says in this MSDN article:
Windows 10 introduces the Universal Windows Platform (UWP), which further evolves the Windows Runtime model and brings it into the Windows 10 unified core. As part of the core, the UWP now provides a common app platform available on every device that runs Windows 10. With this evolution, apps that target the UWP can call not only the WinRT APIs that are common to all devices, but also APIs (including Win32 and .NET APIs) that are specific to the device family the app is running on. The UWP provides a guaranteed core API layer across devices. This means you can create a single app package that can be installed onto a wide range of devices. And, with that single app package, the Windows Store provides a unified distribution channel to reach all the device types your app can run on.
All of the UWP programs are destined for the Windows Store -- at least that's what we're supposed to expect. But take a look at what's happened, what's available in the Windows Store now. Microsoft originally put Metro apps in the store, then WinRT apps, and now UWP apps, and the pickings are embarrassingly slim.
We have a handful of Windows Store/WinRT apps from Microsoft: OneNote, Sway, and arguably Maps are ready for prime time. Then there's all the rest: Edge, which is only now starting to sprout extensions; the recently announced rework of Skype; and the almost-promised working version of OneDrive (see the screenshots on Thurrot.com). Microsoft has been working on these big apps for more than a year -- nearly two years on Edge -- and they're shadows of what they should be by now.
Microsoft itself is shunning the platform. The severely stunted Office Mobile is still around, but Office itself doesn't run on WinRT. The built-in Windows 10 apps are, with few exceptions, stick figures of real apps and don't cover many basic features. The WinRT Mail app, for example, is only now getting the ability to pop out messages, fer heaven's sake. WinRT Photos (the Windows 10 Photos app) doesn't hold a candle to Google Photos. And so on.
Companies have been pulling their WinRT Microsoft Store apps left and right -- and few new ones are showing up to stem the tide. The new Instagram app (still in beta and quite unstable) is an iOS port, but it was ported using Facebook's tools, not Microsoft's Project Islandwood. The Facebook app is still unstable. The Twitter app doesn't come close to its analogs on iOS and Android. There are exceptions: The Dropbox app, at least in my experience, works pretty well.
You might attribute the lackluster showing of Windows Store apps to teething problems, but the developers behind them have been working with WinRT for years.
UWP is supposed to be the magic glue that holds it all together. As Gartner said of WinRT, it's a "common interface and programming API set from phones to servers" now extended to include HoloLens, Raspberry Pi, Surface Hub, and every IoT device galloping out of the stable. Yes, UWP has its App Model, device families, core APIs, and effective pixels. What it doesn't have right now is an example of a robust, scalable app. Edge is the only example that comes close, and it's a long way from being usable.
You have to wonder what's so infernally difficult about WinRT. Moreover, if Microsoft can't come up with decent WinRT apps quickly, how on earth can business developers succeed? Or to the point, why would corporate developers choose WinRT when there are so many good alternatives?
Which brings me back to the elephant in the room: Microsoft, as my colleague Paul Krill asserts, isn't giving up on UWP. Instead, UWP is being redefined in ways that aren't at all clear. The recent acquisition of Xamarin shows that UWP can be redefined to include Android and iOS apps, if they're built with Microsoft's .Net. Who knows what else awaits absorption into the UWP cabal?
I think you're going to see WinRT marginalized in the next few years. It wouldn't surprise me one bit to watch it wither away, like Silverlight -- ignored for a time, then kind of exiled, with no decent burial. Developers will complain as they're pushed aside, but Microsoft will latch onto the next shiny object and let devs read the tea leaves -- or simply sway in the wind. ActiveX went that way, too.
If you want to build an app that runs on PCs, Windows Phones, Xbox consoles, and HoloLens simultaneously, then WinRT is your only choice. For anything else, you have to ask if there's a better tool for the job at hand.
And before you commit to WinRT, consider its history.