Introducing semantic versioning
For release images we are going to use so called “semantic versioning”. This system was invented to make software version handy for both visual evaluation and automated comparison.
The point is:
- Version consists of three digits (major, minor, and patch level), pre-release and build information: 1.2.3-beta1+20131221.
- Increasing more significant number resets all less significant ones. E.g. if we increase 1.2.3 to 2.x.x, it will be 2.0.0; if we increase 1.2.3 to 1.3.x, it will be 1.3.0.
- Numeric parts increase monotonously, i.e. 1.2.3 can be followed by 1.2.4 but not by 1.2.5
- Major version increases when there are backwards incompatible changes. E.g. if after 1.2.3 we rename “firewall” to “traffic-filter”, next version will be 2.0.0.
- Minor version increases when there are backwards compatible changes. E.g. if after 1.2.3 we add some new commands, next version will be 1.3.0
- Patch level increases when there are only changes that do not introduce new behaviour, i.e. bugfixes. E.g. if we find that in 1.2.3 firewall rules don’t work when destination port is set to 80 and fix it, next version will be 1.2.4.
Note that backwards-incompatible changes usually do not mean old configs will not load. We have migration mechanism for it, so in most cases manual editing or converting with external tools is not needed. User scripts, procedures, and so on are affected though, and I think users have a right to know beforehand.
You can find more information at the official website: http://semver.org/