Add a little bit on handling of broken behavior that cannot be deprecated.
[gitmo/Moose.git] / lib / Moose / Manual / Support.pod
CommitLineData
eda0fb99 1=pod
2
3=head1 NAME
4
5Moose::Manual::Support - Policies regarding support, releases, and
6compatibility.
7
995b7d56 8=head1 SUPPORT POLICY
9
a0214906 10There are two principles to Moose's policy of supported behavior.
995b7d56 11
64936d78 12=over 4
13
14=item 1.
15
16Moose favors correctness over everything.
17
18=item 2.
19
20Moose supports documented and tested behavior, not accidental behavior or side
21effects.
22
23=back
995b7d56 24
a0214906 25If a behavior has never been documented or tested, the behavior is
26I<officially> undefined. Relying upon undocumented and untested behavior is
27done at your own risk.
995b7d56 28
a0214906 29If a behavior is documented or tested but found to be incorrect later, the
64936d78 30behavior will go through a deprecation period. During the deprecation period,
31use of that feature will cause a warning. Eventually, the deprecated feature
32will be removed.
995b7d56 33
94ba07c5 34In some cases, it is not possible to deprecate a behavior. In this case, the
35behavior will simply be changed in a major release.
36
eda0fb99 37=head1 RELEASE SCHEDULE
38
759dfceb 39Moose is on a system of quarterly major releases, with minor releases as
40needed between major releases. A minor release is defined as one that makes
7b1aba0f 41every attempt to preserve backwards compatibility. Currently this means that we
42did not introduce any new dependency conflicts, and that we did not make any
43changes to documented or tested behavior (this typically means that minor
44releases will not change any existing tests in the test suite, although they
45can add new ones). A minor release can include new features and bug fixes.
d1e4fecf 46
64936d78 47Major releases may be backwards incompatible. Moose prioritizes
48correctness over backwards compatibility or performance; see the L<Deprecation
49Policy> to understand how backwards incompatible changes are announced.
d1e4fecf 50
e4b7acd5 51Major releases are scheduled to happen during fixed release windows. If the
52window is missed, then there will not be a major release until the next
53release window. The release windows are one month long, and occur during the
54months of January, April, July, and October.
55
a0214906 56Before a major release, a series of development releases will be made so that
57users can test the upcoming major release before it is distributed to CPAN. It
58is in the best interests of everyone involved if these releases are tested as
59widely as possible.
eda0fb99 60
61=head1 DEPRECATION POLICY
62
63Moose has always prioritized correctness over performance and backwards
79dce67a 64compatibility.
eda0fb99 65
64936d78 66Major deprecations or API changes are documented in the Changes file as well
67as in L<Moose::Manual::Delta>. The Moose developers will also make an effort
68to warn users of upcoming deprecations and breakage through the Moose blog
69(http://blog.moose.perl.org).
eda0fb99 70
45d92036 71Deprecated APIs will be preserved for at least one year I<after the major
72release which deprecates that API>. Deprecated APIs will only be removed in a
73major release.
eda0fb99 74
64936d78 75Moose will also warn during installation if the version of Moose being
76installed will break an installed dependency. Unfortunately, due to the nature
eda0fb99 77of the Perl install process these warnings may be easy to miss.
78
79=head1 BACKWARDS COMPATIBILITY
80
81We try to ensure compatibility by having a extensive test suite (last
82count just over around 5123 tests), as well as testing a number of
ccc47a38 83packages (currently just under 100 packages) that depend on Moose before
eda0fb99 84any release.
85
86The current list of downstream dependencies that are tested is in
87C<xt/author/test-my-dependents.t>.
88
89=head1 VERSION NUMBERS
90
64936d78 91Moose version numbers consist of three parts, in the form X.YYZZ. The X is the
92"special magic number" that only gets changed for really big changes. Think of
93this as being like the "5" in Perl 5.12.1.
94
95The YY portion is the major version number. Moose uses even numbers for stable
96releases, and odd numbers for trial releases. The ZZ is the minor version, and
97it simply increases monotonically. It starts at "00" each time a new major
98version is released.
99
100Semantically, this means that any two releases which share a major version
101should be API-compatible with each other. In other words, 2.0200, 2.0201, and
1022.0274 are all API-compatible.
eda0fb99 103
64936d78 104Prior to version 2.0, Moose version numbers were monotonically incrementing
105two decimal values (0.01, 0.02, ... 1.11, 1.12, etc.).
3d5e4dc0 106
eda0fb99 107Moose was declared production ready at version 0.18 (via L<<
108http://www.perlmonks.org/?node_id=608144 >>).
109
6abc21a5 110=head1 PERL VERSION COMPATIBILITY
111
64a1ebab 112As of version 2.00, Moose officially supports being run on perl 5.8.3+. Our
113current policy is to support the earliest version of Perl shipped in the latest
114stable release of any major operating system (this tends to mean CentOS). We
6abc21a5 115will provide at least six months notice (two major releases) when we decide to
64a1ebab 116increase the officially supported Perl version. The next time this will happen
117is in January of 2012, when Moose 2.06 will increase the minimum officially
118supported Perl version to 5.10.1.
6abc21a5 119
64a1ebab 120"Officially supported" does not mean that these are the only versions of Perl
6abc21a5 121that Moose will work with. Our declared perl dependency will remain at 5.8.3 as
122long as our test suite continues to pass on 5.8.3. What this does mean is that
123the core Moose dev team will not be spending any time fixing bugs on versions
124that aren't officially supported, and new contributions will not be rejected
125due to being incompatible with older versions of perl except in the most
64a1ebab 126trivial of cases. We will, however, still welcome patches to make Moose
6abc21a5 127compatible with earlier versions, if other people are still interested in
128maintaining compatibility. Note that although performance regressions are
129acceptable in order to maintain backwards compatibility (as long as they only
130affect the older versions), functionality changes and buggy behavior will not
64a1ebab 131be. If it becomes impossible to provide identical functionality between modern
132Perl versions and unsupported Perl versions, we will increase our declared perl
133dependency instead.
6abc21a5 134
eda0fb99 135=head1 CONTRIBUTING
136
137Moose has an open contribution policy. Anybody is welcome to submit a
204f629c 138patch. Please see L<Moose::Manual::Contributing> for more details.
eda0fb99 139
79dce67a 140=cut