Since the release document is lacking here few notes on how it works, it will be updated soon =).
Libav has separate version for each library provided. As usual the major version bump signifies an ABI-incompatible change, a minor version bump marks a specific feature introduction or removal.
It is made this way to let users leverage the pkgconf checks to require features instead of use a compile+link check.
The APIChange document details which version corresponds to which feature.
The Libav global version number e.g. 9.16 provides mainly the following information:
- If the major number is updated the Libraries have ABI differences.
- If the major number is Even API-incompatible changes should be expected, downstreams should follow the migration guide to update their code.
- If the major number is Odd no API-incompatible changes happened and a simple rebuild **must** be enough to use the new library.
- If the minor number is updated that means that enough bugfixes piled up during the month/2weeks period and a new point release is available.
All the major releases start with a major version bump of all the libraries. This automatically enables new ABI incompatible code and disables old deprecated code. Later or within the same patch the preprocessor guards and the deprecated code gets removed.
Once the major bump is committed the first alpha is tagged. Alphas live within the master branch, the codebase can still accept features updates (e.g. small new decoders or new demuxers) but the API and ABI cannot have incompatible changes till the next one or two major releases.
The first beta tag also marks the start of the new release branch.
From this point all the bugfixes that hit the master will be backported, no feature changes are accepted in the branch.
The release is not different from a beta, it is still a tag in the release branch. The level of confidence nothing breaks is much higher though.
Point releases are bugfix-only releases and they aim to provide seamless security updates.