In February 2002, I was sitting in the audience of the Visual Studio .NET launch, watching Bill Gates talk about his company’s new product. It was the first (and probably) last time I’ll ever see Bill Gates talk, and – to be honest – it was pretty cool.
What I didn’t realise then was that it was probably the last time our industry would see a major, ground-up, all from one vendor programming platform launch. From there on out, as has been the case for the past 15 years, programming toolchains are nearly all grass roots efforts that aren’t built by the major vendors. Scala, for example, emerged from a university think tank.
.NET was Microsoft’s answer to Java, Java itself being developed by Sun. Microsoft’s motivation for building .NET was obvious – on the one hand, Java was popular and Microsoft was pretty hard into its “embrace, extend, and extinguish” strategy at this point, and on the other hand, everything Microsoft did was ultimately looked to sell more licences.
.NET represented an enormous engineer effort. It wasn’t just a wrapper for Win32, it looked to redefine how software was written by providing an excellent first-class language in C#, but also more or less every base helper class and function any developer would need in the shape of the .NET Framework itself. More to the point, it was written to support all types of development effort – it didn’t matter what sort of software you were trying to write, the .NET team would try and help you do it. You also got Visual Studio – hands down the absolute best development environment available. .NET was the software equivalent of getting to New York first-class on Concorde – Microsoft wanted you to have a good time; everything else was a rowboat.
Today, there isn’t anyone building anything like .NET – there is no evolutionary replacement from any vendor. Kotlin, Google’s preferred language for building Android applications was built by Jetbrains. Or, to put it another way: Google don’t even bother developing the language preferred for Android development. Google builds out the API, but they only look at development libraries to support the operating system. It’s a similar story for Apple. They only care about levelling-up your rowboat from being made out of wood to being made of our high-tech composites. You’re still doing most of the work yourself.
What Microsoft offered was a central vision. Top down, the PM’s imposed that if you were going to build a toolchain, it all had to work a certain way. This vision was all about enabling developers to just get going without having to hunt around and find the good stuff. Modern software engineering doesn’t require that – if you need a library to do XYZ, find one, amend one that’s close, or write one from scratch. Software engineers are just expected to hack together a toolchain that works for them.
That central vision came from investment into what was, to use a modern construct, an influencer marketing strategy. The more developers you had, the more users you had, and the more licenses you sold, plus the more entrenched you became. (Turns out this idea stopped working).
Google and Apple are never going to make that sort of influencer marketing investment, and in reality they do not need to. Ten years into iOS and having without a doubt the worst developer experience possible in Xcode and Objective-C, iOS is still ridiculously popular. People power through the crappy tooling because the end desintation is so valuable. Same with Android, which has a toolchain so arcane and dependent on magic incantations using it is like trying to get straight A*’s in your OWLs at Hogwarts.
But, here’s the rub. .NET has never been dominant outside of line of business applications. And today, far more people use software than they did back when The Cathedral and the Bazaar was written. The software that we have built over the past ten years, software that everyone uses everyday like Facebook, Amazon, iOS, Android, and all the networking firmware in between is orders of magnitude better and more usable than when Microsoft set out how we should write software using .NET.
It turns out that relying on our combined engineering ability to hack together software using whatever open source bits and pieces we can find doesn’t hold us back. We won’t ever see anything like .NET again (or Java, for that matter), but we likely won’t need it.