It's about time.
Technologists expect things to get better with time. Your current laptop has more RAM than the last, your current car is safer than its predecessor, and the latest version of your code is certainly the best ever.
What if the same be said of versioning systems?
Software versioning systems also get better with time. That's why today I'm pleased to announce CalVer, a calendar versioning convention based on project release dates, formally hosted on calver.org.
Calendar versioning represents a powerful alternative to Semantic Versioning (SemVer). CalVer combines with or even replaces SemVer versioning systems, based on the needs of the project.
The calver.org site speaks for itself, but there you'll find:
Case studies feature badges like this one, for Ubuntu's versioning scheme:
You'll also find a project list, always seeking new additions.
Many projects have designed their version schemes to better match the needs of their developers and customers. CalVer formalizes those practices. calver.org began as a resource to help maintainers communicate the design choices in their versioning scheme.
CalVer has grown to showcase prominent uses and provide a way for more projects to adopt calendar versioning in their projects. It even hosts a community-curated list of projects using calendar versioning.
Some comparisons are inevitable. SemVer, hosted at semver.org, is a big name in software versioning conventions. CalVer combines well with incremental-number schemes, so it's not strictly a competition. That said, here is how CalVer outshines SemVer.
🕐 CalVer integrates objective, intuitive calendar dates.
⊠ SemVer subjectively increments numbers.
🕑 CalVer encompasses real-world usage through a formal
⊠ SemVer imitates the form of a specification, albeit a confrontational one. Unlike real specifications, SemVer lacks objective verifiability, exemplars, or reference implementations.
🕒 CalVer makes maintenance easier through powerful, objective
semantics. Look at a library's version number, immediately know how
recent your copy. Compare across libraries, checking that dependencies
are in sync. Deprecate versions based on time.
⊠ SemVer has Tom Preston-Werner's semantics.
🕓 CalVer's use of release dates allows for automatable, immutable
versions on which everyone can agree.
⊠ SemVer introduces one more place a bug can enter a projects. Versions only go up, and a release which violates SemVer guidelines cannot be undone. That pressure means more projects perpetually stuck in 0.x.
The list goes on, but the message is clear. There is an alternative to SemVer, and it's about time!
Have a look at the Users list and help add any projects I may have missed. It's a big ecosystem out there, and the initial list reflects my own Linux and Python tendencies.
For developers of new libraries, CalVer is here to stay, and calver.org will be there next time you're designing your versioning scheme. It's a big ecosystem out there, and once you try CalVer, I think you'll agree. Software versioning get better with time.