In recent years the larger software development community has started to pay more attention to version numbers.
The Node community in particular has introduced specific guidelines for what it means when you increment various parts of a version number. Generally:
X.Y.Z -> X.Y.(Z+1)
X.Y.Z -> X.(Y+1).0
X.Y.Z -> (X+1).0.0
This scheme for version numbering, called semantic versioning (or SemVer), is easy for automatic dependency management systems to understand, making it highly useful for communities that encourage liberal use of third-party libraries.
Use of semantic versioning is highly recommended for projects that are intended to be depended on and automatically upgraded, such as:
Semantic versioning is also useful for slower-moving projects that may require some manual upgrade steps, such as:
Using semantic versioning makes it easy for high-level projects to regularly upgrade their lower-level dependencies, either automatically or manually.
By contrast, I use the term romantic versioning1 to refer to all other version numbering schemes that adhere to the following fuzzy guidelines:
Romantic versioning is meant primarily for humans to understand, at the possible expense of easy understanding by a computer. This makes it suitable for marketing purposes (since marketing is directed at humans) but often not suitable for automated dependency management (which is performed by a computer).
As mentioned before, romantic versioning is mainly suitable for projects that are actively marketed and updated over time but not depended on by other projects, such as:
Some projects are not updated over time (such as many console games) and so have no version number at all.
There are many projects that maintain two different version numbers simultaneously: a romantic version for marketing purposes and a semantic version for developer purposes. For example:
8.40(“Java SE 8u40”), which is the romantic version; and “developer version”
1.8.40, which is the semantic version.
7(“Windows 7”), which is the romantic version; and at internal version
6.1, which is the best approximation of its semantic version.
There are also some libraries that advertise a romantic version as if it were a semantic version which causes lots of problems when automated dependency management systems try to consume the library.
Enjoy this article? Follow my Twitter account for notifications of new articles. 😃
I have seen other people use different terms to refer to romantic versioning. For example Dominic Tarr calls such versioning schemes “sentimental versioning”. However he mainly mocks such schemes, highlighting the negative aspects of romantic versioning as perceived by a developer without considering the positive aspects for marketing to consumers.↩
Projects that receive no updates are unversioned, with no version number, such as many console games. And a small number of projects use an esoteric versioning scheme, with version numbers that are hard to interpret by either human or computer. For example successive version numbers of TeX are closer and closer approximations of π.↩