Build 2013 is on the horizon and it is time, once again, for Microsoft programmers to consider their positions. Has Microsoft sold the desktop in an effort to buy mobile?
There have been some perceptive postings on various websites about the sad state of Microsoft's developer world and this, and the onset of this year's Build, makes it timely to reconsider the current state of the Microsoft ship.
The big problem is that whenever I offer my view others accuse me of being a Microsoft hater and biased. The fact that I have been a Microsoft programmer for so many years, and still think that some of the technology that Microsoft is currently throwing away is among the best there is, seems to carry no weight. If I'm criticizing Microsoft I must have an axe to grind. So let's take a look at what other people are saying.
In A perspective: developers vs Microsoft Z98 (Ziliang Guo) not only describes what has happened but attempts to suggest the effect that it is having.
"...Microsoft was not yet ready to release a new native API yet and instead dropped the Windows Presentation Foundation, Silverlight, and XNA on developers.
Users of the .NET framework were delighted, as the three were all things considered very nice tools. WPF did suffer from some severe performance issues due to an architectural design flaw, but Microsoft slowly improved the underlying system.
Silverlight on the other hand grew very popular for corporate intranet applications, spawning off basically a mini-industry in the IT world. It also likely helped increase the attractiveness of Windows servers, something that Microsoft has often tried to push to try and supplant Linux in server environments.
Whereas many companies previously used Windows servers primarily for active directory, now they had more reason to treat the web hosting aspects of the Windows server more seriously.
XNA on the other hand offered a very nice abstraction layer of the fairly complex and verbose Direct3D API, allowing managed application developers to tap more of a GPUs power without needing a lot of boilerplate bootstrapping.
Microsoft also offered some tentative steps to woo indie game developers by opening up the Xbox Live Arcade a little bit, though getting a game into the marketplace turned out to be non-trivial. It was however in the XNA community that Microsoft had theoretically created a cadre of developers that would have made a Microsoft controlled appstore viable. It was also probably the biggest cock-up that Microsoft made, but we'll touch upon that later.
All of these improvements were again targeted at managed application developers and there was increasing frustration from native developers. They too wanted to take advantage of the more powerful underlying hardware, not just GPUs but the increased processor core count, but none of their existing options were anywhere as simple or friendly as that of the .NET developers. With Windows 7 however, Microsoft released Direct2D, a native API that provided new functions for 2D drawing offloaded to GPUs, and various parallel development libraries. Now native developers finally had a relatively modern API that allowed them to tap into GPUs without the need to explicitly program for them and some additional help for multi-threaded applications. The potential for Direct2D was obvious to many people, including game developers, especially with the improvements likely rolling out in the future. After all the pain of the long drought between Windows XP and Vista and then Vista itself, the future looked promising. And that was when things took a very strange turn."
The strange turn was motivated by the need to catch up with Apple and the mobile revolution. The result was the Modern API, aka Metro, and WinRT.
"The biggest casualties were the Silverlight and XNA platforms, which Microsoft has effectively deprecated in what appears to be a misguided effort to get developers to use the "Modern" API for Windows 8.
The problem with this however is that Silverlight's use case does not match that of Modern. Silverlight is essentially a browser plugin for web applications, whereas Modern is intended for OS applications. Even worse is the deployment mismatch. Silverlight is generally hosted on a web server, whereas Modern applications are only available via the Microsoft appstore.
Corporate customers are obviously not amused, nor are their developers. In one stroke, Microsoft has managed to not only decrease the value of their own Windows servers as web hosts, but also lessen the desirability of Windows 8 to their corporate users.
What is strange about this move is that Silverlight developers are not people who could naturally transition to writing apps for the appstore. Their usage of Silverlight simply does not match Modern apps. Microsoft's position on this, besides that of basically ignoring complaints, is to tell people to use HTML5. This again is a stupid response, since Silverlight developers are not creating websites in the conventional sense. They are most often building line of business applications that just happen to be deployed via a web server. These LOB applications can be fairly complex and they chose Silverlight because it offered a lot of tooling to make the complexity manageable.
Despite the promotion of HTML5 by various interests, HTML5 and AJAX are vastly inferior and its use would increase development time and decrease developer productivity. Why Microsoft did this is still a bit unclear. There may have been a desire to unify development to a single API for more complex applications, but the one size fits all paradigm has never worked in software development before and nothing in the near term suggests it will somehow become viable."
And what of the XNA developers?
"...And then Microsoft deprecated XNA, again in favor of Modern, without providing any sort of migration/transition process. This is hilarious on many levels, not least of which is suddenly managed application developers suddenly lost their access to direct GPU manipulation. This creates a somewhat reversed situation compared to previous iterations, wherein the managed developers were getting lots of shiny new toys while native developers were stuck with old crufty ones. However, just as native developers were often unable or unwilling to migrate to a managed environment, managed developers are often just as unable or unwilling to migrate to native development."
And finally what of the C/C++ developers:
"After all, we were the ones that were given a shiny new API that is relatively modern and powerful, especially compared to the antique that is win32. And yet many of us are also scratching our heads. Many of us were desktop application developers, people who enjoyed all the flexibility that entailed. Instead Microsoft has imposed restrictions to applications written against this new API that make it abundantly clear they designed this new API not for desktop applications, but for tablets and phones. And our response to this is pretty much, to hell with that."
So everyone is unhappy.
It is a description and an analysis that I and many others agree with. The few who don't seem to be living in a world with a different number of dimensions from the rest of us. Some are in denial because they have so much invested in Microsoft technology and attack this position simply to avoid having to face the fact that the technology they chose is being deprecated.
There are lots and lots of programmers working with .NET and building and repairing desktop applications and ASP.NET Forms web sites who really haven't yet noticed that a tidal wave is heading their way. There are even a lot of programmers earning a living from Silverlight, and VB6 for that matter - this is how programming works.
In The dying platform roundcrisis writes:
"...However the world (unfortunately) doesn’t do what I want and it feels like the momentum .net had is certainty fading."
There then follows a list of reasons why it is dying:
"...Windows 8 and WinRT with it’s confusing .net support. It doesn’t help when it comes to .net developers either. It seems like their intention was to bring in the “cool kids(?)” but with that they alienated the people that supported them..."
Dan Wahlin writes in Where Is .NET Headed?:
"I watched the dotNetConf .NET Open Source Panel last week. It was a bit disappointing to hear defeatism in the voices of OSS project leaders, because .NET’s future appears to rely entirely on the success of open source software for .NET"
He goes on to explain that Azure and virtualization is one reason for the lack of interest on the servers side and of course Windows 8 bears much of the responsibility on the client side:
"I still feel Window 8 carpet bombed .NET developers. There was secrecy and hearsay followed by the death of one XAML platform and the arrival of yet another slightly different XAML platform. People running a business based on desktop technology don’t know where to place their bets and the Windows division has always appeared hostile to the CLR"
His analysis is that the future really does depend on open source and Microsoft isn't really a big player in .NET. As an open source supporter he sees this as a big opportunity and a good thing:
"If your business or company still relies solely on components delivered to developers through an MSDN subscription, then it is past time to start looking beyond what Microsoft offers for .NET development so you won’t be left behind in 5 years. Embrace and support open source."
Some might well agree that the changes to the .NET world are for the better - I'm not one of them.
Of course there is also the one great last hope - Xamarin. I'm a great fan of Mono and the open source implementation of .NET but it isn't backed by the resources of a Microsoft and as a result there are compromises and cracks. If you take a look at say Scott Hanselman's talk How C# Saved my Marriage, Enhanced my Career and Made Me an Inch Taller, then if you can remember back only a small number of years you can't help but be struck by the shift. Only a short time ago the worry was that Mono might be struck down by some sort of attack by Microsoft on its intellectual property. Today it seems Xamarin is seen as the main support of .NET and certainly it is doing a lot of the "talking up" that is keeping may programmers trust in the technology alive.
The current situation is not about C# or .NET vanishing overnight. That never happens in software. There are even going to be jobs for Silverlight developers into the future. But this isn't the same thing as saying that the technology is going anywhere interesting. There are still jobs for Cobol programmers, but most of us wouldn't start a new Cobol project at the moment - or even in the past 20 years..
The problem is that without Microsoft's wholehearted and enthusiastic support the .NET project is dead in the water. Not sunk but not going anywhere.
For example, let's talk about WPF. It's a great UI framework and one of the most sophisticated available. If you are going to start a new .NET project should you choose Windows Forms or WPF? Well the simple answer is that WPF doesn't really have a role to play in the future Microsoft is reimagining. So it isn't dead, but I'd be surprised to see a new version and it could do with some additional development. So it is old Windows Forms for new projects... a strange forced choice.
The current uncertainty also makes nonsense of various SDKs and development products. For example, many of the things coming out of Microsoft Research still use Silverlight or WPF and this makes them far less useful. The Kinect SDK has an easy to use managed option, but to get very far with it you have to us WPF or XNA for the 3D graphics - and this doesn't make much sense.
The writing is on the wall for so many technologies - Silverlight, XNA, WPF, ASP.NET Forms and so on. What is worse is that, without guidance, the doubt starts to spread - PowerShell, that's .NET isn't it?
Let's hope that Microsoft has been listening and provides some clarity to present at this year's Build.
I suspect that what we will get will be more bluster and less substance and no mention of the desktop developer but I would be delighted to be wrong.
But let the last word go to Z98:
"What this all boils down to is, Microsoft has effectively made the "clean" break that many desktop developers asked for. The way they did it however was analogous to trying to deprecate the desktop itself instead of giving developers new and better tools to continue developing for the desktop."