Frequently Asked Question

What does semantic versioning mean for Linux packages?

Semantic versioning (SemVer) is the convention MAJOR.MINOR.PATCH: bump the patch number for backward-compatible bug fixes, the minor for backward-compatible new features, and the major for breaking changes. Many upstream projects follow it, and Linux package managers respect those numbers when ordering versions and resolving "needs at least 1.4.0" constraints.

Distributions, however, layer their own scheme on top. A Debian version looks like 1.22.0-1ubuntu2.3: upstream version 1.22.0, Debian revision 1, Ubuntu fork revision ubuntu2, security update .3. An RPM version uses name-version-release.arch with release carrying the distribution's patches. The package manager has explicit rules (dpkg --compare-versions, rpm -q --qf) for ordering these strings correctly, which is harder than it looks once epochs, tildes for pre-releases, and ~ for "always less than" are involved. SemVer is the upstream story; the distribution revision part is the packager's.

Further reading and video