Request for Comments: Issues with .NET and Microsoft Product Versioning
NOTE: I have had this blog post sitting in my drafts for a few months now. I've gotten close to posting it, held back, then gotten close to posting again. Today I noticed that Microsoft published a patch/update to Entity Framework 4.1 (Code First), a product I personally love and support, and they've called it EF 4.1 Update 1. Then I decide to post this. This is not intended as a rant or a complaint, although there is frustration on my part. What I want to know from you, is DO YOU CARE. If you do, then I can make sure your voice is heard. If you don't care, that's cool too.
I really care about how products are versioned and I'm sure you to do, Dear Reader. Naming Things is Step 0 when it comes to understanding Things. I want to talk to you about some things I've noticed around .NET versioning, and see what your thoughts are so that I might share them with TPTB (The Powers That Be).
I noticed recently that Microsoft released something called ".NET 4.0 Platform Update 1." This is an update to the .NET Framework 4 to include new features and functionality around Workflow and Azure. This post isn't specific to this update, but ALL the updates lately, from the .NET Framework, the Entity Framework, SQL Server, and a dozen more.
This was concerning to me for a few reasons. First, Platform Update "1" implies a future Platform Update "N+1." Second, when something that is a platform called 4.0 is updated, you'd expect it to be called 4.1 or maybe 4.0.1.
I've met with that team, and encouraged them to stick with Semantic Versioning and call these updates .NET 4.0.2, etc. I think they hear me, we shall see.The .NET Framework Team agrees and they've said that will be following Major.Minor.Revision now so the next small release will be 4.0.2! However I may be perceived as Chicken Little as I haven't personally collected broad community opinion.
If you get the Premium version of Visual Studio, you've got a higher SKU than the Professional version. However, if you choose between Premium and Profession versions of Windows 7, get Professional. It's higher.
I recently noticed other products coming out with "Cumulative Update to SP1" and recently "EF 4.1 Update 1" and similar things, not to mention SQL Server. I really think this is confusing to customers. It certainly is to me. I'd like to know if you agree.
In my personal opinion, Microsoft has typically done a (poor) job with naming things - I think that's a fair statement with some exceptions like things like Lync, Kinect, Xbox and NuGet. Sometimes there's engineering reasons for versioning, but mostly it's a combination of marketing, lack of coordination between groups in a large company and a lack of community/customer outrage or just apathy. I think when folks work at a large company for many years it's easy to become complacent and stop fighting what is perceived as "small things."
Versioning and naming isn't set in stone. There isn't a technical reason that I know of to call something a Rollup Update Pack. Only willpower and organizational agreement is needed. If it's important to you, and your voice is heard, it'll become important to the people who make these decisions. Personally, I am a big fan of Semantic Versioning both in concept and in practice and I'd like to see its practical common sense take root at Microsoft.
Here's how the .NET Framework has been versioned so far. You are all familiar with it, probably because you've had to explain it to your boss at some point.
Version | Runtime (CLR) | Framework |
1.0 | First Release | First Release |
1.1 | New | Small Changes |
2.0 | New | Lots of Changes |
3.0 | Same as 2.0 | WinFX libraries |
3.5 | Same as 2.0, but new C# 3 Compiler | Some Changes |
3.5 SP1 | Same as 2.0, with C# 3 | Whole Lot of Changes |
4 | New | Lots of Changes |
4.0 PU1 | Same as 4 | Workflow and Azure Changes |
We can't change the past, but we can influence the future. I would have probably made framework changes Point Releases (.1,.5, etc) and new CLRs or compilers should be Major Releases.
I suspect that product naming folks think that words are easier to understand than numbers, but I think they sell us short. Semantic Versioning would be easier to explain, deal with and sell. I think we need to stop with the Update, Refresh, Rollup, Pack stuff and just change numbers.
Going further, with the release of this new "EF 4.1 Update 1," what should they have called it? I would have said 4.1.5 or 4.2. Probably 4.2 if there were minor new features, and 4.1.5 if it's just patches.
- What are your thoughts, Dear Reader? What do you think about these "PUs" versus "SPs" or changing the version number? Do you care...How important is Semantic Versioning?
- Here's a Twitter Poll for you to spread around, or use the comments.
Photo via Creative Commons: Original Photo at http://www.flickr.com/photos/nicmcphee/422442291/
About Scott
Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.
About Newsletter
If I see 4.2, I think "I need to look at the new features to see what helps and what (might) hurt."
If I see 4.1 Update something or other, I have no idea what to think.
So, semantic versioning all the way.
So is that 4.0, or 4.0 PU1? You can't be sure unless you know the program you are using is configured to pull and display the right data.
As a developer, whenever I have a say, I prefer semantic versioning. I come to think of it as "The accepted standard of versioning". Not everybody has to follow it, but those who do make it easier for all the others to understand.
I really think they should stick with semantic versioning. It just makes sense (to me!) If they want to go another route, I am fine with that, but please, oh please, keep it simple.
Maybe I am all doom and gloom right now, but what happen when/if they ship version 4.5? Am I going to have to tell me that (most likely) it contains PU1, and PU1 isn't some sort of optional upgrade to the 4.0 base?
I am a very short drive to the campus, and wouldn't mind meeting with the team to tell them this in person. Maybe hearing it from someone other than you will help. If not, we can always slap them with a salmon, right? :)
Actually I tweeted this to you a while back https://twitter.com/#!/rushonerok/status/51879523498725376
I don't care what the version number is. I care what this product does. Keep it up-to-date for me if not make it easy for me to update myself - drop the crazy versioning.
Thanks for this post. I submitted my vote to Twitter poll but would like to explain that in more details in here.
In my opinion, number versioning for a platform like .NET is necessary. Generally, for big software projects that have frequent updates I think a precise number versioning is the best. By precise I mean that there should be a major version like 4 and a minor service pack update like 4.1.
I don't like the idea of real names for the .NET Framework or any other software with frequent updates because as time passes, it will be hard to remember what was what. A good example is Ubuntu versions. Every 1-2 years there is a new version and it's been always a hassle to talk about one of the recent versions with name.
Generally, I think Microsoft needs to change its strategies a little bit about the release times of products like ASP.NET MVC and how often they are released (especially now that it has had enough development in its early years). Release early, release often, is a great strategy but at the scale of work for Microsoft it has some downsides, too. For example, these frequent updates have made it hard to keep up the education and publication. Once a good resource (online or offline) comes out, it will be outdated quickly with a new version.
So all in all, I vote for precise/short number versioning and a more logical strategy for new releases and their frequency.
Weve learned to live with versioning that doesnt make much sense but the naming is just as confusing for developers as 4.1.2 is for non-techies. Difference is, we care.
I know that complaint isn't directly related to the versioning scheme, but the versions should mean something. Major changes should only be included in major releases. Minor changes in minor releases. And so on. A service pack should only include additive changes.
I'm terribly excited about the way Microsoft developer tooling has been going in the last couple years. NuGet, MVC, and the like are fantastic and much needed additions to the community at large. I'd content that developers alike appreciate the general "happiness" Microsoft has been delivering as of late. All my legos fit.
That said, without a clearer roadmap (is there one we're all missing?), developers are left answering the same questions you're proposing. A consistent version naming or numbering scheme would address most of the frustration. It'd also make searching for version-specific help feasible and align with external tool version semantics like the one introduced by NuGet.
Suggested mantra as a take-away for the product teams: Convention vs. Confusion.
These names are getting weird and giiiaaant unicornical names... thats a lot confusing for devs from diffent countries...
Heck, I even get confused with a series of fiction books or movies that don't have some method of telling me where to start the series and how to find the next one. (Star wars with its roman numeral episodes and the alphabet murder series was easy to follow for those casual customers)
Other than Autodesk, I get the impression that software companies are afraid to go over version number 10.
If they INSIST on keeping hard to follow names, could you at least suggest hexadecimal? ;-)
I seriously dislike all the mini-updates, service packs, extras. I'll install them all on my machine (up to my neck already) but how about our deployment sites?
What could possibly be wrong with that? Ha! Yes, Microsoft has a big issue with versioning and naming across all its products. Dotnet should follow Microsoft's own programming conventions, Major.Minor.Revision.Build is all you need.
Also, ".net" is a stupid name. Almost impossible to google (or bing). But it's too late for that I guess.
My preference would be for semantic versioning, but I know that when you get a marketing exec involved in anything there is no longer any requirement for things to make sense. If they have to come up with some fancy-schmancy convention, at least provide us mere mortals with a timeline somewhere that tells us what the latest version is, and how previous versions relate to it.
I can understand arguments that for non-technical people numbers might not be the best way to differentiate versions although without real science involved we can't say whether names are better then numbers for them. Nevertheless I don't mind having some marketing name for product version unless it has a semantic version too.
The current MS naming system for .Net belongs in the "really dumb decisions made by smart people at large organizations" folder. Is there anyone at the helm?
Hank Fay
As requested, here are my thoughts.
Just as you do, I prefer semantic versioning. It's clear and you can immediately see th overall size of impact of a newer version. All the additional naming like "platform update" or "refresh" cause confusion.
It already started with .net 3.0. A major version upgrade without major improvements, a system now used by Google Chrome and Mozilla FireFox. It's unclear, confusing and version numbers lose their meaning.
Another problem is that after a while, companies think they need to change the product name because version 27 doesn't sound that nice....
But most of all, how can we continue to develop when platform updates are released often. We cannot just upgrade solutions.(this is also a problem of my company, since most of the product is still written and developed in vb6... yes I mean visual basic 6.)
If I see 4.1.x, I think "ahh...some bug fixes. I can install this and not worry about breaking changes"
If I see 4.2, I think "I need to look at the new features to see what helps and what (might) hurt."
If I see 5.0, I think "Major changes, might take some effort to upgrade ot it."
If I see 4.1 Update something or other, I have no idea what to think.
So, semantic versioning all the way!!!
I'm not a big fan of service packs, rollups, etc. I don't know if they're the result of putting versions out with the year in the version (Windows 2000, Office 2007, etc.) where version 2000.1 didn't match the marketing vision so "alternative" schemes were devised and "service packs" appeared.
But fundamentally I'd say: Use numbers! That's what they're for! If the latest "update" to EF 4.1 is minor, call it EF 4.1.1. Or EF 4.2 if it's bigger. Sure, it's subjective, but the numbering tells us what the team that produced it thinks about the nature of the release and how much compatibility testing we'll need to do.
What really drove me mad was the .NET CLR numbering. 1.0, 1.1, 2.0, so far, so good. Then came 3.0. Which wasn't really a new version of the CLR at all; it was just some additional libraries. Marketing is the only thing that can explain the "3.0" moniker; it should've been .NET 2.5. Then came 3.5, which should've been 3.0, but failing that, should've been 4.0. One hopes that now that we've reached 4.0 we can leave that insanity behind.
For this reason, I would suggest using a date (and quarter if necessary) system. This would carry a rule that anything released in the same quarter is compatible (or part of the same product). It would also encourage updates (who wants to release something targeting a 2004 version of .NET). Bug fixes would be released as service packs. This makes the whole process of version much less subjective.
Platform Update 1 was a great example of what *not* to do- I had to dig around for awhile verifying that there wasn't anything I cared about (or that was going to break anything I cared about). The only real info I could find was on the WF blog, so it was unclear whether they were describing the entire contents of the release, or just the WF-relevant bits.
Get the person(s) that decided on these naming schemes on the line and have him call me, I have some customers he can deal with next year when we upgrade to 4.0 and have to explain why Microsoft *yet again* changed their naming scheme and that a Product Update is sort-of but apparently not quite like a Service Pack and, yes, it is *still* required. I know that EF is something we would ship but I have no hope for the naming of .NET any more.
I agree completely with you Scott. This is just silly, at least they could be consistent when they named the stuff, Service Pack 1, Update Pack 1, what is next? Semi-Minor Bidirectional Adjustment Change 1.5?
All of your examples are spot on and the EF 4.1 Update 1 was just the most recent one where I looked at it and shook my head.
The worst one because of its far-reaching impact was the whole .NET Framework 2.0/3.0/3.5/3.5SP1 debacle. I have completely lost count of the number of times I've had to explain to colleagues and also clients what the difference really was between the different CLR 2.0 releases (it's the same except new extra assemblies! well.. 99% the same! oh forget it..). It was especially bad for many large corporate IT departments because people without the time or interest in understanding the messed up naming scheme held back approval of deployment of .NET 3.5 SP1 over .NET 2.0 for years in some cases because of fear of the impact.
It's not just a developer thing, although that's huge, but also a matter of policy at the IT department level for the really big things. Semantic versioning may have a geeky ring to it, but it's much, much easier to explain even to non-developers than the current random text nonsense getting put out.
Not only are the names not semantically correct, but they are not consistent across products and sometimes inconsistent within the same product! (grr)
I feel that Microsoft is naming products based on placating IT managers, as if to say: "Hey, this is not a major update, you can use it. Look it's just update 1, we haven't even changed the released version number".
It's not even the difficulty in following EF and .Net framework versions, as a web dev I also have to contend with version numbers for Windows, SQL Server, Visual Studio, HTML standards, jQuery, a variety of logging and other useful packages (mostly on NuGet, but still more version numbers), and so on.
I'm not against service packs, rollups, cumulative updates, etc, but we need to decide on one word and use it (and include the end version number the cumulative packaged rollup will leave us on).
Worst case, if semantic numbering scares the sales and marketing types, maybe switch to a hybrid year + semantic where the major version is the year and the minor and patch number continue to be standard incrementals. So we do a major release and we call it .Net Framework 2012.0.0 followed by a minor release to 2012.1.0 and patch a few times to 2012.1.6
Why does devdiv have such a hard time getting versioning right, when the others don't? Sure, people say "XP", "Vista", "ME", etc.. but those are friendly names. Within Windows, you have versions 1 to 6. Confused with "windows server 2008" vs "windows server 2008 R2"? try typing in "winver", and find 6.0 and 6.1. Microsoft Office? I'm running version 14.0, having just upgraded from 12.0.
And I could care less what "friendly name" people give releases. "Snow Leapord", "Natty Narwhal", whatever. Want to call the next release of .net "Microsoft Windows development productivity platform 2012 with Microsoft Azure"? fine. (we know the names will be bad, we live with it) But give the actual *version numbers* meaning. The .NET platform has behavior and capability around version number management, why not use it? Why not be sane? It's bad enough that the actual CLR version, the compiler versions, and libraries change randomly compared to each other and the .net version.... but now we don't even get numbers at all? "Update 1", wow.
TL;DR: wtf, devdiv?
My suggestion for a rule-of-thumb would be that product names can be no more than three words long, plus an identifiable version number that is consistently applied. If people have to pause and take a breath while saying your product name out-loud, you've failed hard.
Yuss not alone in this! Had an epidemic a few weeks back where trying to come to grips with Azure and figuring out why my AppCache implementation kept on failing, ended up I had the wrong version of the SDK, because it was versioned weirdly. Yet MS had articles up on how to utilise all these new features, but all of them neglect to say that this is only available in the CTP version of the SDK. Tying along a proper x.y.x version number to releases is a major step in the right direction, what would be hugely beneficial too, is MS and We (the community) refer to these version numbers when making blog posts etc... I lost count how many blogs I came accross describing how to implement AppCache in Azure, yet only one blog (Shiju Varghese thanks dude!) mentioned that these features are only available in the CTP release of the SDK.
Things like NuGet is awesome! But MS needs to "adapt" the platform (or something similar) on a wider scale, similar to APT in Debian/Ubuntu. You know its there and it works and that is the standard way of doing things. Going "package" hunting is a waist of time, and keeping up-to-date with latest releases is extremely time consuming.
I'm off the beaten track, but the issue you raised is just the tip of the ice-berg when it it comes to MS patch/update releases.
I think Microsoft needs to make a better distinction between technical version numbers and marketing version numbers, and then use them consistently in the appropriate contexts. Technical version numbers are useful for developers and should follow a logical scheme that indicates the magnitude of the changes. Marketing version numbers are appropriate for managers and generic computer users, and can be anything, like a year or combination of letters.
Long live semver.org
Please commence with sane numbering. Especially for developer software. Letting marketing people decide how to manage versioning schemes is retarded, let them decide the box color and call it a day.
As for Microsoft products the precendence was set more than a decade ago with the jump from Windows 3.1 to Windows 95, and coming up with Office 5.1 on the second release. While names go well for the OS (Snow Leopard, Lion, XP, Vista), they do not explain much for the developer who really just want to do a version check.
Microsoft has had some great products (Sync, Communicator, SyncToy), that few know about. (See: Sync for the cloud) But marketers must be better at driving the cohesive message and stop trying to shove Windows Live x when it is nothing more than a re-badged product. Perhaps, Scott, you may have greater pull with TPTB at Microsoft to show how great Microsoft is as a software development company.
I think that MARKETING PEOPLE SHOULD BE KEPT AWAY from software development, look at what those guys made with Windows "Vista" and all those idiotic brand names. How would I know that professional is better than premium!?!
I was doing some work with WCF Data Services with WP7, it was natural to search the usual terms in google, about 70% of the articles I located were the general gist, I thought I was on the right track, then it all went wrong, I realised I had the wrong .dll version, not to mention their version info in the dll wasn't even changed, so it was extremely hard to tell if I had a new version or not.
So then I realised, the team did a reset on the dll last year, and only then did I find the *latest* version of this dll dated in Oct '10. So again I was a bit wary whether or not I have the latest one, but it seems like it.
I find that all these teams within Microsoft are doing a pretty poor job with keeping things on the web up to date. Not sure how they're going to manage this dll hell, but it's quite annoying when you go digg through the web, and you find all these blog entries mainly from microsoft employees themselves, with examples always out dated.
Very discouraging to develop against some of the CTP's that come out, I'm sure that not everyone has the time to stay in the loop with everything everyday. They seem to some what assume a lot of people are constantly following product X and will be aware of new changes and updates to it.
I'm feeling more and more discouraged by Microsoft these days, they were pretty good originally but now they're turning into a dogs breakfast.
It annoys me so much that, with everything there's a subtle difference in terms of development. For example we don't get BeginInvoke for Action methods in WP7, that's cool, could you maybe find a way to add warnings or some how apply some filtering out on the intellisense for those entries?
All these small discrepancies, and not to mention the abundance of "NotSupportedExceptions" in silverlight is also aggravating. Sure I know it's a lot of work, but hey, if Microsoft's intention was to make skills transferable, i.e. WPF dev can pick up Silverlight easily or SL devs can pick up WP7 dev work easily, then they need to fix these bloody tools up. Not just wack it together, and then hope that someone encounters a problem that's not supported. Completely frustrates me, developers should be expending time on writing business logic, not unraveling mysteries in these frameworks that have methods that are half not supported but appear to be.
Enough of my rant, I've gone off tangent with my reply, yes Microsoft versioning sucks big time, and they suck in a lot of other areas too.
But it is probably not as terrible as some of the heated responses here say.
per the .NET versions table, there was also .NET 2.0 SP1 which sort of brought the 2.0 to a state it could run 2.0 targeted c#3 code (but 3.0+ specific libraries) and was easier to sneak past hysteric sys-admins. so it did make sense to keep the number and call it a Pack, otherwise it would have hit a higher wall for install.
The thing I can't get is that why would you do it any other way? It just feels lazy to not use semantic versioning...
When I want to deploy an app internally on our network I don't need an installer an xcopy deploy onto the network is the quick and simple deployment strategy. In order for this to work I just want to be able to ask IT what version of .NET is installed (gone out through windows update) 2, 3.0, 3.5, 4.0....
I can't see IT saying yeah it's 4.0 PU1 they will just tell me 4.0 and allow the confusion and problems to ensue. Don't expect everyone to have knowledge of every incremental version of .NET just expect them to know 4.1 is higher than 4.0 or for minor updates 4.1.1 is greater than 4.1.0.
I've seen cool demos of Windows Phone 7 and Silverlight at local user groups and online. I'd like to use Microsoft's current mobile platform. So, I need information about a non-telephone version of Windows Phone 7. I don't need any of the personalized contacts, photos, games, music, etc. stuff. I need rugged devices with bar code scanners.
I found this versioning/naming mess on Wikipedia:
Windows Phone 7 is currently based on Windows Embedded CE 6.0 R3 with some features borrowed from Windows Embedded CE 7.0. Windows Embedded Compact 7 (formerly known as Windows Embedded CE 7.0) was released on March 1, 2011. The CTP version of the Platform Builder IDE for Windows Embedded Compact 7 is designed as plug-in for Microsoft Visual Studio 2008 and requires Service Pack 1. On 10 January 2011, Microsoft announced Windows Embedded Handheld 6.5. The operating system has compatibility with Windows Mobile 6.5.
WTF? Shut up and take my money!
With that said, we are an ISV. We need to have some reasonably intelligible way of communicating our runtime requirements to our customers -- something better than ".Net framework 4, SP1, Update 2, Rollup 3, with RIA Services 2 SP1, Silverlight 4, with Silverlight toolkit 2." (granted that's an exaggeration, but you get my point).
I've always believed the reason that Microsoft uses things like Entity Framework 4.1 Update 1 was for the IT shops that have very strict rules around getting software approved. It seems like once the IT (or security) department approves Entity Framework 4.1, then you can still get by using Entity Framework 4.1 Update 1 without having to get it re-approved whereas Entity Framework 4.1.1 might require another approval process. But that was just a guess.
From the outside, the obvious stupidity associated with names like ".NET 3.5 SP1 GDR" is the clearest demonstration of how true the nasty things written in the comments at mini-microsoft must be.
If the people who choose these numbers need a justification for leaving the version numbering to the engineers, it should be that their blundering makes the whole organisation look dysfunctional.
We all know that MS is riven by internal squabbling and petty feifdoms, but the less often we're reminded of it, the better. Distilling that discord into a stupid product name that then hangs around for ever 'gives bile a permalink' in an even worse way than you meant when you coined the phrase.
You guys are all wasting your time. Go home.
Another thing I don't really understand and like is NuGet package versioning. As packages are managed at solution level and under normal circumstances you won't need two different versions within one solution (containing one product and related projects), the NuGet folder structure /packages/[PackageName]/[Version]/[Contents] doesn't make sense for me. And the packages folder structure is not yet supported by VS 2010 SP1, too. This structure especially makes problems with subversion et al because when updating a package NuGet removes the version N folder and creates a new version N+x folder, which cannot be tracked by version control systems and makes it really hard to reapply own patches or modifications to packages because you don't have a history for the files you've modified/patched.
The answer I received was because win 7 only supports .net 3.5 and 4.0 and would not support legacy applications developed in 2.0. Being a former .net developer, I tried to explain that 2.0 was a subset of 3.5 and that would work. (hopefully I can become a .net developer again :) )
Maybe I'm wrong but if I'm right, there are 1000+ engineers and developers that would love to move to win 7 and the only reason we can't is because someone didn't understand .net versioning!
So in that concept any .NET 4.x should be able to run any .NET application targetting 4.0 -> 4.x. If you just want security patches they knock yourself out with 4.0 SP1 or whatever.
We make a commercial product and accordingly I live in fear of anything that's not "in the box" on the basic framework unless I have absolute confidence there's a way we can explain it and target it. In many ways .NET 4.0 was great simply because we didn't have to explain to people how to get to .NET 3.5 SP1. Now we're not touching any of the EF changes etc. because it'll make our life harder to explain to customers what they need to install & target. It'd be a lot easier to say ".NET 4.1". That they would get. Oh, and have a slipstreamed install of it. Seriously - did anyone have fun installing .NET 3.5SP1 where each incremental package was larger than the thing it was patching? Good times.
I think we can all agree that the ".NET 3.0 and .NET 3.5 run on the CLR from .NET 2.0 ... but .NET 4.0 is a real big one ... and 90% of us can ignore that .NET 4.0 PU1 thing which is actually like an SP1 ... but not quite as big as an SP because we really had just released 4.0 ... so we made up PU1 for political reasons so it would sound less serious ... btw the whole PU1 thing demonstrates that it is impossible to rapidly iterate the WinFX libraries due to the deployment model ... too bad we didn't invent Nuget back in 2006 LOL" debacle should have never happened. I suppose that now that .NET is around 10 years old we would hit the "Java 2 SE 1.6.0 Update 26 build 3" nonsense eventually, and we sure did.
What is annoying is that there is a "real" major.minor.revision number in there somewhere -- just look in C:\Windows\Microsoft.NET\Framework. I don't know why we can't just use those.
2) Make it obvious when major new value is delivered - 3.5 SP1 - should have been 3.6 (min).
3) Don't splinter the stack. The concept of one stop shopping for MS dependencies is very, very nice; EF 4.1 being out of band is not the direction I want to see more things go from MS. Make it easy for us to determine what prerequisites are missing at deploy time. Release .NET 4.1 with EF 4.1, the azure/WF updates, all security updates, etc.
4) Speaking of deployment - I know you're a big fan of NuGet - but that's not how enterprise software gets deployed to the desktop, xcopy deployment is only for very simple applications, WiX is not a replacement for the lack of innovation in MSI; smallestdotnet is nice for home users, but that's about it.
5) Thanks for reaching out to the community to get our opinion.
.NET 3.5 = CLR 2.0 = C# 3.0
And there are people (interviewers) getting advantage to confuse interviewees.
Semantic Versioning rocks!
I think we'd all be shocked if we could put a dollar figure on the amount of time spent explaining the .NET Framework's versioning to managers, recruiters, server administrators, and even other developers.
I've not spoken with a anyone that said to me "Hey, I think the .NET Framework versioning makes perfect sense!" Almost, everyone has the same reaction which is more along the lines of "WTF?"
I have seen it worse that this example though...can't remember exactly, but it was something like "version x SP1 refresh update 2".
In the open source java you would be headed for this. You would break maven (which is automatic recursive binary dependency tool, something meant to solve versioning hell). The only reason .NET does not use maven is because the framework releases are centralized and alligned. In Open Source world there are so many different projects updating in different timelines that you must have some tool that protects you from "DLL hell" (JAR hell). In order to specify version dependency you either state [4,0,1,1] or [4.0,) which means 4.0 or above. The notation is what drives everything
.Net 3.0 was a laughable major version increment. Laughable.
The one that annoyed me to no end was 3.5 vs 3.5 SP1.
That was the source of a lot of grief when I had to deal with certain clients.
You know the type: Major corporates who have outsourced IT departments who do exactly what's written down.
Someone asks the tech lead: "What's the server software requirements?"
Tech lead says "Windows 2008, IIS, .NET 3.5 SP1... " etc.
That gets put into the documentation as: "Windows 2008, IIS, .NET 3.5" because someone accidentally drops the SP1.
Client's tech team specifically drops .NET 3.5. on the server - nobody notices it because the things using the extra features in the SP are infrequently used. Random stuff breaks partway through testing.
After some significant time, you
Then ensues a week of arguing over whether we can deploy .NET 3.5 SP1, and who's to blame for this.
Forever more your first response to that feature breaking is "So, it's got .NET 3.5 SP1 deployed to the server, right?" which requires someone to RDP to the box (difficult, requires support tickets, etc) to ensure that was actually deployed. If there's a language difficulty between vendor and client's support/ops teams, well - this could take several days to verify.
for e.g:
"Product Name :Major ver .minor version .[*date of release*].[CTP/SP/PU]
say , Entity Framework:4.1.1.07.2011.CTP which implies "Entity Framework versioned 4.1 , June 2011 CTP release"
Advantage : 1) All required info in one place.
2) Easily sortable , searchable and filterable .
Regards
Girija
On a different note, having a date of creation/modification in the formal documentation as in the MS KB articles can sometimes help in putting things in perspective with respect to versioning. It also disappoints me when links on official MS sites break.
Our company has to maintain a list of approved technology and a roadmap of when old tech is no longer allowed. That is really difficult with naming like this. It's impossible to say .Net 2.0 is no longer permitted and 3.0 or 3.5 or 3.5SP1 is, since it requires 2.0. Again, not easy to explain to those who don't follow this stuff closely.
My hope with NuGet is that eventually all of the auxiliary features of the framework will evolve out-of-band, taking on their own versioning schemes. I think this is critically important for 2 reasons. First, it allows MS DevDiv to be more agile and to react quickly to emerging technologies that live outside of MS' control (e.g., HTML5, HTML5/WebSockets). More importantly, I think the quicker release cycle on the individual components (EF, WCF, MVC, etc.) enables the developers to engage with the developer community much more effectively.
If I want to see a new feature or a bug fixed in VS 2012, I'll go to Microsoft Connect. I'll submit a ticket and then forget about it. Hopefully I'll be pleasantly surprised one day if it gets fixed/implemented. I understand the amount of work that goes into reacting to suggestions in a lifecycle that involves language translations, SKU/licensing, legal, CD/ISO distribution, etc.. On the other hand, if I want to see a new feature or get a bug fixed in EF, I'll go to CodePlex and engage directly with the developers and the other users who have a stake in the technology. Not only are the odds of good ideas being implemented higher, but the timeline is much shorter. This is a win-win for everyone.
In a perfect world, I buy one of the TWO editions of VS2012 (Basic or Pro... TWO!!!) that fits my needs. The VS installer kicks off the .NET Framework 5 Installer (not 4.5 SP2). It installs the compilers, config, and core features of the framework. Everything else is modular, optional, and a la carte (think Web Platform Installer). In offline installer mode, the modules can be included and installed via NuGet from a repository on the VS2012 disc/ISO. In the web installer, NuGet can build and maintain local framework-specific repository of MS-built .NET features from the web. This would include things like EF, WCF, WF, MVC, etc.
But I completely agree with you. Microsoft, especially as of late, is coming up with great innovation and new technologies, but they're still naming their products like it is 1995.
This reminds me of Microsoft Windows Vista Ultimate UPGRADE Limited Numbered Signature Edition.
Oh, and I totally agree and second the comments by others with respect to assumed compatibility between minor version updates. Version 4.x should not break code which is based on 4.0, and anything written with version 4.x shoudl be backward compatible to at least 4.0 (in other words, the interfaces should remain consistent). Anything written to be compatible with major version 4 should work with version 4.x and vice versa (except to the extent that 4.x fixes a bug present in 4.x - 1, but that's different).
The second group is the development community and a large part has it's root in unix/linux programming. From the early days there's a defacto standard for version numbers in the form of x.y.z (build numbers aren't often used). X is the major version and when updated could break compatibility with previous versions. Y verion updates are large improvements and new features and everything should still work the same (like .NET 3.0 vs 3.5). Z updates are commonly seen as security and bugfix updates. And while this version schema held up pretty long, there seems to be a rage to crank up the major version numbers. Google really kick-start this with the Chrome browser and not long after also Firefox was following this schema.
To my humble opinion every tool/utility/framework that's related to the development field should have a predictable version number.
This probably would have made more sense:
1.0 -> 1.0.0
1.1 -> 2.0.0
2.0 -> 3.0.0
3.0 -> 3.5.0
3.5 -> 3.10.0
3.5 SP1 -> 3.15.0
4.0 -> 4.0.0
4.0 PU1 -> 4.0.1
Nice thing about using CLR in the major revision is you instantly know what will break. Minor revisions give you an idea of things likely to break as well.
The key thing for Microsoft to do here is to have a single, company wide version story. I'd start with just basic version numbers and the only thing I'd add is specific patches in the form of kb packages. As long as they are well documented they work great.
And one other thing should stay. Beta is still something I'd keep.
You don't need named new versions, not even SP's. I don't care if someone has installed all the Windows updates on a system right up to SP1 or if they have SP1 installed. It should be the same thing. The only thing that should change with updates through Windows Update is that they should not keep me waiting for more than two minutes when shutting down my laptop. If that was fixed I'd be happy to update every other day if that is what it takes. Just don't make me watch it and get it over with.
In a perfect world, I buy one of the TWO editions of VS2012 (Basic or Pro... TWO!!!) that fits my needs. The VS installer kicks off the .NET Framework 5 Installer (not 4.5 SP2). It installs the compilers, config, and core features of the framework. Everything else is modular, optional, and a la carte (think Web Platform Installer). In offline installer mode, the modules can be included and installed via NuGet from a repository on the VS2012 disc/ISO. In the web installer, NuGet can build and maintain local framework-specific repository of MS-built .NET features from the web. This would include things like EF, WCF, WF, MVC, etc
That's what I had in mind too: Use Nuget to install most of the components
Totally agree about semantic versioning! only digits please! You can see the amount of changes between versions by looking at the version number.
Also synchronization between product (if they bundled or released together) is very important. All peieces (EF, ASP.NET MVC, Windows Forms, ...) released as .NET Framework 4.0 should have version 4.0. Then updates can come as teams works, but when there will be version 4.1 ("4.0 SP1"), then all pices must upgrade to version 4.1 even if there is no change in functionality or no change at all.
just my $.02
s.
+1 to whoever said convention over confusion and to this whole semantic versioning concept.
And the inconsistency with SKU names is just a f*** up from the naming perspective IMO, SKU names should be descriptive, not confusing.
It is the first step in getting the .Net eco-system back on some tracks. Currently it seems there are many teams going (doing) agile at microsoft, but each is going on its own seperate path, and not communicating enough with the other teams. Ctp's, updates, refreshes, sp's, they are all flying around our ears. It has become extremely hard to keep track of where which technology is at. So versioning the stuff is critical and one of the first steps needed to get .Net back on its rails (pun?).
I really like Berts comment linking to just give us smaller nuget pieces not big frameworks How I would like Microsoft to distribute .NET v.Next but for MS to achieve that, we need a clear versioning story, if not were are all going to package hell. (It is already starting to feel this way now.) Scott, our saviour ;-)
For example, the fact they added Azure support in 4.0 PU1 does that means there are no breaking or major changes?
- Well yes perhaps they are major or breaking with regards to Azure
- But that doesnt tell you if Workflow has major or breaking changes or just bug fixes
How can a huge framework be versioned under a single semantic versioning system?
I am all for semantic versioning but the real problem here lies in a huge monolithic approach to framework distribution.
However, Scott, you write at the end of this blog post with regards to EF 4.1 Update 1, that "I would have said 4.1.5 or 4.2. Probably 4.2 if there were minor new features, and 4.1.5 if it's just patches."
Why would you want to just from vertion 4.1(.0) to 4.1.5? These .5 version jumps drive my crazy - it's like saying: "We're made to changes - they're not minor, but not major either".
What happens when you make the same amount changes to 4.1.5? Do we then jump to 4.1.10? And what happens if we in between added some minor changes to 4.1.5, so that it's now 4.1.6 - should the next "not minor, not major" changes jump to 4.1.11?
If you want semantic versioning - go all the way! From 4.1 there's three and only three options: 4.1.1, 4.2 or 5.0
If I've taken a dependency on the new EF 4.1 in .net4.1 - how do I detect this during a deployment?
Is .net4.1 installed in \windows\Microsoft.net\Framework\v4.0.30319 or is it in \windows\Microsoft.net\Framework\v4.1.34374 ?
Is a new key going to show up under HKLM\Software\Microsoft\NET Framework Setup\NDP\v4 ?
The bucket that is shipped as .net is too big: the Framework should be one version, and all the barnacles that glommed on during .net 3.0 and 3.5 should be hived off into separate packages - this seems to be working well for ASP.NET MVC. There's no reason EF, WF, WPF, WCF couldn't also live separate lives from the core framework.
+1 SEMVER and +1 SUNDERING (Split the monolith into smaller pieces)
Whereas a Lion as much better than a leopard, its not that leopards are faulty, its just that Lions are more ROAARRR!
If Windows XP service pack 3 was called fluffy snow donkey, people would embrace it more fully.
If Microsoft teams adopted proper semantic versioning during internal development cycles, so internal builds were called things like 8.0.0alpha17, we could even get to a point where brand new software landed with the version number 8.0.0! And then Service Pack 1 could be 8.1.0! Imagine the clarity!
"You may say that I'm a dreamer, but I'm not." ~ Barry, Dinner for Schmucks.
If you need more arguments for transparent versioning schemes, I'd like to recommend Luke Hohmann's book Beyond Software Architecture.
For this "update" to EF, it has introduced some new types (namely, DbContextInfo and IDbContextFactory<>) - for me, this means it's not just a "patch", but has introduced something new (albeit a minor thing) so therefore it gets a new (minor) version number, hence EF 4.2.
I think this all started for Microsoft with the release of .NET Framework 3.5 Service Pack 1.
Up until that point, I'd always believed (because I'm sure I read it somewhere) that Service Packs do NOT introduce new functionality. They fix bugs, or tidy up features that already exist, but they don't deliver new functionality. If you have new functionality to deliver, you have a new version number. So that's a new minor version number if the new functionality or additions are relatively small, and a new major version number if the changes are big (like introducing whole new frameworks/technologies).
I think MS screwed up the versioning on .NET 3.5 SP1 because they'd already released 3.5, and they seem incredibly reluctant to utilse any minor version number other than 0 or 5! Seems they didn't want to call it 4.0 as it wasn't accompanied by a new version of Visual Studio, so they had to bastardize the "Service Pack" moniker for the wrong purposes!
I don't have time to read all the comments but I think:
- Make the installer filename contain the version too, e.g. EntityFramework-4.1.1.exe
- Always refer to products which have a service pack baked in as "Product X with SP1" not "Product X SP1"
- Stop being marketing led and think about what makes sense to developers and IT Professionals
I'd also like to see the end of .5 releases also - just increase the minor version by one as you add functionality (there can be more than 10 minor versions - so why use .5!??)
As someone who has built Windows Mobile applications for exactly that purpose (a ruggedized warehouse barcode scanner), my best advice is to break from the Microsoft platform here; it's a mess and Microsoft management is too distracted with Windows Phone and an internal DevDiv/WinDev war:
https://connect.microsoft.com/VisualStudio/feedback/details/595712/no-support-for-windows-ce-and-compact-framework-development-in-vs2010
Pretty much this. Ordinarily its not a big deal, but it can be a hassle if you're trying to make sure two environments are the same.
Instead of calling it version "4 Platform Update 1" they could have called it version "4.1.1104". From this I know that the scope of the change overall is fairly small and there should be no breaking changes because they didn't change the major version number. And, I know that this change is from April 2011 because the last number is formmated as YYMM.
I give up.
- numbers (3.1)
- years (98)
- names (XP,Vista)
- back to numbers (7)
Then there's SP and now Update..........no wonder it get's confusing.
+1 for humor.
+1 for sarcasm.
+1 for delivery.
+1 for putting in a loop, posting to youtube, and sending the link to the marketing department.
Thanks for taking up this issue. I hope the feedback you gather is heard by TBTB. I would *love* it if Microsoft could coordinate, simplify and make consistent the version names of its products (and product names for that matter, but that's a different fight). If version names were easier for me to understand it would all allow me free up some brain cycles that I could put to better use on my projects.
> perhaps you could get marketing to issue a complete historical timeline of all .NET releases
>> Ian - Maybe we can put up a wiki and do it ourselves?
While a wiki would be great, I think it could be a teaching moment to make the people who caused it gather the info. Once they get to ".net 3.5 sp1 compat with clr2, c#3: contains new features such that apps targeting this can not run on .net 3.5".... well, perhaps somebody may say "why do we make this so *hard*?"
I could go on and on Microsoft makes some great stuff but the naming and versioning gets really badly done at times!
http://anythingbutiphone.com/6502
Dan in Vancouver
I also agree 100% on silly naming like professional, premier, ultimate, etc. How about VS 2010 infinity time infinity edition? Even a "Good, Better, Best" name would make it clear which one was the big box.
Cheers,
Abe
I can't even say I hate the system that is being used now for .NET, because as far as I can tell it isn't a system, which is even worse. But it has to change. I remember commenting on your blog when 3.5 SP1 was released about the utter ridiculousness of 2.0-3.0-3.5-3.5 SP1. It's even worse when something that is called a Service Pack is NOT a service pack. And seriously, "Platform Update"??
We have to fight enough battles on a daily basis with regards to figuring out what version of what product we need and how to get it deployed to our users. Please, please use whatever influence you have to convince whoever is making these insane decisions that they are doing their customers a massive disservice by making it even more difficult for us with their naming choices.
Microsoft® SQL Server® 2008 R2 SP1 Feature Pack CTP1.
Not only on dev tools, but also in product like Windows, where is Home Basic, Home Premium, blah blah blah. People end up buying computer for their small offices in Office Max, they see a cheap one and end up buying Home Basic (because they don't know the damn difference) which they keep having issues with on their networks and just get frustrated with Windows and the Microsoft brand. They should just release Windows and Windows Enterprise if all they care is get the extra cash when selling to enterprises.
BTW... SQL server doesn't escape this nightmare either. You can't install 2008 SP2 on an R2 box but the new R2 SP1 is LATER than SP2? Isn't that nice and clear.
And here I thought that .NET side-by-side was supposed to get rid of dependency hell! No so much.
PLEASE convey our thoughts to the PTB. Future naming/skus should be consistent, simple, and numbered in a way that the rest of the world uses so we can all keep our sanity.
Thanks, Scott!
Good luck pounding some sense in those knuckleheads doing version naming/numbering...
As far as I am concerned, however, there should be a prominent display of a semantic versioning in a consistent location somewhere on the main information pages that makes it quick to determine whether an the advertised product or update with its marketing-based euphemistic version naming is more recent than that which we know is installed on our systems, as I think there are plenty of people out there who want to get there jobs done, and would rather get our warm fuzzies from our spouses, families and pets rather than from (insert software company)'s marketing department.
Sales and marketing can have as much space as they desire to sell to the business people, as long as the people who have to make it all work have a 12 or 16 or 18 point semantic version someplace consistent to know whether what is being advertised is preaching to the choir or worth learning more about.
What I want to know from you, is DO YOU CARE.
Yes, I care. Even though it's not terribly important in my day-to-day work and my understanding of the versions make me sound very smart.
The semantic versioning specification looks good, and according to that spec EF 4.1 Update 1 should have been called EF 4.1.1 and not EF 4.1.5
I'm looking forward to .NET v5.0
I would like to know where this culture of strange versioning comes from? How it came about? It seems every other software company/organisation in the world can get this right, why not Microsoft?
The real question is why marketing prefers worded versioning. Confusing versioning must help marketing. If a customer is confused maybe they're more likely to agree with the bias of a marketer. Has any research been done by marketing to handle a customer that is a programmer?
The company I work for had one go to
Obviously, there's also a giant product naming problem. But version numbers definitely aggravate the whole issue.
This might have something to do with the inconsistencies.
I specially don't like "service packs"
Service implies a update that fixes things and not an update that adds new things.
When u get your car serviced do you come back with a new engine?!
The opposite of this argument is absolutely true when you deal with technical people. I (as a dev) want to know it's Windows 7.0.0.1111 I am dealing with and that after the upgrade I will have 7.1.0.1234. Semantic versioning is something all technical people immediately understand and interpret correctly.
No need to wow us with fancy marketing speak - just the facts please!
(Nice article, Scott!)
;(
Even if they don't go for semantic versioning, at the very least get a consistent versioning scheme across all products so that it's easy to understand what each release means and how big the likely impact is going to be.
http://blogs.lessthandot.com/index.php/All/?p=1263
http://devlicio.us/blogs/hadi_hariri/archive/2011/05/18/did-you-just-take-a-dump-on-standard-versioning-practices.aspx
http://blog.maartenballiauw.be/post/2011/05/18/Microsoft-NET-Framework-4-Platform-Update-1-KB2478063-Service-Pack-5-Feature-Set-31-R2-November-Edition-RTW.aspx
Just in case you need more evidence.
Then, if marketing wants to call it "Magical Unicorn Service Release PU Squantillion Delta", let them write it in the package and ship a CD with the label to whomever receives their software via CDs - maybe other people in marketing.
But for those of us who need to actually use the product, X.Y.Z is far more helpful.
I do hope that they will listen you...
you are so right! Versioning is important.
And by the way: Microsoft: Try to avoid that marketing replaces nice names like Indigo or Avalon with crazy last-minute-names like WCF or WPF - nobody likes these...
Stefan
Use a nice & short name and a 3 set version number for every product. People understand product updates where it is not a massive change but a handful of new features are added - just look at Chrome, recent Firefox, OSX.
And stop using acronymns too!
Get this right now MS!
And then there's the issue of product naming versus product versioning. Let's not forget the year-based naming scheme that has plagued the Windows and Office product lines since "Windows 95". The only time year-based naming or versioning actually makes sense is the "YYYY.Q" scheme for products which actually *have* a quarterly or semi-annual release schedule (e.g. "2010.2", "2011.1"). For products with two or three years between new releases it's just silly. While I find Microsoft's year-based naming to be rather silly, at least it doesn't openly conflict with the actual product versioning: having a product named "Office 2010" with a version number of v14.0 isn't all that bad since "2010" doesn't look like a traditional version number. The new Windows naming scheme, however, is another matter. One would think "Windows 7" would be Windows v7.0, yet it is actually Windows v6.1. I suppose "Windows 8" will be v6.11? Ugh. (I am rolling my eyes right now.)
Don't even get me started on all the SKUs. Seriously, who felt it was necessary to have six Windows SKUs? And let's not forget the nine SKUs of Visual Studio 2008. Visual Studio 2010 has been "simplified" (if you can call it that) to a mere four SKUs. Are we supposed to be pleased that the number of developer tool variations has gone from being inexpressibly absurd and incomprehensible to merely ridiculous? Hey, I have an idea: how about having two Windows SKUs: "Windows" and "Windows Server"? Visual Studio can be reduced to a single SKU (simply "Visual Studio"), given away for free, and completely decoupled from MSDN. MSDN should have only one subscription level (still paid) with volume options for ISVs to cover all their developers. There, see how easy that was?
OK, that's the end of my rant. If you're willing to try to fix any of this--even if it's just .NET versioning--then I salute you and stand behind you all the way. Good luck (you'll need it).
<major>.<minor>.<maintenance-release>.<service-pack>
Or in microsoft's case you might have something like:
<major>.<minor>.<service-pack>.<hotfix>
marketing names are ok ... in marketing and sales.
Otherwise for us techies use the version numbers.
I say cut the product advertisements of the new latest and greatest and just tell me in the versioning whether I need to worry about small bug fixes, or major enhancements.
I heard in one podcast that MS have a naming department somewhere. How about adding versioning + community accountability to that?
The perception is that once MS do a code drop, everything is baked in. You can't hit the backspace key on anything.
Wouldn't it be good if the frameworks could have a refresh based on community feedback? Probably there's quite a bit of value that never gets used. Unfortunately, [Obsolete()] is the only backspace key presently.
Here's the worst one I have ever seen: System Center Virtual Machine Manager 2008 R2 SP1 Self Service Portal 2.0. Has WTF written all over it, if you ask me.
Anyone making a product, no matter what the audience, should spend a little extra time thinking about what a name should mean. A product name should be short and representative, that's all. The longer it is, the less representative it will be.
Do you make different version numbers for each component? Also, what is the A SIlverlight component is a mixture of shared base classes and then client-specific derived and dependent classes, call this A' Now what do you version?
These various parts of the also live in different repositories.
I would love some feedback on this, though StackOverflow may be the best place for this discussion.
Cheers,
Daniel Williams
+1 to semantic versioning
+1 if you have multiple components in your system they should all be versioned. Sql Server 2008 10.0 was fine when it shipped. But every assembly that shipping as a SP, CU, HF, QFE, etc all said 10.0 also. When they should have bumped. You can reset all of them to align again when you have a major new release. But then even an end user could look at the assembly and tell you if they have the right version or not.
Check out what they did to Windows 7, which is actually Windows 6.1
and check out Windows Phone Mango, which is known commercially as Windows Phone 7.5 but it's actually 7.1 even though it's a huge release with 500 new features.
Even in our rapid, iterative, agile world versioning is critical. Once one takes a dependency upon a discrete chunk of code, one needs to know when that dependency is broken. It shouldn't take a chain of KB articles or Googling for blog posts to actually determine that a problem exists.
Dependencies are one part of the equation. Our fast-paced world is also exploding the amount of software available which is challenging for even a version anorak to keep in their head. Straightforward versioning helps yield clarity to a complex ecosystem.
I work with a vendor of a LOB application that has recently begun digressing into the Microsoft versioning hell. This isn't exclusively Microsoft's issue, either. Microsoft has always been a role-model for the entire software ecosystem of ISV's and websites.
Thanks for your thoughts and I look forward to the outcomes of your voice being heard at MS. Any change at Microsoft can only help provide leadership to the entire ecosystem.
Where to start, oy! I could rant on a lot of product names and versions but you did a good job of showing how a few products vary in how they version.
My stance is that this is more than just a versioning problem, it is also a naming problem. Version becomes a marketing identifier as well for example "Windows Phone 7" or the the dreaded "Windows Phone 7 Series" that almost happened before they dropped the "Series". "Windows Phone 7.5" in the about actually shows up as 7.1. Let me just say this: W.T.F.
At the end of the day I want simple. If you are going to use years like "SQL Server 2008" then stick with years on that product, don't release a "SQL Server 2008 R2" which was actually released in 2010. This makes absolutely no sense to me. The argument I hear in this situation is that IT departments are more apt to upgrade if the product appears to be the same version and not another major version (which in fact it really was). Playing games with names is insulting your customer bases IT departments thinking that they don't know the difference. If IT departments in your ecosystem don't take to upgrades very well then address that issue. Naming isn't addressing the core issue. Seek the core issues and resolve them.
Same goes for betas. I assume CTP (Community Technology Preview) was created because of the stigma around "beta". Why does beta have a stigma however? The iOS community gets iOS 5 beta downloads from Apple and nobody complains. If Microsoft feels there is a negative connotation with "beta" it's because it lost the trust from it's community at some point with poor beta releases. Renaming doesn't all the sudden make things better. It complicates them.
On Twitter, the community often pokes jokes at Microsoft's verbose naming and versioning all the time. This should be an indicator things are out of control. Sometimes it feels like there is a corporate policy bonus for who can achieve the most acronyms in a single product name :P
To take the naming and versioning thing further, Microsoft commands a very big ecosystem that it has built and it's ISV's and partners look to it as an example. A result of this we see a lot of partner products with convoluted product naming and versioning. I see CTP and R2 and various other inconsistent naming/versioning out in the industry.
I really wish that products could have simple naming and simple versioning and this should be consistent as much as possible among products. I understand Microsoft is a decentralized organization however if we start to look into this even further things look very disorganized.
My wishes:
Create a group that manages naming and versioning. Show some leadership and organization.
Keep it simple.
Keep it consistent.
Make it something people can say in a discussion or sentence. Tongue twister product names don't belong.
Thanks again Scott!
They should keep the naming conventions non existant and as confusing as possible, so only interested and curious people will be able to understand and explain the differences after a few bing searches..!!
The next version should be something like .NET 4.0 super ultimate update 2 featuring binaries and xulumetrics for exponential combinatorics!!!
hehehe
Ian - Maybe we can put up a wiki and do it ourselves?
Is there already a blog and if where?
Thanks.
Thanks for bringing this up and giving the community a chance to provide some feedback!
Personally, I think Microsoft's developer libraries such as .Net and DirectX should use semantic versioning. Other products like Windows, Office, Xbox, etc can use N+1, year, etc. However, everything should be versioned simply. Don't use "Windows 7 R2" or "DirectX 12.0.4.9832.12121 Magic Unicorn Edition"! Keep it simple, "Windows 8", "DirectX 12", "Sql Server 2010", "Entity Framework 4".
I'd also mentioned here the strange situation with "Open-Source" projects which included into Framework. ASP.NET MVC & MEF. ). They have two lifes: one in Framework another's inside OSS-hub (codeplex).
I guess the obscure versioning of libs is from the fact that teams try to synchronize their products' versions with Framework's one. I think MS is better to split Framework on separate libraries (at lease EF, MEF, ASPMVC). I beleive it'll allow to simplify versioning of many libs.
p.s. Please no more SPs like .net 3.5sp1! Why was it not 3.6?
+1 for semantic versioning.
I also think that microsoft product names are often so generic as to make them very difficult as search terms, like .NET and SQL Server to name a few.
Please ask them to leave the point system alone. Stay with semantic versioning all the way.
Thanks.
I can understand also the Sales people need good new product name to boost their sales. I think we can live with both of them. They choose the product name and follow the semantic versionning.
IMHO it has clearly been let get out of control and when the time comes and you have to do fresh installs of everything, you end up wastign huge amounts of time and getting REALLY frustrated. But then, if MS doesnt understand the benefits of versioning, maybe we are in more trouble than we thought.
"Exchange 2010 Service Pack 1 Rollup 3-v3" but no v2. Seriously? And now there's a Rollup 4-v2... The build numbers are what you see in the UI, the build numbers are fairly semantically ordered. Why not just use those?
Also, please tell me why it is so difficult to find what the latest update is.
Are the latest updates listed on the marketing page?
Nope.
Are the latest updates listed on the technet page?
Nope.
The only viable way I've found is to search for what should be the next logical release and see if something comes up in Google. Or go to the Microsoft Download page for one of the updates and then look in the "What others are downloading" section.
[Search Google for Update Rollup 5] Oh, there's an Update Rollup 5 for Exchange 2010, that's probably the newest, right after Update 4-v2! [start downloading] Oops, that's Update Rollup 5 for Exchange 2010, not Update Rollup 5 for Exchange 2010 Service Pack 1, Google search fail! [cancel download]
Should I have searched with quotes? But what for? "Exchange 2010 Service Pack 1 Update Rollup", "Exchange 2010 SP1 Update Rollup", "Update Rollup for Exchange 2010 SP1"?
.NET versioning has definitely been in a similar shambles to the rest of Microsofts software, but it pales in comparison to it's more senior siblings.
Sigh...
I'll believe it when I see it.
For VS 2008, for example, we have (oldest to newest):
VS 2008
VS 2008 SP1
VS 2008 SP1 ATL Security Update
VS 2008 SP1 MFC
VS 2008 SP1 MFC (yes, there is a newer version, since the first messed MFC up on non-english systems. A new version was thus released, which is called the same as the older version!!!)
2. Totally agree with KevDog and what one things when one sees a version number.
Thanks!
I installed a fresh desktop at office with Win7 and VS2010 using my companies installers, went thru all my automated updated. Then I went home and downloaded the trial VS2010 went thru all the automated updates. Now my project that uses stuff in office does not work at home as it has libraries and updates missing.
There is no straight way to understand if I have missed a Service Pack, a Platform Update or some Cummulative Update. This is crazy. If I can only know I have 4.1.0 or 4.1.2 of a particular product things would have been very simple.
Microsoft was once the master of getting the version numbers right, last 2/3 years things have started going bad.
.Net Framework 4.0.2 : http://coolthingoftheday.blogspot.com/2011/10/net-framework-402-release-information.html
http://stackoverflow.com/questions/8810391/will-net-4-5-introduce-a-new-version-of-the-clr
It seems the CLR is newer in .NET 4.5, but Microsoft is going to give it the exact same version: 4.0.30319. Why is that?
Comments are closed.