I still like our classic versioning systems, I’m an old-fashioned developer who was raised in the world of Software Products.
However, a new Grumpy Dev’s rant is coming up. We are not in a world of packed software anymore, with big product factories which were self-involved in their developments, and in which versioning was only to distinguish one artifact to the same one in another point of time.
Today, development is highly democratized. We have publicly shared projects. We have public web services with changing API’s. We have software package sharing mechanisms such as NuGet (or npm if Node.js is your gig, or pip if you are a Python snake charmer, etc.).
Just having a linear (most likely time) progression of software versions is not enough in many scenarios. We have to make sense out of this digit string. Here is where Semantic Versioning comes to the rescue.
In the words of Tom Preston-Werner:
- MAJOR version when you make incompatible API changes,
- MINOR version when you add functionality in a backwards-compatible manner, and
- PATCH version when you make backwards-compatible bug fixes.
This gives more meaning to it, doesn’t it? I’m taking a wild guess here by assuming that’s why is called semantic versioning. Plus, in most cases you can still tell which version comes after another.
Start using semantic versioning TODAY.
“In order to be united as software developers, we must give meaning to our version numbers.” – Abraham Lincoln.