ASP.NET Core Naming History and Reaction
Date Published: 20 January 2016
This is a very good thing because it will alleviate confusion about just what this version of Microsoft’s main server-side web framework is and how it relates to their previously released products – most importantly ASP.NET (is it too soon to start calling it Legacy ASP.NET?). The latest version of ASP.NET is 4.6, and the new ASP.NET Core product line is a complete rewrite. It is possible to run ASP.NET Core on top of the full .NET 4.6 Framework/platform (for instance, to take advantage of Entity Framework 6.x and other proven .NET libraries), or to run ASP.NET Core on .NET Core (both of which will be version 1.0 when they ship in a couple of months). On a related note, Entity Framework 7 is now going to be called Entity Framework Core 1.0 (or just EF Core for short).
TL;DR: This is a great step in the right direction, but leaving the name “ASP.NET” behind would be even better. Fact-supported rant follows.
While I’m happy to see this change (calling it version 5 was never a good idea, any more than calling the releases coming from Redmond a year ago “betas” when they were clearly alpha or preview level in terms of stability), I personally would have liked to see a complete branding refresh to go along with this complete product redesign. I started my career building web applications using Active Server Pages (ASP) in the late 90s. At that time, the name made sense. These were web pages (.asp files). They ran on the server. And they were active, not static or fixed (as most web pages of the time were). ASP only lasted for a few years before Microsoft started down the road to what would be called .NET. At that time (the year 2000), Microsoft marketing had just finished renaming all of their products “Microsoft DNA” when this new thing came along… so they came up with .net (or .Net; or .NET, which eventually stuck). EVERYTHING became whatever.Net, and so you had Visual Studio .Net and Windows Server .Net because “branding”.
“Wait, these products have absolutely nothing in common!”
“Don’t worry about it; stick a .Net on the end of it. That’s what we’re doing this year.”
And so ASP.NET got its name, and this wasn’t terrible, since ASP wasn’t already a terribly strong, established brand, and in the beginning ASP.NET really did share a few things with ASP. For instance, certain types were kept around simply because they were familiar to ASP developers (like the Application object, despite the Cache object being a superset of Application’s functionality). And ASP.NET was still all about pages, but this time with an extra ‘x’ on the end of them to differentiate them from ASP pages (and because around this same time XML was being lathered onto every technology that didn’t get out of the way in time, and because x’s are cool (see also XBox)). A web form called Contact.aspx was still a page, it still ran on the server, and it still did stuff and so could be called active, so the name was OK.
Fast forward a few years, and the land of ASP.NET naming starts to get a bit murkier. In addition to the traditional way of building pages with codebehind files, a new thing called ASP.NET Web Pages is introduced. So now you have Active Server Pages (.NET because why not) Web Pages as a product name. Apparently pages was so important it had to be said twice. Fortunately this flavor of ASP.NET didn’t become immensely popular, and so hasn’t created a great amount of confusion (at least that I’ve seen). Another new addition to the ASP.NET product family was ASP.NET MVC. ASP.NET MVC is not at all the same as ASP.NET (web forms). In fact, ASP.NET Web Forms didn’t really exist as a name until ASP.NET MVC came out – before that it was just ASP.NET. The need to call it Web Forms arose because ASP.NET MVC was completely different, yet still had ASP.NET in the name. Yes, you could (and can) run ASP.NET pages side by side with ASP.NET MVC controllers and views, and yes they both still ran on .NET, but this did start to make the naming problem more apparent. Things start to get more confusing when you realize that each of these different products within the ASP.NET family versions independently of one another, so you can have ASP.NET 4.5 with ASP.NET MVC 5 and ASP.NET Web Pages 2.0. And I haven’t even gotten to ASP.NET Web API, yet, which has yet another version history associated with it. At this point there are quite a few extensions to ASP.NET.
Yes, naming is hard, but I think the more important thing to realize is that avoiding brand extension requires courage and leadership. If you’re a big company and you have a successful brand, of course the obvious thing to try to do is leverage that brand to give your new products a boost. This is known asbrand extension and it happens all the time, sometimes for good reasons. The problem occurs over the long run, once you have diluted the original brand with too many disparate products competing within it. This sows confusion in the marketplace, since customers will have difficulty associating the brand with any one product. This is even more of an issue for a product that partners and customers must use to build other solutions on top of, since finding information about how to use the branded products becomes more and more difficult the more extended the brand becomes. The “google-fu” of ASP.NET gets worse with every new flavor of ASP.NET that is introduced.
My recommendation for Microsoft was, and continues to be, that they retire the ASP.NET name for their new online web platform. This new platform no longer even supports what ASP.NET was when it was first created (active server pages running on .NET, or what we now must refer to as web forms). It doesn’t share any code with ASP.NET classic, and if the plan is to keep legacy ASP.NET around as a viable alternative, it would be a good thing to not call the new hotness by the same name, because all that’s going to do is force people to start calling the mature product things like classic or legacy, which is obviously not a good thing for its brand.
Naming things is hard. And scary. The easier, safer path is to stick with what’s been working for years. But as someone who is a huge fan of this new product, and a loyal adviser and partner of Microsoft’s, I’m telling them the right call is to give this new product its own name. Yes, ASP.NET Core is better than ASP.NET 5. Much better. Thank you for that step in the right direction (and thanks specifically to @shanselman, @damianedwards, and @coolcsh for your hard work getting us here). But calling it Foo 1.0 would be better (where Foo is replaced by a short, pronounceable word).
It’s also worth noting that “Core” is used by a huge number of packages already as part of their naming convention within Nuget or on GitHub (or both), so it’s not the most unique 2nd word one could add to ASP.NET to differentiate it from legacy ASP.NET. Even many Microsoft packages already include “core” in their names. To address this confusion, I believe the Nuget package naming will avoid separating ASP.NET and Core by a dot (.), so packages will be named Microsoft.AspNetCore.Mvc for instance, not Microsoft.AspNet.Core.Mvc.
At this point, the ASP.NET Core 1.0 naming “ship” is pulling away from the dock. It’s still in the harbor, but I’d be very surprised to see any change in the plan that’s been announced at this point. Which is disappointing, because I don’t know when Microsoft will have a better opportunity to make this change.
Steve is an experienced software architect and trainer, focusing currently on ASP.NET Core and Domain-Driven Design.