Why does software have version numbers?
There are a lot of ways you can give a piece of software version information. No matter how you do it, there are always multiple reasons why you should do it.
#1. Show progress
One of the reasons software has version numbers is to show progress, e.g version 2.0.0 comes after version 1.0.0. It signifies that one release of a piece of software is different from another release of the same software.
Another reason to have version numbers for software is marketing: “Version 2.0.0 has 100 new features over version 1.0.0” and this concept translates from software development all the way up to product marketing where new versions of software are released with much fanfare.
Software developers use version numbers for a third reason: compatibility. That means that by looking at two version numbers for the same piece of software, a software developer can make a decision on how compatible these two versions are.
The encoding of that compatibility between versions is what gives version numbers meaning and since semantics is just a fancy word for meaning, this is called Semantic Versioning, or SemVer for short.
SemVer = Semantic Versioning
As said, there are a lot of ways for versioning software. For a software developer it's aim is compatibility information, but not taking into account the best-practices in the 'real-world' will lead to unwanted side effects.
In a discussion I had with a (potential) customer, He told me that he would never use my ochOpenGraph plugin because it was still in beta... How is that possible I asked him, that plugin is used on hundreds of websites and is rock solid due to continued maintenance on the plugin.
According to the customer it was beta because of the version-number I was using: 0.4.3. It was against his policy to use software below version 1.0.0 as everything below 1.0.0 was considered beta at best.
Go figure... The 1.0.0 version he was refering to was my 0.1.0 version. And that version was already created several years ago...
I was lucky for this customer taking the time to explain why he didn't purchase my plugin, but it made me realize that next to what I use the version numbers for: showing progress and compatibility, there was also the marketing aspect of the version numbers. So my way of versioning had a negative impact on usage of my plugins and extensions.
So I have decided to switch my version numbers to SemVer (Semantic Versioning). This is a widely used and accepted standard of software versioning.
A semantic version number consists of three numbers separate by full stops (or periods). Like 1.3.7. Each of the numbers in a version number has a specified meaning that signifies something about the compatibility of the software. The three numbers are in the format of: breaking.feature.fix.
- Breaking version = includes incompatible changes to the extension / plugin
- Feature version = adds new feature(s) in a backwards-compatible manner
- Fix version = includes backwards-compatible bug fixes
0.1.0 is a work in progress, you can expect that this software is not stable or should be used on production environments. new versions are likely to break functionality
1.0.0 is the first stable release
1.1.0 is the first feature release. in this version a new feature is added. It will not break backward-compatibility.
1.1.1 is the first (bug)fix version. In this version a bug is fixed. it will not break backward-compatibility.
2.0.0 is a stable release that will break backwards-compatibility. When upgrading to this version you should always execute additional steps to 'migrate' functionality from the 1 to 2 version.
- Joomla is also following the SemVer Semantic versioning, you can read about the Joomla! Development Strategy here: https://developer.joomla.org/news/586-joomla-development-strategy.html
- A website describing the SemVer standard in detail can be found here: https://semver.org/