Why Microsoft .Net failed

Microsoft tried, but it couldn't win the hearts and minds of developers who weren't already indoctrinated -- and it alienated others along the way

Recently, I've been airing Java's dirty laundry. Some folks took my position that Java was trailing .Net technically to mean that I thought .Net was winning. Nothing of the kind -- in a number of important ways, .Net is a failure.
Think back a decade or so ago. As you may recall, .Net was supposed to be much more than just the next version of Windows DNA or COM+ or COM. It was supposed to destroy Java, extend the Windows platform, and secure the Microsoft monopoly for another decade or two.
[ Also on InfoWorld: Java faces tough climb to catch up to .Net. | For the tips and trends programmers need to know, download InfoWorld's Developers' Survival Guide. | Get a quick, smart take on the news you'll be talking about in http://wedih.blogspot.com/ -- subscribe today. ]
Microsoft did many things right. It hired the smartest experts on language design, compilers, and virtual machines. But it also did some things terribly wrong.
Let's start with marketing. Microsoft overextended the .Net brand and stamped it on everything. At one point Windows Server was going to have .Net emblazoned on it, which led many people to wonder what the heck .Net was supposed to mean anyway.
At first, Microsoft made .Net an optional download. People were as excited to download the fat .Net VM full of delicious, possibly conflicting DLLs as they were to download a gigantic Java virtual machine.
Embrace, extend, flop
Like many Microsoft "innovations," .Net was a copy (embrace) and improvement (extend) of someone else's technology -- in this case, Java. Microsoft sought to extinguish Java by being a better Java; in a number of ways, it succeeded. C# cleaned up some Java mistakes, such as checked exceptions, the need to create an accessor, and mutator methods. The .Net VM had a cleaner bytecode setup.
Plus, .Net solved Microsoft's problems. At the time, Microsoft developers were dealing with more than one flavor of Windows and multiple versions, but .Net gave them a common way to code and less to worry about.
Unfortunately, .Net also cannibalized Microsoft's most successful corporate IT development environment, Visual Basic. Look at Indeed's Job Trends, Tiobe, and so on, and you'll notice that .Net's rise is all about Visual Basic's decline. There isn't a lot of correlation between .Net trends and Java's bumps and bends.
Visual Basic .Net didn't have much to recommend it. There wasn't enough documentation, so you had to learn C# anyhow. The API was the same between them, so why not just stick with C#? The corollary was that once you figured out C#, you also knew Java.
Sure, .Net stopped the bleeding for folks looking to develop Internet applications on Windows (away from tools that Microsoft controlled), but it didn't do what it was supposed to.
Instead of .Net propping up Windows, the greater Windows ecosystem propped up .Net. People coded to .Net because they were coding for SharePoint or BizTalk. If you delve deep into .Net jobs, you'll notice they tend to be legacy or related to SharePoint and friends.
Off to legacy land
Now it's too late for .Net. As we move from IaaS to PaaS and SaaS, folks are simply unlikely to care about operating systems. If you don't care about operating systems, why not code as if you don't care about operating systems and code for the cloud? We've seen recently that Azure isn't lighting the world on fire. Why would we expect that to change?

Even if you believe that most companies will continue to build their own data centers to care and feed, while ignoring the cloud, the desktop monopoly is also dying. Consumers are net information consumers. If you don't work in tech, publishing, or entertainment, then you probably take in more media than you produce. With the iPad, Android, and such, writing .Net isn't a viable business option. Miguel de Icaza can create all the companies that begin with "x" that he likes, but people will continue to care less about Mono or be scared off by its patent ambiguity.
As users move from the desktop to the tablet and set top to view their pornography, cat pictures, and Netflix movies, the economics that caused folks to "target" Windows are abating. This results in a downward spiral for 'Softies hoping that writing to .Net is enough.
I could theorize about how Microsoft could extend .Net -- but why should it? .Net was about extending Windows. In a cloudy BYOD, tablet-oriented, Internet-standards-driven world, there may no longer be room for Microsoft, let alone .Net. The .Net initiative failed, and if you were part of it, I hope you hedged your bets by learning a few other tricks along the way.
This article, "Why Microsoft .Net failed," was originally published at http://wedih.blogspot.com/. Keep up on the latest developments in application development, and read more of Andrew Oliver's Strategic Developer blog at InfoWorld.com. For the latest business technology news, follow InfoWorld.com on Twitter.