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:
- Terms and definitions
- Case studies, including Ubuntu, Twisted, Teradata, and more
- And a short guide on when to use CalVer for your future projects
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.
Even more background on the project can be found on the calver.org About page, as well as my previous versioning essay, Designing a version.
Compared to SemVer
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 current maintainers using calendar versioning, next time you get a raised eyebrow, just let them know: It's CalVer. Or save yourself a step and add one of the badges, linking to calver.org.
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.