.NET Core -- Choices
This blog entry is somewhat based on portions of a talk I gave last week to the Chicago .NET Users Group.
.NET Framework first arrived on the scene in 2002. In the next decade or so, it became very successful. Extremely successful. It is the platform under countless pieces of software, across server, client, and web. And it is installed on hundreds of millions of computers.
In fact, the specific way that .NET Framework is installed helped make it a victim of its own success. Because it is installed as part of the Windows operating system, there is only one instance of .NET Framework per computer, shared by all programs that need it.
An axiom here is that backward compatibility is very important. Users hate it when they update a system component and something else stops working.
When .NET Framework was young, each new release was bold and cool (hey look, generics! wow, async/await!). Later, each release became more and more conservative (er, we've got TLS 1.2 now).
Eventually, .NET Framework became that moment in a Jenga game where every possible move is too risky.
Simultaneously, while .NET Framework was gradually losing its ability to change, the need for it to change was growing. When contrasted with other development ecosystems, and viewed in terms of major industry shifts like cloud and mobile, .NET was not aging gracefully.
At some point, folks inside Microsoft realized that the future of .NET would be much brighter if it could be open source, cross platform, and faster. But .NET Framework could not be any of those things without (at least the risk of) a compatibility break.
So it was time for a "reboot", which I mean in the Spider-Man sense of the word.
Every so often, the Spider-Man movie franchise starts over (usually from the beginning, as if we all really want to watch Uncle Ben die one more time). Why? Because the actors age, and because the context keeps changing.
The movie industry borrowed the word "reboot" from us computer folk so they could apply it to situations where they want to make something again. I'm just borrowing the word back, because their set of connotations are a pretty good fit. The future of .NET would be much brighter with a younger actor playing Peter Parker and a fresh approach across the board.
So if .NET Core were a movie, its title would be ".NET Core: A Way Forward", and its movie poster would have three big-name stars above the title:
- Cross Platform
- Open Source
- Better Performance
What does this mean for .NET Framework?
Well, we can go back and re-watch Spider-Man 2 with Doc Ock anytime we want, right?
Actually, at the .NET Conf in September 2019, somebody from Microsoft addressed this issue with the F-word: "FOREVER".
Yes, they actually said, ".NET Framework is going to be supported FOREVER". Now I'm sure we're all eager to get more detail on what "forever" actually means, but it was a strong statement.
And that's good news. We have a choice. If we want to stay on .NET Framework, we can.
The bad news here is that we have a choice. A choice implies pros and cons, and there definitely are some, on both sides.
Yes, I was aiming for a chuckle by saying that the existence of a choice is both good news and bad news, but it's actually true. A choice implies the requirement to make a decision. That requires information and time. It can be stressful to try and figure out which sets of pros and cons are preferable. It is quite rational to (perhaps secretly) wish that you did not have a choice.
And not just in software. All kinds of product companies routinely underestimate the customer stress that results when you offer them a choice.
Why does FoodSaver have so many different models? Every one of them does essentially the same thing. (Here I am, trying to stay excited about this cool new sous vide approach, but the %#$@ food sealer company is making me think. And I'm getting angry about it.) As far as I can tell, their product lineup would be massively improved if they cut everything down to one model, or two at most.
What if .NET Core never happened?
Did Microsoft have a good reason for rudely giving its developers a choice?
Personally, I am very thankful that they did.
I mean, can you imagine what .NET would be like right now if it were still closed-source and Windows-only?
To be fair, I am oversimplifying, by talking only about the forest and ignoring certain trees.
What about the specific pros and cons?
For example, one reason that .NET Core 3.0 is a huge release is the support for Windows Forms and WPF. For Windows desktop scenarios, this was a big shift in the pros-and-cons. Without WinForms and WPF, every Windows desktop app would have no way to move to .NET Core.
What about the other items that are getting left behind with .NET Framework?
- ASP.NET 4.x Web Forms
Lots of folks are asking questions. "Couldn't you'all have moved a few more of these over to the other side? Or even just ONE of them? (meaning, of course, the one that matters most to ME)"
It's not as if folks are asking for backward stuff, like putting Zendaya's MJ into Tobey Maguire's movies. This is more like wondering why the latest round of movies doesn't have Harry Osborn. Stuff is getting left behind, and people are wondering why.
I'm not gonna try to defend Microsoft's decisions at this level of detail. In each of these cases, bringing the technology along would reduce the "cons" of .NET Core, but they had to decide which ones are worth the trouble. They're smart folks, and I respect their decisions, but I admit it would probably be harder for me to say that if I had a big pile of WCF code.
Taking the movie analogy a bit further, this is all one big saga. Each film is a story of its own, but it also supports the larger arc.
Some of the early films did much better with critics than they did at the box office. .NET Core 1.0 was groundbreaking work, but it wasn't a terribly compelling alternative for people on .NET Framework to switch.
The GitHub acquisition was that oddball film that is so very important to the saga even though most people don't understand it.
.NET Core 3.0 is a big-budget summer blockbuster that took forever to make and is now setting all kinds of box office records.
The Xamarin acquisition can be seen as another result that proceeded from the same basic decision that caused the producers to green-light .NET Core (make .NET be cross-platform and open source). So far, the Xamarin films feel a little bit disconnected from the main story line.
But this whole thing is heading toward a huge climax called .NET 5, the point where it all comes together.
(Whimsical aside for MCU fans: Remember the "on your left" moment from Avengers Endgame? .NET 5 is that moment, where all the characters "assemble". It is the scene where we learn, just as we suspected, that Miguel de Icaza was worthy of Mjolnir all along.)
.NET 5 is the grand ending of this multi-year phase.
And it is also the beginning of the next phase.
A ton of things happened behind the scenes to make this whole thing work, but one of the big moments was the difficult decision to leave .NET Framework behind.