We need to talk about .NET. Microsoft isn't really focused on this old, but excellent, technology and this raises the question of whether we should be taking it seriously any more.

We need to talk about .NET

Microsoft isn't really focused on this old but excellent technology and this raises the question of whether we should be taking it seriously any more.

Microsoft is entering the post .NET era. This is a consequence of a bigger transition which has Microsoft's full attention - the move from the being software company to a devices and services company, but what Microsoft is doing to the development scenario is much more important to us.

The post .NET era doesn't mean that .NET is just going to vanish. What software does?

Arguments that point out that it is "all still there" don't really address the issue of what Microsoft is doing now rather than a few year ago.

The bigger point is that Microsoft once had a dream but now it has a different dream.

Microsoft's dream of a better way to program was a good one. It resulted in a system that was, and is better, than Java and one that Java is only now beginning to catch up with. The .NET system's biggest problem was its name, as it actually had very little to do with the net, i.e. Internet, and is a completely general programming system - but then Java isn't much about coffee either.

.NET was a wonderfully ambitious project and in one move it caused Microsoft to dump all that it had at the time - Visual Basic 6 in particular and C++ MFC/ATL to a lesser extent. You need to recall that at the time VB6 was the biggest language on the planet and was used by everyone. Some say that it would be again if Microsoft allowed it to return.

The new boys on the block were C# and something that was like Visual Basic, but mostly in name only. The new system underpinning the new languages was to use managed code, which stopped programmers from making mistakes that crashed the system by writing into memory they didn't own. It also replaced the difficult-to-use and error-prone COM with a simpler way of building runtime objects.

If you think that there was, and always will be .NET, then you need to look back to the time before. The adoption of .NET wasn't easy and it wasn't pretty. There were a lot of new ideas to absorb and techniques to learn. And of course there was the new language, C# - to this day the only full language that Microsoft has produced.

The adoption of .NET was a bloody battle - an exciting and disturbing time.

But there were some problems.

Microsoft didn't always support .NET quite as much as it could and should have. The C++ systems people still kept on turning out APIs that used COM without a .NET binding to enable languages like C# to work with them. To this day C# doesn't have direct access to lots of APIs. For example, try working with DirectX - your choices are a pre-packaged version in WPF or XNA. Getting directly at DirectX still isn't possible in C# using only Microsoft-supplied code.

This lack of support from the systems programmers was probably the seed of the demise of .NET.

Put simply, the OS guys wrote in C++ and worked with COM interfaces. To them .NET, and C# in particular, were and are alien technologies.

Now the OS approach is in the ascendant and the languages approach is basically being dismantled as quietly as possible.

OK, you can still argue that .NET is alive and well and living in luxury but... it isn't the star act any more. That honor goes to WinRT and the rebirth of COM and C++. WinRT is a COM-based Windows API designed to replace the Win32 API that we all know and love. I guess this article could have been called "Microsoft in the post Win32 era" but .NET was supposed to bring about that particular transition on its own.

CEO Steve Ballmer has now made a pronouncement that explains some of the thinking behind what is going on. In the recent shareholders news letter he says:

Last year in this letter I said that over time, the full value of our software will be seen and felt in how people use devices and services at work and in their personal lives. This is a significant shift, both in what we do and how we see ourselves — as a devices and services company.

A devices and services company i.e. more like Apple. Microsoft is already focused on creating new devices in the form of the Surface tablets which are the vehicles for Windows RT. Would it be such a shock if the rumors of a Microsoft produced Windows Phone 8 proved true. With this shift Microsoft can quite rationally give up some battles that it has been fighting for a long time - as they are no longer relevant.

From our, the developer point of view what is important to take note of is that WinRT may support some aspects of .NET - i.e. C# and XAML but it isn't managed code. Windows Phone 8 doesn't even pretend to support the old ways of doing things.

Why the big shift?

To understand the reason you need to remember why Microsoft produced .NET in the first place. The .NET system was created in opposition to Java.

At the time Microsoft had two big fears - the first was the the browser would make the operating system irrelevant and the second was that Java would make Windows in particular irrelevant.

Java was an advanced language that worked on almost any operating system including Linux which was at the time seen as a big threat to Window's position on the desktop.

Keep this in mind because Microsoft uses software as a weapon to fight bigger wars. If Java is a threat then invent a really good alternative in the form of .NET. Microsoft is not interested in computer science or pushing forwards computer languages - and if you think about it this is very reasonable.

Ok then why did Microsoft expand .NET to include so many other technologies?

In each case the need was to protect against some perceived threat.

Perhaps the best example is ASP .NET and now the way that it is being "re-imagined" to suit new purposes.

Originally in inventing ASP .NET the aim was to find something that would compete against PHP and JSP so that Windows Server would have a place in the web server market.

Something that would consolidate web programming with desktop programming and make .NET and hence Windows all the stronger. The idea was that if you were a Windows programmer you could do the job on any platform in the same basic way.

Of course we now know that the whole attempt was futile because the web is run by Linux and Linux based web servers such as Apache.