Channels ▼


Version Numbers: Sequenced Meaninglessness

There once was a time that version numbers on software technology communicated useful information. For example, when Windows went from version 2.1 to 3.0, you knew this was more than a mere service pack upgrade (although service packs didn't exist then). This release was likely to be a whole different UI or a massive rewrite of the parts under the hood. If not either of those, then a significant increase in functionality. You knew this because the left-most digit had changed. When the most-significant digit was incremented, big changes were afoot.

There was still some low-level trickery in numbers. For example, most products came out with at least a 2.0 or 2.1 initial release, so as not to scare away managers and buyers who might be put off by a 1.x release. And to this day, with the exception of open source products (which I'll discuss shortly), new products rarely premier under a 1.x signature. The other gamesmanship tended to occur in determining whether a given release was worthy of a new most-significant digit, or whether it was a"“point release" — a 3.2 rather than a 4.0. Invariably the marketing departments loved the the shiny x.0 numbering, while the engineering departments feared that they'd be overpromising if the number didn't correspond to a reality.

This reliable understanding between vendor and customer fell apart when Microsoft released Windows 95 a few years after Windows 3.1. As a wag told me at that time, "I don't see anything at all that would justify skipping 92 major release numbers in this product. With the '95,' I was expecting the sun, the moon, and all the stars in this box, but it's just another Windows package. What the...?!" I can only imagine how he felt five years later when Windows 2000 arrived.

However, Microsoft's breach of the social contract was nowhere near done. As you know, the company last year released Windows 7. SEVEN?? For the first time, a major vendor has reduced the version number (by more than 99%!) to name a new product. In essence, the company stated that from here on, the numbers of products will go up and down and no particular meaning should be attached to them. In fact, unless you're schooled in what each release does, you cannot attach meaning. Someone new to the Windows scene would have to find additional information (such as release dates or feature lists) to divine that Win7 is actually a later, presumably better, release than Win95.

Most vendors refused to follow in Microsoft's cavalier treatment of version numbers. The company that most radically diverges is Oracle. In the Oracle universe, no fully integrated product can carry a release number that's larger than the flagship database, currently at v. 11. Because of this stricture, product lines have no way of communicating major version upgrades. Consider, for example, Oracle's Java IDE, JDeveloper. Its current release is numbered That's right, five levels of release numbers, all of them meaningful. (When I mention this to Oracle, they roll their eyes, shake their heads, and wring their hands.)

If you want to roll your eyes in concert with Oracle, consider Java's numbering scheme. Java 7 is, under the hood, named Java 1.7. Upcoming updates are numbered 1.8, even though they'll be released as 1.7, or more precisely, as Java 1.7_uX (where "X" is the release number). I can't wait to see the chronosynclastic collision that will occur when the Java release number catches up with the database.

The rest of the commercial industry finds numbering systems between the poles of Microsoft and Oracle. Nvidia, for example, bumps up numbers on its drivers for most every change of consequence. As a result, I am currently running Nvidia driver version 188.25. Which is peanuts in comparison to Google Nexus, which uses WebKit version 534.40.

The most conservative version numbers are in open-source, in which a project can be in use for years before it reaches release 1.0. In fact, contrary to the commercial view of numbering, version 1 is the mark of maturity, stability, and thorough testing. On the surface, this might seem like a good thing, but in fact, it also makes releases difficult to fathom. There's no way to tell whether a 0.8 version is still new or a mature stable product without doing research into the release history. Since sifting through OSS repositories is hard enough, especially when trying to separate the active from the dead projects, this numbering scheme is as much an encumbrance as a benefit.

I should point out that there are unique schemes I haven't covered here. To wit, Knuth's numbering of TeX closes in on the value of pi, by adding digits after the decimal point. You read that right, the least significant digit numerically is the most significant in the release — not in absolute terms, but by its very existence. The current version is 3.1415926. The previous version was 3.141592, and so on backwards. This approach works only for software that will not experience a lot of releases, obviously.

But, let me acknowledge the one version number that's been absolutely sequential for two millennia and is far from meaningless: 2012. Best wishes to you all for the new year! It's been a joy riding through 2011 with you.

— Andrew Binstock
Editor in Chief
Twitter: platypusguy

Related Reading

More Insights

Currently we allow the following HTML tags in comments:

Single tags

These tags can be used alone and don't need an ending tag.

<br> Defines a single line break

<hr> Defines a horizontal line

Matching tags

These require an ending tag - e.g. <i>italic text</i>

<a> Defines an anchor

<b> Defines bold text

<big> Defines big text

<blockquote> Defines a long quotation

<caption> Defines a table caption

<cite> Defines a citation

<code> Defines computer code text

<em> Defines emphasized text

<fieldset> Defines a border around elements in a form

<h1> This is heading 1

<h2> This is heading 2

<h3> This is heading 3

<h4> This is heading 4

<h5> This is heading 5

<h6> This is heading 6

<i> Defines italic text

<p> Defines a paragraph

<pre> Defines preformatted text

<q> Defines a short quotation

<samp> Defines sample computer code text

<small> Defines small text

<span> Defines a section in a document

<s> Defines strikethrough text

<strike> Defines strikethrough text

<strong> Defines strong text

<sub> Defines subscripted text

<sup> Defines superscripted text

<u> Defines underlined text

Dr. Dobb's encourages readers to engage in spirited, healthy debate, including taking us to task. However, Dr. Dobb's moderates all comments posted to our site, and reserves the right to modify or remove any content that it determines to be derogatory, offensive, inflammatory, vulgar, irrelevant/off-topic, racist or obvious marketing or spam. Dr. Dobb's further reserves the right to disable the profile of any commenter participating in said activities.

Disqus Tips To upload an avatar photo, first complete your Disqus profile. | View the list of supported HTML tags you can use to style comments. | Please read our commenting policy.