/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to doc/developers/cycle.txt

Return mapping in revision_id_bzr_to_foreign() as required by the interface.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
*********************
2
 
Bazaar Release Cycles
3
 
*********************
4
 
 
5
 
:status: Current policy, as of 2009-08.
6
 
:blueprint: <https://blueprints.launchpad.net/bzr/+spec/6m-cycle>
7
 
 
8
 
 
9
 
Our users want easy access to bug fixes without other changes to the
10
 
core product. They also want a Just Works experience across the full
11
 
Bazaar ecosystem. To deliver the first and enable the second, we're
12
 
adopting some standard process patterns: a 6 monthly release cycle and a
13
 
stable branch. These changes will also have other benefits, including
14
 
better availability of bug fixes in OS distributions, more freedom to
15
 
remove old code, and less work for in packaging.
16
 
 
17
 
See also:
18
 
 
19
 
* `Bazaar Developer Document Catalog <index.html>`_
20
 
 
21
 
* `Releasing Bazaar <releasing.html>`_ -- the process for actually making
22
 
  a release or release candidate.
23
 
 
24
 
The Problem Situation
25
 
*********************
26
 
 
27
 
Bazaar makes a release every month, preceded by a one-week
28
 
release-candidate test.
29
 
 
30
 
In any release we may fix bugs, add formats, change the default format,
31
 
improve performance, add new commands or change command line behaviour,
32
 
change the network protocol, or deprecate APIs.  We sometimes also
33
 
introduce new bugs, regress existing behaviour or performance, remove
34
 
existing features or formats, or break behaviour or APIs depended upon by
35
 
plugins, external programs or users.
36
 
 
37
 
Some users are happy upgrading every month and consider the overall
38
 
positive balance of changes is worth some amount of churn.  But there are
39
 
some serious problems:
40
 
 
41
 
* You cannot get bug fixes without also getting disruptive changes.
42
 
 
43
 
* Bazaar is seen as unstable.
44
 
 
45
 
* Many releases cause some plugin breakage.
46
 
 
47
 
* One month is not a very long window for dependent programs or systems
48
 
  to catch up to changes in Bazaar before the release goes out of date.
49
 
 
50
 
* There's no clear indication to distributions which version they should
51
 
  package.
52
 
 
53
 
* If people (or their distributions) just pick an arbitrary version, they
54
 
  may all be on different arbitrary versions, therefore they will have
55
 
  different behaviour and different bugs, and sometimes interoperation
56
 
  problems.
57
 
 
58
 
* Any effort we, or distributors, wanted to put into backporting fixes
59
 
  would be dissipated across many possible backport target releases.
60
 
 
61
 
* When in the past we've tried either stalling releases for particular
62
 
  features, or having trunk frozen for some weeks, it causes churn and
63
 
  waste.  People rush features in, or already landed features wait a long
64
 
  time to be released, or branches go out of date because they cannot
65
 
  land.
66
 
 
67
 
 
68
 
The Process
69
 
************
70
 
 
71
 
Bazaar will make a major release every six months, which will be supported
72
 
at least until the time of the next major release.  During this support
73
 
period, we'll make incremental releases which fix bugs, but which do not
74
 
change network or disk formats or command syntax, and which do not require
75
 
updates to plugins.
76
 
 
77
 
We will also run a development series, which will become the next major
78
 
release.  We'll make a beta release from this every four weeks.  The
79
 
beta releases will be as stable as our current monthly releases and
80
 
completely suitable for everyday use by users who can tolerate changes
81
 
from month to month.
82
 
 
83
 
Having the stable series isn't a reason to cut back on QA or to make the
84
 
trunk or development releases unstable, which would only make our job
85
 
harder.  We keep our trunk in an always-releasable state, and that should
86
 
continue: any beta release could potentially be supported in the long
87
 
term, but we identify particular releases that actually will be supported.
88
 
 
89
 
The trunk will never be frozen: changes that pass review, other quality
90
 
checks and that are agreed amongst the developers can always be landed
91
 
into trunk.  The only restrictions will be on branches specifically
92
 
targeted at a release.
93
 
 
94
 
 
95
 
Schedule
96
 
--------
97
 
 
98
 
::
99
 
 
100
 
 2.0.0 --- 2.0.1 -- 2.0.2 -- ...
101
 
  \
102
 
   +--2.1.0beta1 -- 2.1.0beta2 -- ... -- 2.1.0rc1 -- 2.1.0 -- 2.1.1 -- ...
103
 
                                                      \
104
 
                                                       \
105
 
                                                        +-- 3.0.0beta1 ...
106
 
 
107
 
 
108
 
Starting from the date of a major release:
109
 
 
110
 
At four-week intervals we make a new beta release.  There will be no
111
 
separate release candidate, but if a serious problem is discovered we may
112
 
do the next beta ahead of schedule or make a point release.  There will be
113
 
about five or six releases in that series.
114
 
 
115
 
In parallel with this, bugs targeted to the previous major release are
116
 
merged into its branch.  We will make bugfix releases from that branch as
117
 
appropriate to the accumulation of changes, perhaps monthly, perhaps more
118
 
often if there are serious bugs, perhaps much less often if no new changes
119
 
have landed.
120
 
 
121
 
We will then make a release candidate for the next major release, and at
122
 
this point create a release branch for it.  We will iterate release
123
 
candidates at approximately weekly intervals until there are no bugs
124
 
blocking the final major release.
125
 
 
126
 
Compared to the current process this has approximately the same amount of
127
 
release-related work, because the extra releases from the stable branch
128
 
are "paid for" by not doing RCs for the development series.
129
 
 
130
 
We will synchronize our major releases with Ubuntu, so that they come out
131
 
in sufficient time for some testing and margin of error before Ubuntu's
132
 
upstream freeze.
133
 
 
134
 
 
135
 
Regularity
136
 
----------
137
 
 
138
 
We value regular releases.  We prefer to slip a feature or fix to
139
 
a later release rather than to make a release late.  We will normally only
140
 
slip a release to fix a critical bug.
141
 
 
142
 
 
143
 
Numbering
144
 
---------
145
 
 
146
 
The number for a six-month cycle is chosen at the start, with an increment
147
 
to either the first field (3.0.0) or second field (3.1.0) depending on
148
 
what we expect to be the user impact of the release.  We expect releases
149
 
that culminate in a new disk format or that require changes in how people
150
 
use the tool will get a new major number.  We can change (forward only) if
151
 
it turns out that we land larger changes than were expected.
152
 
 
153
 
We will always use the 3-digit form (major.minor.micro) even when
154
 
referring to the initial major release. This should help clarify where a
155
 
patch is intended to land. (eg, "I propose this for 2.0.0" is clear, while
156
 
"I propose this for 2.0" could mean you want to make the 2.0.0 release, or
157
 
that you just want to land on the 2.0.x stable release series.)
158
 
 
159
 
 
160
 
Terminology
161
 
-----------
162
 
 
163
 
Major releases (2.0.0 or 2.1.0)
164
 
    The big ones, every six months, intended to ship in distributions and
165
 
    to be used by stability-oriented users.
166
 
 
167
 
Release candidate (2.0.0rc1)
168
 
    A preview of a major release, made one or a few weeks beforehand at
169
 
    the time the release branch is created.  There should be few if any
170
 
    changes from the rc to the stable release.  We should avoid the
171
 
    confusing phrasing "release candidate 2.0.0rc1 is released"; instead
172
 
    use "available."
173
 
 
174
 
Bugfix releases (2.0.1)
175
 
    Based on the previous major release or bugfix; contains only bugfixes
176
 
    and perhaps documentation or translation corrections.
177
 
 
178
 
Stable series
179
 
    A major release and its descendant bugfix releases.
180
 
 
181
 
Stable release
182
 
    Either a major release or a bugfix release.
183
 
 
184
 
Beta release (3.0.0beta1)
185
 
    Made from trunk every month, except for the month there's a major
186
 
    release.  Stable and suitable for users who want the latest code and
187
 
    can live with some changes from month to month.
188
 
 
189
 
Development series
190
 
    The development releases leading up to a stable release.
191
 
 
192
 
Bug Work
193
 
--------
194
 
 
195
 
Bug fixes should normally be done first against the stable branch,
196
 
reviewed against that branch, and then merged forward to trunk.
197
 
 
198
 
It may not always be easy to do this, if fixing the bug requires large
199
 
changes or the affected code is different in the stable and development
200
 
branches.  If the tradeoff does not seem worthwhile the bug can be fixed
201
 
only in the development branch, at least in the first instance.  If users
202
 
later want the fix backported we can discuss it.
203
 
 
204
 
Developers can merge the release branch into trunk as often as they like,
205
 
only asking for review if they're making nontrivial changes or feel review
206
 
is needed.
207
 
 
208
 
 
209
 
Feature and Performance Work
210
 
----------------------------
211
 
 
212
 
Features can be landed to the development branch at any time, and they'll
213
 
be released for testing within a month.
214
 
 
215
 
Performance bugs, although important, will generally not be landed in a
216
 
stable series.  Fixing performance bugs well often requires nontrivial
217
 
code changes or new formats.  These are not suitable for a stable series.
218
 
 
219
 
Performance bugs that can be fixed with a small safe patch can be
220
 
considered for the stable series.
221
 
 
222
 
 
223
 
Plugins
224
 
-------
225
 
 
226
 
Plugins that want to cooperate with this should make a series and a branch
227
 
that matches each bzr stable series, and follow similar rules in making
228
 
releases from their stable branch.  We'd expect that plugins will make a
229
 
release between the last development release of a series and the major
230
 
release candidate.
231
 
 
232
 
Within a stable series, anything that breaks any known plugin is
233
 
considered an API break and will be avoided.  Before
234
 
making each bugfix release, we'll test that code against important
235
 
plugins.
236
 
 
237
 
Within a development series, the focus is on helping plugin authors keep
238
 
up to date by giving clear error messages when an interface is removed.
239
 
We will no longer focus on letting old plugin code work with new versions
240
 
of bzrlib, which is an elusive target in Python.
241
 
 
242
 
This may mean that in cases where today a plugin would keep running but
243
 
give warnings, it will now fail altogether with an error.
244
 
 
245
 
In return we expect more freedom to change and cleanup bzrlib code without
246
 
needing to keep old code around, or write extra compatibility shims, or
247
 
have review turnarounds related to compatibility.  Some changes, such as
248
 
removing module-global variables, that are hard to do now, will be
249
 
possible to do safely.
250
 
 
251
 
Discussion of plugins here includes programs that import and use bzrlib
252
 
but that aren't technically plugins.  The same approach, though the
253
 
technical considerations are different, should apply to other extensions
254
 
such as programs that use bzr through the shell interface.
255
 
 
256
 
 
257
 
 
258
 
Data and Network Formats
259
 
------------------------
260
 
 
261
 
Any development release should be able to interoperate with the previous
262
 
stable release, and any stable release should be able to interoperate with
263
 
the previous stable release.  This is a minimum and normally releases will be
264
 
able to interoperate with all previous releases as at present.
265
 
 
266
 
Each major release will have one recommended data format which will be the
267
 
default.  The name of the format will indicate which release series (not
268
 
specific release) it comes from: '2a' is the first supported format for
269
 
the 2.0.x series, '2b' the second, etc.  We don't mention the particular
270
 
release that introduced it so as to avoid problems predicting precisely
271
 
when it will land.
272
 
 
273
 
During a development series we may have a series of experimental formats.
274
 
We will not leave people stranded if they test these formats, but we also
275
 
won't guarantee to keep supporting them in a future release.  If something
276
 
inserted in one development release turns out to be bad it can just be
277
 
removed in the next.
278
 
 
279
 
 
280
 
Hosting Services
281
 
-----------------
282
 
 
283
 
The guarantees made above about format and network interoperation
284
 
mean that hosting services such as Launchpad, Savannah, FedoraHosted,
285
 
and Sourceforge could choose to run either the stable or beta versions.
286
 
They might find it useful to run the beta version on their own beta
287
 
server.
288
 
 
289
 
 
290
 
Simultaneous Installation
291
 
-------------------------
292
 
 
293
 
Some people may want to simultaneously install and use both a stable
294
 
release and development release.
295
 
 
296
 
This can be handled in various ways either at the OS packaging or the
297
 
Python level.  We don't propose to directly address it in the upstream
298
 
source.  (For example, we will not change the bzrlib library name from one
299
 
release to the next.)
300
 
 
301
 
The issue already exists with people who may want to use for example the
302
 
previous bzr release and the trunk.  There is a related issue that plugins
303
 
may be compatible with only some of the Bazaar versions people want to use
304
 
at the same time, and again that is something that can be handled
305
 
separately.
306
 
 
307
 
 
308
 
OS Distributions
309
 
----------------
310
 
 
311
 
OS distributors will be recommended to ship the bzr stable release that
312
 
fits their schedule, the betas leading up to that release during their own
313
 
beta period, and the bugfix releases following on from it.  They might
314
 
also choose to offer the beta releases as an alternative package.
315
 
 
316
 
 
317
 
Packaging
318
 
---------
319
 
 
320
 
At present we have three upstream-maintained PPAs containing Ubuntu
321
 
packages of Bazaar: ``~bzr-nightly-ppa``, ``~bzr-beta-ppa`` (rcs and
322
 
releases) and ``~bzr`` (ie stable).  We will keep these PPAs, and reorient
323
 
beta to contain the monthly beta releases, and the stable PPA to contain
324
 
stable releases, their release candidates, and bugfixes to those releases.
325
 
 
326
 
Some platforms with relatively less active packagers may choose to ship
327
 
only the stable releases.  This is probably better than having them only
328
 
intermittently or slowly ship the monthly releases.
329
 
 
330
 
Binary installers should use a version number like '2.0.0-1' or
331
 
'2.0.0beta1-1' so that the last component just reflects the packaging
332
 
version, and can be incremented if a new installer is made with no
333
 
upstream source changes.
334
 
 
335
 
 
336
 
Code Freeze vs Announcement
337
 
---------------------------
338
 
 
339
 
We will separate the code freeze for a particular release from its actual
340
 
announcement, allowing a window of approximately one week for plugins to
341
 
be released and binary installers to be built.  On the date the
342
 
announcement is published, people will be able to easily install it.
343
 
 
344
 
 
345
 
Weekly Metronome Mail
346
 
---------------------
347
 
 
348
 
Every week the release manager should send a mail to the Bazaar list
349
 
covering these points (as appropriate):
350
 
 
351
 
* Early communication about changing dependencies or defaults
352
 
 
353
 
* Reminder re lifecycle and where we're up to right now, in particular the
354
 
  dates for the next release and/or candidate.
355
 
 
356
 
* Summary of recent successes and pending work.
357
 
 
358
 
* Reminder re release objectives
359
 
 
360
 
* Reminder re things needing attention, e.g. bug triage, reviews, testing
361
 
  of certain things, etc.
362
 
 
363
 
 
364
 
Questions
365
 
*********
366
 
 
367
 
Do users actually want this?
368
 
    Apparently yes, because it's often requested and often raised as a
369
 
    problem.
370
 
 
371
 
Would this confuse users?
372
 
    It shouldn't, because it's a fairly standard scheme.
373
 
 
374
 
Won't it take more time to fix bugs in multiple places?
375
 
    It shouldn't, because we'll only do this when the stable bugfix seems
376
 
    economical.  When we fix bugs today in both trunk and release branches
377
 
    it normally does not take much more time.
378
 
 
379
 
What about bzr in Ubuntu LTS, with a five-year support life?
380
 
    Most bugs are either fixed within six months, or not fixed at all, or
381
 
    not very important, or fixed as part of a large rework of the code
382
 
    that would be too large to backport.  However, if there are fixes that
383
 
    are especially desired in an old release and feasible to do, we can do
384
 
    them without making a general commitment.
385
 
 
386
 
Will anyone test the beta releases?
387
 
    Probably yes, our most active users will run them, but if people would
388
 
    really rather not test them, forcing them is not helpful.
389
 
 
390
 
Isn't this a step backwards to a slower, less-agile process?
391
 
    No, our trunk stays releasable, and we ship every month.  We're just
392
 
    cutting out things that hold us back (continuous rather than episodic
393
 
    API stability; RCs every month) and giving users what they demand.
394
 
 
395
 
How about calling the monthly releases "milestone" or "next" not "beta"?
396
 
    Those words are less scary but they also have less clear meanings.
397
 
 
398
 
 
399
 
Expected Benefits
400
 
*****************
401
 
 
402
 
If this plan works, we'll expect to see the following changes.  If they
403
 
don't occur, we'll think again:
404
 
 
405
 
* We see a distribution curve of users and bug reports across nightly, monthly
406
 
  and stable releases, indicating that each has value.
407
 
 
408
 
* API changes are easier or safer to make during beta periods, without
409
 
  being held back by fears of compatibility or
410
 
 
411
 
* The stable releases are actually stable and don't introduce regressions
412
 
  or break plugins.
413
 
 
414
 
* Many bugs are fixed in stable branches, without developers feeling this
415
 
  is a waste of time.
416
 
 
417
 
* Distributions ship the stable releases in their stable releases and the
418
 
  bugfix releases in their bugfix releases.
419
 
 
420
 
* Plugin authors follow this policy, making their own bugfix releases.
421
 
 
422
 
* Users like it.
423
 
 
424
 
References
425
 
**********
426
 
 
427
 
#. List thread "[rfc] six-month stable release cycles", July 2009.
428
 
 
429
 
..
430
 
   vim: filetype=rst textwidth=74 ai shiftwidth=4
431