| APACHE 2.x VERSIONING |
| ===================== |
| [$LastChangedDate$] |
| |
| |
| INTRODUCTION |
| ------------ |
| The Apache HTTP Server project must balance two competing and disjoint |
| objectives: maintain stable code for third party authors, distributors and |
| most importantly users so that bug and security fixes can be quickly adopted |
| without significant hardship due to user-visible changes; and continue the |
| development process that requires ongoing redesign to correct earlier |
| oversights and to add additional features. |
| |
| The Apache HTTP Server, through version 2.0, used the Module Magic Number (MMN) |
| to reflect API changes. This had the shortcoming of often leaving users |
| hunting to replace binary third party modules that were now incompatible. |
| This also left module authors searching through the API change histories to |
| determine the exact cause for the MMN change and whether their module was |
| affected. |
| |
| With the simultaneous release of Apache 2.2-stable and Apache 2.3-development, |
| the Apache HTTP Server project is moving towards a more predictable stable |
| release cycle, while allowing forward progress to occur without concern |
| for breaking the stable branch. This document explains the rationale between |
| the two versions and their behavior. |
| |
| |
| STABLE RELEASES, 2.{even}.{revision} |
| ------------------------------------ |
| |
| All even numbered releases will be considered stable revisions. |
| |
| Stable revisions will retain forward compatibility to the maximum |
| possible extent. Features may be added during minor revisions, and |
| features may be deprecated by making appropriate notations in the |
| documentation, but no features may be removed. |
| |
| In essence, that implies that you can upgrade from one minor revision |
| to the next with a minimum of trouble. In particular, this means: |
| |
| * The Module API will retain forward compatibility. |
| It will not be necessary to update modules to work with new |
| revisions of the stable tree. |
| |
| * The run-time configuration will be forward compatible. |
| No configuration changes will be necessary to work with new |
| revisions of the stable tree. |
| |
| * Compile-time configuration will be forward compatible. |
| The configure command line options that work in one release |
| of the stable tree will also work in the next release. |
| |
| As always, it will be necessary to test any new release to assure |
| that it works correctly with a particular configuration and a |
| particular set of modules, but every effort will be made to assure |
| that upgrades are as smooth as possible. |
| |
| In addition, the following development restrictions will aid in |
| keeping the stable tree as safe as possible: |
| |
| * No 'Experimental' modules; while it may be possible (based on API changes |
| required to support a given module) to load a 2.3-development module into |
| a 2.2-stable build of Apache, there are no guarantees. Experimental |
| modules will be introduced to the 2.3-development versions and either |
| added to 2.2-stable once they are proven and compatible, or deferred |
| to the 2.4-stable release if they cannot be incorporated in the current |
| stable release due to API change requirements. |
| |
| * The stable subversion tree should not remain unstable at any time. Atomic |
| commits ought be used to introduce code from the development version to the |
| stable tree. At any given time a security release may be in preparation, |
| unbeknownst to other contributors. At any given time, testers may be |
| checking out SVN trunk to confirm that a bug has been corrected. And as |
| all code was well-tested in development prior to committing to the stable |
| tree, there is really no reason for this tree to be broken for more than |
| a few minutes during a lengthy commit. |
| |
| In order to avoid 'skipped' release numbers in the stable releases, the |
| Release Manager will generally roll a release candidate (APACHE_#_#_#_RC#) |
| tag. Release Candidate tarballs will be announced to the |
| stable-testers@httpd.apache.org for the stable tree. Then, the participants |
| will vote on the quality of the proposed release tarball. |
| |
| The final APACHE_#_#_# tag will not exist until the APACHE_#_#_#_RC# candidate |
| has passed the usual votes to release that version. Only then is the final |
| tarball packaged, removing all -rc# designations from the version number, and |
| tagging the tree with the release number. |
| |
| DEVELOPMENT RELEASES, 2.{odd}.{revision} |
| ----------------------------------------- |
| |
| All odd numbered releases designate the 'next' possible stable release, |
| therefore the current development version will always be one greater than |
| the current stable release. Work proceeds on development releases, permitting |
| the modification of the MMN at any time in order to correct deficiencies |
| or shortcomings in the API. This means that modules from one development |
| release to another may not be binary compatible, or may not successfully |
| compile without modification to accommodate the API changes. |
| |
| The only 'supported' development release at any time will be the most |
| recently released version. Developers will not be answering bug reports |
| of older development releases once a new release is available. It becomes |
| the responsibility of the reporter to use the latest development version |
| to confirm that any issue still exists. |
| |
| Any new code, new API features or new ('experimental') modules may be |
| promoted at any time to the next stable release, by a vote of the project |
| contributors. This vote is based on the technical stability of the new |
| code and the stability of the interface. Once moved to stable, that feature |
| cannot change for the remainder of that stable release cycle, so the vote must |
| reflect that the final decisions on the behavior and naming of that new |
| feature were reached. Vetos continue to apply to this choice of introducing |
| the new work to the stable version. |
| |
| At any given time, when the quality of changes to the development branch |
| is considered release quality, that version may become a candidate for the |
| next stable release. This includes some or all of the API changes, promoting |
| experimental modules to stable or deprecating and eliminating older modules |
| from the last stable release. All of these choices are considered by the |
| project as a group in the interests of promoting the stable release, so that |
| any given change may be 'deferred' for a future release by the group, rather |
| than introduce unacceptable risks to adopting the next stable release. |
| |
| Third party module authors are strongly encouraged to test with the latest |
| development version. This assures that the module will be ready for the next |
| stable release, but more importantly, the author can react to shortcomings |
| in the API early enough to warn the dev@httpd.apache.org community of the |
| shortcomings so that they can be addressed before the stable release. The |
| entire burden is on the module author to anticipate the needs of their module |
| before the stable release is created. Once a new stable release cycle has |
| begun, that API will be present for the lifetime of the stable release. Any |
| desired changes in the stable versions must wait for inclusion into the next |
| release cycle. |
| |
| When deciding to promote a development tree to being stable, a determination |
| should be made whether the changes since the last stable version warrant a |
| major version bump. That is, if 2.2 is the current stable version and 2.3 is |
| 'ready' to become stable, the group needs to decide if the next stable |
| version is 2.4 or 3.0. One suggested rule of thumb is that if it requires |
| too much effort to port a module from 2.2 to 2.4, then the stable version |
| should be labeled 3.0. |
| |
| In order to ease the burden of creating development releases, the process |
| for packaging a development releases is less formal than for the stable |
| release. This strategy reflects the fact that while in development, versions |
| are cheap. Development releases may be classified as alpha, beta, or GA |
| to reflect the group's perceived stability of the tree. Development releases |
| may be made at any time by any committer. |
| |
| Please read the following link for a more detailed description of the |
| development release strategy: |
| |
| http://httpd.apache.org/dev/release.html |