PackagingCon

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

11-10
19:55
20min
Versioning for User-Facing Changes vs API Breakages
Blake Anderson

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:

  1. 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. Python 1->2 vs 2->3). In consequence, some projects
    now use year-based versioning or 'ZeroVer' (where MAJOR is always 0),
    thus avoiding the question of API compatibility entirely.

  2. 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.

ABI & Static Analysis
Room I