My Blog

It's time for .NET to Leave Home

Sunday, October 24th 2021

By now everyone has heard about Microsofts gaffe around hot reloading this week.

It was kicked off by a blog post and merge that removed the tooling-agnostic ability for the dotnet command to perform hot reloads of code. That functionality was then moved over to Visual Studio as an exclusive. This prompted the creation of a protest reversal of the commit on the dotnet/sdk repository and an issue asking the important question why.

Some higher visbility news sources wasted no time in covering the situation as-it-happened with The Verge questioning Microsofts commitment to open source.

The protest reversal - which one .NET MVP noted was more or less a petition - was symbolically accepted and a blog post statement from Scott Hunter was released.

I'll get into why this blog post accomplishes nothing and worse still, exacerbates the situation; the community definitely needs to start cornering Microsoft on their double-speak ways.

More importantly though, I think it's time for .NET to leave home...

What is "open source", really?

By the strictest definition, "open source" is the mere policy of the source code for a program being visible. It need be nothing more and if we lived in a world devoid of intent, then that interpretation might suffice. There is however a more colloquial understanding of the term that is more often what people take it to mean. So, going forward, I would like to make clear that I strongly disagree and question the intentions of anyone taking the term open source to mean anything less than the following:

  • Source code is publicly available to all, free of any and all charge
  • Source code is released under a permissive license, typically - or to compete with the moral bars set by - Apache, MIT or GPL
  • The software runs equally on Linux, macOS and Windows and will usually run on x86 and ARM

    • Honourable mention: RISC-V is on the horizon these days!

We can quibble over whether that interpretation is literally correct. If someone is going to die on the hill of how to interpret "open source", then they aren't really eligible to make a productive contribution to the discussion. That includes disagreeing on the basis that this is perhaps not how Microsoft ever intended it.

I'm going to side with what the general public understands open source to imply and you should too.

The apple that rolled away from the tree

It's a popular idiom to say that "the apple doesn't fall far from the tree". The same could be said of .NET for a good chunk of its existence.

What makes things interesting is that around 2014, Microsoft decided that it would not just move .NET into being developed in the open. Microsoft also committed to a first-party multi platform .NET.

Personal sidenote: this was nothing short of amazing and instantly captured my attention. Despite being so cloistered, .NET and C# are two exceptional technologies!

At this point, if we're still having some fun with the idiom - and if we imagine the seeds never rooted - in 2014, the apple that is .NET spontaneously rolled away from the tree!

With that, .NET became a pariah in the Microsoft ecosystem, challenging everything that Microsoft had staked its identity on to date!

Microsoft is a business

I can't even begin to count the number of times I'm reading or participating in a discourse on modern .NET when some pro-Microsoft smartypants breezes in with the classic "well actually" saying something very close if not identical to: "What people seem to forget is that Microsoft is a business..." They then go on to offer cheap wisdom about how it's unreasonable to expect Microsoft to give anything away for free.

These people? They're stuck in the past.

Much like those who would quibble over the literal interpretation of "open source", these individuals attempt to use a fact to bring in their own outdated nuance. Let's strengthen the context here a little to make very clear that while - yes - Microsoft is a business, it is a business in the year 2021, not 1997.

What people who say "what people seem to forget...", themselves seem to forget is that between the years 2000 and 2014, Microsoft got absolutely - and I do mean absolutely, right-royally - routed, roiled, rocked and shellacked by open source.

Get that history lesson however you want, but get it fast.

Whether it was PHP dominating server-side share to this day, the antics around TCO, Linux being a "cancer", anything to do with MSSQL, Windows Vista, Silverlight, the rise of Apple, the failure of Windows Phone, the ubiquity of Java, early Windows-only Azure, or any number of other missteps; The world at large shifted Microsoft to the very brink of mainstream irrelevance. Which anyone with an ounce of savvy will know precedes a decline in adoption.

Do you know what the right business move in response to this was?

A free, open source, all-platform Microsoft!

Microsoft supporting open source is still to this day an act of appeasement, not contrition. It has yet to truly embrace the philosophies of open source as defined above. I haven't been able to keep a comprehensive list over the years of every time Microsoft has betrayed the spirit of open source.

Without a doubt, Microsoft regularly takes calculated and overreaching risks against their own stated commitments:

There are more, many more occurences of this over the course things. If you use Azure, you'll get it especially bad. I've had support requests responded to with "just use MSSQL instead of postgres" within the last year. Microsoft always slides backwards when presented with a decision, without taking into account the aggregate signal that doing this repeatedly sends.

Over time that adds up to the message that Microsoft doesn't in fact ❤️ Linux, open source or anything except themselves.

This is not a communication problem

It's a problem of intent.

What would things look like if open source Microsoft devotees never spoke out? How much encroachment does Microsoft attempt on a regular basis; where if there weren't stakeholders ready to met out a moral consequence and commensurate finger-wagging, that these encroachments would eventually lead Microsoft back to their old ways?

It's not a stretch as recent events have demonstrated. We've just seen the community bristle at Microsoft in a big way for making what are honestly obvious mistakes. But this isn't the only time, it happens on a regular basis and I find something particularly toxic about how they tend to respond. There's a cycle of abuse that Microsoft always seems bent on preserving, even some of the phrasing in the blog post from Scott Hunter on hot reload gives pause:

  • "That said, like any development team, from time to time we have to look at quality, time, resources to make tradeoffs while continuing to make forward progress."
  • "...we want to make sure VS delivers the best experience for .NET 6."
  • "With the runway getting short for the .NET 6 release and Visual Studio 2022, we chose to focus on bringing Hot Reload to VS2022 first."

I'm sorry, are we talking about .NET or Visual Studio? You don't have to read between the lines to see that an open source .NET is not what Scott is talking about in this post. Throughout this whole kerfuffle, Scott is trying to contain the discussion to hot reload while also turning it into a boast about Visual Studio.

There's this weird pattern when talking with Microsoft employees because it doesn't matter who, you're often engaged with the same underlying communications strategy. They rarely act on feedback and when they do, it's usually not without disingenuous and selective interpretation.

Personal sidenote: I call this the Agent Smith communications strategy.

Sure, maybe the people we're talking to aren't the ones directly responsible. In fact, there's more than enough evidence to show that the people we users get to speak with are the ones championing the positive shifts. If that's the case though, who else can users run a message directly to? Why isn't Julia Liuson out in front on this and why can't we gauge her commitment to an open source Microsoft the way we can other .NET personalities if she wields so much power so carelessely?

It's not practical to expect people to keep track of what mode is appropriate when trying to give badly needed feedback. At some point Microsoft has to collectively take responsibility for its collective actions which are governed by its collective intent.

A free, open source, all-platform .NET

...is only the first step.

There is no medal for participation here, there's no consollation prize for getting it wrong only up until now. You don't clear your name by doing the same things as competitors that you spent years losing to. Yeah, it would be nice if all that was necessary was a superficial shift in communications strategy.

What is a free, open source, all platform .NET when it has to share a roof with a Windows, an Azure, a Visual Studio and a Microsoft SQL Server? Yes it's come a long way, but Microsoft doesn't deserve praise for negligence today because yesterday it was ignorance.

There are too many loose ends when you look at things holistically. The .NET ecosystem welcomes contributions from the public, but is it not a bit perverse that the terms by which .NET exists today could mean that contributions that originate from the community could at any point be kidnapped into a closed source product? Yikes.

An independent .NET

The suggestion is as simple as the title of this post: The time has come for .NET to take its hope chest and go out into the world.

Microsoft has tried every way possible to rebrand .NET as a spiritual competitor to the JVM ecosystem. Right down to creation of a pseudo-foundation. Sadly, this strategy has run its course because Microsoft just can't resist the temptation to meddle.

Existing in the same legal entity that has Windows, Azure and Visual Studio is just too much risk and as a result, the challenges .NET faces end up coming from within.

Microsoft is .NETs greatest enemy.

History has more than shown this time and time again, I think it's safe to say that the verdict is in on an "open source" Microsoft and it's as everyone feared: A sham.

Microsoft needs to eject everything to do with .NET into the wild under a new or fully rearchitected .NET foundation. In such a way where Microsoft doesn't have a majority stake as some omnipotent "founding member". Yeah, they're still going to be expected to full-time fund the same developers and plough money into it like they are currently.

The difference though is that the direction of .NET would be subject to approval from the community and the ecosystem will finally be able to grow in the way they think they can get by merely imitating open source.

It's very easy to see how being fully independent would offer the checks and balances needed to ensure an over ambitious VP or PM doesn't try to reach in and take something out - the way we saw this past week - ever again.

0.61.0

Don't get up gentlemen, I'm only passing through.