|Version 4 (modified by duncan, 7 years ago)|
Platform version numbers
This page describes how the version numbers for the platform work and why we do it this way.
These are the important points to keep in mind when considering schemes for version numbers:
- We have two major releases per year
- Minor releases are API compatible
- We have testing pre-releases for each major release
- 2010.1.0, 2010.1.1, ... testing pre-releases for the first major release of the year
- 2010.2.0: first major release in 2010.
- 2010.2.1: minor bug fix release, compatible with 2010.2.0
- 2010.3.0, 2010.3.1, ... testing pre-releases for the second major release
- 2010.4.0: second major release in 2010.
- 2010.4.1: minor bug fix release, compatible with 2010.4.0
The general scheme
$year . $major-release . $minor-version
Together, the $year and $major-release identify the major version.
When the $major-release is even, it's a stable release. Minor releases within a stable release are compatible. That is, programs that worked with 2010.2.0 or 2010.2.1 will still work with 2010.2.2. (Note, we have not decided if programs that work with later minor releases should also work with earlier ones, ie can minor releases add new APIs. This policy question has to be resolved by the libraries list.)
When the $major-release is odd, it's a testing pre-release. Minor releases are fresh testing snapshots. There is no API compatability guarantee.
We need to be able to distinguish major from minor releases. So we cannot simply use the date.
We need to give version numbers to pre-releases because we need to get wide testing from developers/users, so being able to track and identify pre-releases is important.
One alternative that fits the requirements is a monitonically increasing major version number, like 20.x for a major release and 20.0, 20.1, etc for minor releases. This is what GNOME uses.
- Q: Are pre-releases API compatible with the final release?
A: No, there is no such guarantee for testing pre-releases. Only minor stable releases are guaranteed to be API compatible with the previous minor releases in the same major release series. In practice we expect there to be an API freese some weeks before the major release, so that testers have time to check the whole thing works without there being constant API churn.
- Q: Should the pre-release for 2010.2.0 be called 2010.1.x even if it's still 2009?
A: Yes, the current date does not matter. It's the target release date that matters. It should be called 2010.1.x, not something like 2009.5.x.
- Q: Why not use a monitonically increasing major version number? Why use the year?
A: Because it makes it clear that it is a never a finished project, and that we do time-based rather than feature based releases. It also tells you slightly more information (e.g. you can quickly tell how out-of-date your distro's support is).