|Version 8 (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
- The Haskell Package Versioning Policy
The Haskell Platform concept calls for major and minor releases.
- The point of major releases is to update the set of common packages we all use. That is, to specify which packages and which versions (corresponding to APIs). The target is to have major releases every 6 months.
- The point of minor releases is to support a major release across a range of operating systems over time and respond to bugs that are discovered in a library or tool subsequent to their release. The target is to have 2-3 minor releases after major releases at intervals on the order of 4-6 weeks.
- 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.
It has been suggested that the platform version numbers follow the PVP in the sense that the platform is the union of all it's components. In this case, if we agreed that there are no API changes in minor releases then the general scheme would be $year . $major-release . 0 . $minor-version . That is, the 3rd digit would always be zero. This would be because major releases typically have some slight incompatible change in at least one package while minor releases do not change any API at all, only fix bugs, so only the 4th digit changes.
- 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).