After spending my holiday break playing with my wife’s Surface running Windows RT, I decided to pick up my own. Honestly, I’ve been pretty happy with it as a productivity and media consumption tablet. But, as I am always wont to do after owning a device for a while, I ended up wanting to try my hand at developing for it.

I knew Microsoft hadn’t made the best choices regarding development for Windows RT devices, but I hadn’t realized how bad they really were until I started looking into actually developing for the device. Keep in mind, I’m someone who likes Microsoft and the Surface enough to go buy one myself. I want the platform to succeed. I would still rather have my Surface than a new iPad.

Given the technical decisions they made, I can only imagine the reasoning being a combination of two things: arrogance in the Windows division that Windows is still the dominant operating system in the world, and either a lack of political clout or an extremely myopic team heading up the Windows RT development effort. I would guess the former, given that it’s Microsoft.

As a technology company, when your platform is the dominant one, it’s in your best interests to make sure it’s hard to develop cross-platform applications. This keeps developers and users using your platform. You can see examples of this in how Apple manages iOS - using Objective-C, limiting development to the MacOS X platform, crusading to get rid of Flash, etc. When your platform is the underdog, however, the opposite is true - you want to make it easy for developers already targeting the dominant platform to port their applications to your platform as well. This is especially critical during the “bootstrapping” part of your platform’s life, where developers are asking why they should develop for a platform without an existing base of applications to draw in users.

Microsoft, however, approached the design of the Windows RT development tools (which are really just the Windows 8 development tools) as if they already owned the market. With the iOS and Android platforms already vastly ahead of Windows RT in both market share and number of applications (currently 650,000 on Android, 800,000 on i OS), this seems like a terrible decision on Microsoft’s part. As I see it, there are at least three major roadblocks to developers developing for Windows RT:

  • Development environment: Instead of offering an SDK for download to allow developers to target Windows RT, Microsoft decided to only allow development using Visual Studio 2012 on Windows 8. This is potentially a large change in development and build environments and processes, especially given the slow uptake of the Windows 8 operating system.
  • Games: Instead of supporting the OpenGL ES graphics API, Windows RT only supports DirectX. OpenGL ES is the standard for graphics across every other mobile platform. (OpenGL ES is also available on every major desktop platform, since it’s a subset of OpenGL.) DirectX, on the other hand, is available on Windows desktop PCs. A quick search on Google will show a large number of game development frameworks that support both Android and iOS, but so far the only such framework to also target Windows RT seems to be an upcoming (and I’ve yet to see a date announced) version of Unity. Game developers currently wishing to target Windows RT devices need to write their games without the benefit of such frameworks, it seems. Worse, they’ll need to make sure their rendering layer is entirely modular and able to use either OpenGL or DirectX if they want to target multiple platforms. This seems like a herculean effort for today’s common casual mobile game development studio, and not at all worth the risk.
  • WinRT APIs: To target Windows RT devices (or Windows 8 Metro at all), developers are tied to the WinRT API. While code that targets WinRT is portable to any Windows 8 machine, it makes code even harder to port to other platforms. One major example of this is the BSD sockets API. BSD sockets is the de-facto standard API for network programming, existing mostly unchanged on every other platform. With WinRT, Microsoft got rid of this API in favor of their own. Changes like this not only make a developer’s job harder, they mean that many middleware libraries are not compatible, adding further roadblocks to development.

Microsoft, please. I really would like your platform to remain viable. Sure, I’m resisting putting Windows 8 on my desktop PC, but I honestly really like it as a tablet OS. Please go watch everyone’s favorite video of Ballmer, and make Windows RT developer-friendly. Because if someone like me, who actually likes and evangelizes your platform, is turned off from wanting to develop for it.. well, it’s in trouble.