Open Project Guide | For and about open source projects

Mar/10

6

Numbers are nothing but smoke and mirrors – selecting a version numbering scheme

Choosing the right scheme for the version numbers is not as easy as it sounds. There are many implications that you may not think of in the first place. Selecting a version scheme without thinking is like selecting a name without thinking and you don’t wouldn’t do that, would you?

There are features missing, so we start at 0.0.1-alpha1 …

There are thousands of projects, which have a version number that starts with a zero. It was common to do so many years ago and strangely enough, there are still projects that do this today. During the “Web 2.0″ hype it was even en vogue to put “beta” stickers in the logo, so the “unfinishedness”  was promoted to a positive signal that expressed that the project was dynamic and evolving. While that point of view is somewhat understandable, it’s somehow “dangerous” too. People often don’t take projects with a zero in front not seriously. Many projects even classify their status as alpha or beta for many many years. Nevertheless, they release new versions to the public from time to time. How can this be, if the project is not ready for use?

A common misconception is that a project that releases something with a 1.0 is finished or has completed the vision for the project. Another “advantage” of the leading zero is that you can react to critics that the project itself is not finished and the complains will be resolved when 1.0 will be released. But are there critics that complain in this way and if there are, do they really buy the argument that this is due to the beta status?

I think not! When you are so satisfied that you want to release a stable version to the public (I exclude “real” beta versions and release candidates here), then you should consider to start with a 1.0 when you use this kind of version number scheme. It’s not a problem if a 1.0 release is not feature complete, that is what future releases are for. Just use 1.0 for the first release where your software does something useful (otherwise it wouldn’t make much sense to release, doesn’t it?) and then go up from here in your self defined steps. The common scheme is #major.#minor.#patch, where #patch is increased by (security) bugfix releases, #minor is increased when smaller changes have been made that are usually compatible with the prior releases with for example saved files, interfaces, … and #major is increased by big changes that the team considers as big step ahead. New major releases are also a good point in time for breaking compatibility or getting rid of deprecated stuff.

Using a reasonable version scheme with appropriate numbers, people will take the project more serious, business users won’t get a headache when they have to convince their boss that the 0.0.1alpha3 version of your project is more stable and reliably than the version number suggests. Don’t get me wrong, a version number does not make the your project more reliable, stable or whatever, it just changed the perception of the project and provides a more professional “look”.

Alternative schemes

Another thing that has established at least in the last decade is that major or sometimes even minor releases get code names that make them memorable. Ubuntu for example uses alliterations like Karmic Koala, Dapper Drake etc. to name their releases (major + minor according to the scheme above). KDE has code names for their beta series for a release. This makes it a lot easier in communication with your users and within the team to speak of the karmic release than release 10.04 or the 1.2.x series. Some projects follow a strict pattern in choosing their release names, for example Debian uses toy story character names, if you need plenty names, you might want to have a look at names appearing in the lord of the rings series. ;-) Another reason for assigning names to releases is as reminder of project members that died, this has happened to the postnuke project and the next series was named the “Adam Baum” (Greg Allens pseudonym) release. He lost his life in motorcycle accident.

Another thing that might be worth mentioning is that there are more schemes than the major.minor.patch scheme. The decision whether a new release is a next major release or just a minor or maybe even if the minor version should be raised by two or more may take quite a lot of time and some people are really serious in this area and escalate this decision to a full blown conflict. You might also just use the year and the month as version number or year and a running number for the releases of the year, example ubuntu like #year.#month (9.10, 10.04, …) or #year.#counter (10.01, 10.02, 10.03, …). This has the advantage or disadvantage (depending on your point of view) that people see in a glance how old the release is, so this may be only usable when you have a more or less steady release schedule with at least one release per year. I like it for projects with a  high visibility, small tools won’t benefit from it, but it’s worth considering, when you plan your release strategy and decide the version number scheme.

One last thing about creative version number schemes…
Don’t use only code names or start decreasing version numbers without a reason or you will bring projects like the linux distributions into trouble, because their package managers depend on version numbers that are only increased. Otherwise their update functions will fail. This also is a problem when you’re changing your version number scheme after a while, so don’t forget your distributors!

Conclusion

Version numbers are not an easy topic, implications on the perception of the project are not always as easy to grasp as we’d like to. So spend at least little time when the project starts to release stable versions. 0.x version numbers and beta stickers are out. People like reliable software that takes itself and it’s users serious.

· · · · ·

No comments yet.

Leave a Reply

<<

>>

Theme Design by devolux.nh2.me