Blake Anderson
I'm a graduate student in Computer Science at the University of Florida researching programming language design. I currently work on Rhovas, a programming language for API design and enforcement emphasizing software maintainability.
Ask Me Anything: WillBAnders@gmail.com
Session
Semantic Versioning (MAJOR.MINOR.PATCH
) is a common approach to versioning
libraries that separates changes into fixes (PATCH
), additions (MINOR
), and
breakages (MAJOR
). Though simple, SemVer has two primary limitations that can
make it difficult for developers to work with:
-
User-facing changes, such as new features or redesigns, are not separated
from API breakages. Therefore, the compatibility between versions is harder
for maintainers to understand as the impact of MAJOR updates can vary
significantly (ex. Python1->2
vs2->3
). In consequence, some projects
now use year-based versioning or 'ZeroVer' (whereMAJOR
is always0
),
thus avoiding the question of API compatibility entirely. -
API breakages are always represented by the
MAJOR
version and do not take
into account different types of breakages, such as source vs binary
compatibility. Additionally, tooling can be used to repair many common types
of breakages (such as renaming) which do not have significant impact on how
the library is used.
The purpose of this talk is to raise awareness of these limitations, demonstrate
the use cases for having multiple levels of API versioning, and propose
alternative versioning methods that can incorporate different types of API
breakages.