The Brave New World of Software Development on the Microsoft Platforms

Things are changing at Microsoft (or maybe they changed a while ago and it took me all this time to notice). The short story is the company no longer cares whether you use their development tools, they only care that you target their platforms: Windows 8 and Windows Azure.
The result is this, Microsoft is in the process of opening up Software Development tool chain. They no longer see themselves as the owners of .NET, or at perhaps more accurately some of the technologies around .NET (i.e. ASP.NET, Entity Framework which are now fully open source and parts of ASP.NET are packaged with Mono). Instead they seem themselves as driving contributor with other contributions from the community and other development companies. It can be seen too in the way that Microsoft has contributed to other projects to help bring them to the Microsoft platform, Node.js and the choice of Hadoop for its default Map/Reduce tool are probably the most prominent examples for this. This new way of doing thinks can also be seen in the way they released TypeScript, full open source and integrated with other Javascript open source projects.
Why are they doing this? It’s simple. They want to attract as many developers to the Microsoft Platforms as they can, they no longer care whether they’re using C, .NET or Javascript as long as they’re building Apps for the Windows 8 Store or that run on Windows Azure.
One interesting question to ask is “is this a good strategy for Microsoft?” I honestly don’t have an answer for this. Clearly the tablets pose a threat to their traditional cash cows of Windows and Office, so getting developers to develop apps for Windows 8 and Azure ‘using any tool’ seems like a good thing for them. Clearly getting Windows Store Apps developed is vital for them, but with so mobile developers already very busy building stuff for iOS and Android, will the ‘using any tool’ be enough to win them over?  As for Azure it’s difficult to see why they’re chasing it so hard, sure the rental model is very attractive to them because it means a nice steady income rather than a one off sales, but the margins on Azure are so very thin. The figures I’ve heard, and admittedly this is rumors rather than hard facts, is that they’re only making a few cents for every dollar spend on Azure, were as with Windows and Office they’re used to 30% or 40% margins. Microsoft make some money from Visual Studio and MSDN licenses, I guess the ‘using any tool’ strategy threatens this but I think perusing this strategy doesn’t necessarily mean they lose much revenue from Visual Studio/MSDN. Developers like Visual Studio so, will continue to use Visual Studio and buy MSDN Licenses. Plus the money they from MSDN licenses goes in the small change jar.
Another interesting question to ask is “is this a good thing for Software Developers?” I think it’s mostly a good thing, but there are problems with the model too. .NET being more open means it’s now easier to use from other platforms. Sure, you’ve always been able to use .NET from other platforms thanks to Mono, but now it’s feasible to use more and more libraries that Microsoft have provide themselves. We don’t get the full benefits of open source, such as contributing patches, small incremental releases and features requests as .NET is not full open yet. There’s also a danger of fragmentation. To be fair .NET is already pretty fragmented with different framework version for targeting Windows Desktop, Windows App Store, Windows Phone, Silverlight, and Xbox, and that’s just the Microsoft versions, not even taking account the Mono ones. There’s also a new interesting development, Miguel de Icaza has recently been talking about extending C# to include non-null types. Although, I like the idea of non-null types in C# I’m not completely sure this is a good idea. A Mono C# compiler that supported a superset of Microsoft C# would only add to the fragmentation. Though, I think this shows a growing confidence at Xamarin, this is something the mono team would have never dreamed of in the Novell days.

Another potential problem is that many developers have always looked to Microsoft for guidance about how to develop software. Typically developers on the Microsoft platform like being told what languages, frameworks and tools to use, now they have more choice than ever: C++, JavaScript, TypeScript and .NET. Maybe this extra choice is a good think and will lead to new generation of developers that think for themselves instead of blindly following Microsoft’s guidance. We can only hope.