There are “internal” and “external” version numbers in software. The “internal” version number is useful for developers. I normally include a major number, a minor number, and a build number in this “internal” version number.
For example, we may talk about completely revamping our software and call the next revision “Release 3.0” as a way of talking about our redesign. I may be on the “Release 3.0” redesign team vs. my friend who is working on the next revision, “Release 2.3”. We can now talk about “Revision 3” features vs. “Revision 2” features.
The minor number is a way of aiming a particular set of features and bug fixes as a package. For example, “Release 2.3” may include the new indexing scheme, a few new reports, and revamped error handling. We decided that the remote control feature will be pushed off to “Release 2.4”.
As the release gets closer to reality, we may push off more features to “Release 2.4” in order to make our deadline, or (if we are lucky) about moving a few features we were saving for “Release 2.4” into “Release 2.3”. Again, this gives me a way to talk internally about what is expected out of each of our releases. Are we planning on implementing that in Release 2.3 or saving for a future release?
The build number is simply a way to talk about which build in Release 2.3 I’m on. It’s helpful for talking about bugs. If we are using Subversion or Perforce, the build # becomes the changelist. Now, we can talk about that fatal bug in build #2302 in Release 2.3 (or “Release 2.3.2302”.
Thus, the three part revision number is very useful to me as a way of talking to my fellow testers and developers what they’re working on and what they can expect in the next release candidate.
What you are talking about are external release numbers, and that’s not a technical decision, but a marketing decision. As a developer, I may call one release “Release 2.3” and another “Release 2.4”, but our marketing department may refer to the packages a “FooPower 3.2” and “FooPower 4.0”. Maybe instead of “FooPower 4.0”, they’ll call it “FooPower - The Next Generation” or “FooPower X”. Or, even “FooPower 2007”. It’s there decision.
There are advantages and disadvantages of dates. For example, what if Windows XP was called “Windows 2002?”. Microsoft would find it would emphasize the lack of Windows updates. Who wants a computer in 2006 with an OS that’s four years old and probably obsolete.
In fact, I bet Microsoft switched from calling their releases Windows 95, Windows 98, Windows 2000 to Windows XP because they expected that the rewrite of Windows to Windows Vista may take longer than they planned. Microsoft could hide this marketing problem by switching from years to “XP” and “Vista” as version identifiers.
Then, there are the people who think as releases in terms of months and not years. If I released “FooPower 2007” in January, do I now have to wait until next January before I can release “FooPower 2008”?
Whether dates are a good way of doing your versioning depends upon marketing, how often you release your code, and who you are releasing it to. Geeks who use FireFox may prefer to talk about FireFox 1.x vs. FireFox 2.x, and it may be a way for FireFox to get people to update their software. Office productivity packages have a much wider audience, so using years may make a lot more sense.
I do notice that my Microsoft Word 2003 is versioned “11.6568.6568”, so it appears that Microsoft also uses internal (Word 11) vs. external (Word 2003) version numbers.