Several ways to version software
As developers, we know several ways to version software. Let's review them and also find some examples through well-known software.
Constant version 🟰
It never changes.
It's "practical": we don't need to know which version to use... but it's also risky, YOLO!
Example: Docker tag latest.
Incremental version ±
It changes regularly, for example by incrementing by 1 for each new version.
Safe and easy.
Examples: Java 25, 26 etc.
Version by identifier #️⃣
It can consist of a Git commit identifier (SHA-1 hash), a UUID type identifier, etc.
Safe, it allows for an "infinity" of versions.
Example: Git commit a3f9c2e.
Semantic versioning 🤓
AKA semantic versioning or semver.
It introduces the concepts of:
- major version: non-backward compatible change
- minor version: backward compatible evolution
- patch version: bug fixes
- development phase: alpha, beta, release candidate, release etc.
Essential for a library, less obvious for an application. It is precise, but therefore requires rigor and is more fragile.
Examples:
- Jackson
2.20.1: the first patch of minor version 20 of major version 2 - Jackson
3.0.1: the first patch of minor version 0 of major version 3 (which is not backward compatible with major version 2)
Anecdote: "the joys" of npm version range: semver.npmjs.com 😅
Calendar versioning 🗓️
AKA calver.
Corresponds to a year, a version within the year, a month in the year etc.
Examples:
- IntelliJ IDEA
2025.1: first version of the year 2025 - Ubuntu
24.04: version released in April 2024
Semi-random names 🎲
Corresponds to a random name generated from a dictionary.
Practical for us humans (😊).
Example: Docker container named sad_tesla.
See Docker documentation (source code).
"Summary" 💡
Let's review some of these version types using a single *nix command:
# List all applications installed on my Mac via Homebrew 🍺
brew list --versions
ca-certificates 2025-12-02
cargo-audit 0.22.0
clj-kondo 2025.10.23
cowsay 3.8.4
gist 6.0.0
gitlogue 0.6.0
mas 4.1.0
openssl@3 3.6.0
trash 0.9.2
calibre 8.16.2
firefox 82.0.3
firefox@nightly latest
ghostty 1.0.1
gimp 3.0.6
google-chrome 137.0.7151.56
grandperspective 3.6
handy 0.6.8
iterm2 3.4.8
jetbrains-toolbox 1.24,1.24.12080
keepingyouawake 1.6.8
kobo latest
libreoffice 25.8.3
molotov 7.0.0
openemu 2.3.3
podman-desktop 1.15.0
postman 9.5.0
rectangle 0.41,46
slack 4.11.3
sublime-text 4169
textmate 2.0.23
visual-studio-code 1.27.2,f46c4c469d6e6d8c46f268d1553c5dc4b475840f
vlc 3.0.0
warp