Software version numbering

There is a kind of illusion that software and the culture that surrounds it is somehow mathematical, logical and rigid. But I’ve always found there to be a lot of ambiguity, inconstancy and at times outright contradictions when it comes to even simple and universally used concepts like version numbering.

So how do you choose a version number to assign to a newly released piece of software? Its a seemingly innocuous question but also one that doesn’t appear to have a correct answer.

Its my understanding that as a rule version numbers should be dealt out in sequential order, range from zero to infinite, smaller updated should result in a smaller increment in what the version number is raised to, and the version number one should be assigned to the first complete build of the software.

But how do you decide when a piece of software is complete and ready for that 1.0 version number? Similarly how do quantify the significance of an update? Those criteria are completely subjective.

What happens when moving or porting from one platform to another? Keep the version number in sync with the number used for the software on its primary platform? This is presumably preferable especially if both copies of the software are being developed simultaneously with the intention of them being indistinguishable. But what if it differs slightly on different platforms? What if its completely remade for its new platform and is no longer even recognizable? If blatantly differing pieces of software should be given their own version numbers then how do you define what is sufficiently different to justify doing this?

In the end my choice of version numbers tends to be fairly arbitrary and thus meaningless. Having assigned numbers is still helpful when conversing about the software and its various revisions. But the numbers on their own aren’t informative of anything at all.

Occasionally I’ll end up posting something without a number or an intention to iterate on it and then find myself later needing to retroactively apply a version number to that initial release just so that I can clearly differentiate it from a new one…

When I was working on the PC version of They Do Not Die I went without what I would consider “proper” version numbers and instead used release numbers. Any time I publicly posted an updated copy of the game it would be a release number of one higher then the copy that predated it. Regardless of how large or small the update was it would always increment by one and as a result the numbers would always be integers. For the sake of expediency I would often abbreviate it to a simple capitalized R followed by its number similarly to how v is frequently used in place of the word version. I was really fond of this system because of its consistency and clarity but often felt unsure of how well it may be understood by others as a supplement for a traditional version number. I feel like I’ve seen others do this elsewhere but I can’t actually recall any examples of it and its certainly not the norm.

If there any fellow developers reading this I’d be interested to hear your thoughts on the subject and what your numbering habits are.

6 thoughts on “Software version numbering”

  1. Version numbers have little significance when your software is small because the entire software package is one part and hence has only one number. It gets a bit trickier when you have a big piece of software like windows/linux where each piece of the software has its own rate of growth, its own version number and is probably being worked on by several different people.
    In such a case software is needed to keep track of stable version number combinations, archives and release points.

  2. Many Linux distro have policy on version names. One common is to use digit as first of char of version. So your package with “R” prefix must be canonized to policy by stripping “R” prefix. Also usual practice add “v” prefix to name.

    I do not completely agree with follow but think this is useful for your ask –

  3. What I like in your post that you come to understand that version was needed to identify changes. Without VCS tagging and mush more better without filling CHANGES or NEWS file version numbering is useless.

    Tricks with complicated names come when you need provide machine readable info about version compatibilities. Usually this is DAG (graph) but people try encode this info in MAJOR.MINOR.REV.BUILD.DATE strings…

Comments are closed.