I am opening a new topic because I do not want to sidetrack the one about
main(). This is just the latest of “minor breaking changes” that are technically breaking, yet practically harmless and easy to deal with.
SemVer has become a de facto standard for standardize software versioning, especially in FOSS. It is widely understood, practical, detailed. It is just perfect for packages and libraries.
What I am arguing here is that it is not well-suited to a complex interactive language like Julia. It is practically impossible to design a modern language and a closely related standard library in advance, and minor changes will always be necessary. It is not practical for Julia to follow SemVer, and in practice it does not — if it did, the version number would already be higher than 10 because of tiny but technically breaking changes.
We should be upfront and explicit about this, instead of pretending that we stick to SemVer.
What should Julia promise instead? I am opening this discussion to work that out, but my basic proposal is that as long as the major version number does not change, breaking changes will be
- infrequent, and only happen for minor releases
- announced in a prominent position in the release notes,
- relatively minor and cosmetic
- checked for registered packages, the authors of which will be notified in advance
- easy to locate and potentially update with tooling,
- easy to work around so that all versions can be supported
I put a for those requirements we already satisfy in practice.
So in practice, while there will be minor, technically breaking changes, Julia will remain stable for the majority of end users. You won’t find your arrays indexed from 42, or
LinearAlgebra renamed to
Packages still stick to SemVer, no change there.