~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to doc/developers/cycle.txt

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2009-12-03 00:17:53 UTC
  • mfrom: (4852.2.1 bzr-fix-publishing)
  • Revision ID: pqm@pqm.ubuntu.com-20091203001753-rrgwdoyxoojmn504
(David Roberts) Doc: delete unnecessary push of a checkout.

Show diffs side-by-side

added added

removed removed

Lines of Context:
2
2
Bazaar Release Cycles
3
3
*********************
4
4
 
5
 
:status: Current policy, as of 2009-08.
 
5
:status: Current policy, as of 2009-08. 
6
6
:blueprint: <https://blueprints.launchpad.net/bzr/+spec/6m-cycle>
7
7
 
8
8
 
18
18
 
19
19
* `Bazaar Developer Document Catalog <index.html>`_
20
20
 
21
 
* `Releasing Bazaar <releasing.html>`_ -- the process for actually making
 
21
* `Releasing Bazaar <releasing.html>`_ -- the process for actually making 
22
22
  a release or release candidate.
23
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
 
24
67
 
25
68
The Process
26
69
************
62
105
                                                        +-- 3.0.0beta1 ...
63
106
 
64
107
 
65
 
Starting from the date of a major release:
 
108
Starting from the date of a major release: 
66
109
 
67
110
At four-week intervals we make a new beta release.  There will be no
68
111
separate release candidate, but if a serious problem is discovered we may
78
121
We will then make a release candidate for the next major release, and at
79
122
this point create a release branch for it.  We will iterate release
80
123
candidates at approximately weekly intervals until there are no bugs
81
 
blocking the final major release.
 
124
blocking the final major release. 
82
125
 
83
126
Compared to the current process this has approximately the same amount of
84
127
release-related work, because the extra releases from the stable branch
149
192
Bug Work
150
193
--------
151
194
 
152
 
Bug fixes should normally be done first against the stable branch,
 
195
Bug fixes should normally be done first against the stable branch, 
153
196
reviewed against that branch, and then merged forward to trunk.
154
197
 
155
198
It may not always be easy to do this, if fixing the bug requires large
197
240
of bzrlib, which is an elusive target in Python.
198
241
 
199
242
This may mean that in cases where today a plugin would keep running but
200
 
give warnings, it will now fail altogether with an error.
 
243
give warnings, it will now fail altogether with an error.   
201
244
 
202
245
In return we expect more freedom to change and cleanup bzrlib code without
203
246
needing to keep old code around, or write extra compatibility shims, or
209
252
but that aren't technically plugins.  The same approach, though the
210
253
technical considerations are different, should apply to other extensions
211
254
such as programs that use bzr through the shell interface.
212
 
 
 
255
  
213
256
 
214
257
 
215
258
Data and Network Formats
253
296
This can be handled in various ways either at the OS packaging or the
254
297
Python level.  We don't propose to directly address it in the upstream
255
298
source.  (For example, we will not change the bzrlib library name from one
256
 
release to the next.)
 
299
release to the next.)  
257
300
 
258
301
The issue already exists with people who may want to use for example the
259
302
previous bzr release and the trunk.  There is a related issue that plugins
307
350
 
308
351
* Early communication about changing dependencies or defaults
309
352
 
310
 
* Reminder re lifecycle and where we're up to right now, in particular the
 
353
* Reminder re lifecycle and where we're up to right now, in particular the 
311
354
  dates for the next release and/or candidate.
312
355
 
313
356
* Summary of recent successes and pending work.
321
364
Questions
322
365
*********
323
366
 
324
 
Do users actually want this?
 
367
Do users actually want this?  
325
368
    Apparently yes, because it's often requested and often raised as a
326
369
    problem.
327
370
 
328
 
Would this confuse users?
 
371
Would this confuse users?  
329
372
    It shouldn't, because it's a fairly standard scheme.
330
373
 
331
374
Won't it take more time to fix bugs in multiple places?
345
388
    really rather not test them, forcing them is not helpful.
346
389
 
347
390
Isn't this a step backwards to a slower, less-agile process?
348
 
    No, our trunk stays releasable, and we ship every month.  We're just
 
391
    No, our trunk stays releasable, and we ship every month.  We're just 
349
392
    cutting out things that hold us back (continuous rather than episodic
350
393
    API stability; RCs every month) and giving users what they demand.
351
394
 
363
406
  and stable releases, indicating that each has value.
364
407
 
365
408
* API changes are easier or safer to make during beta periods, without
366
 
  being held back by fears of compatibility or
 
409
  being held back by fears of compatibility or 
367
410
 
368
411
* The stable releases are actually stable and don't introduce regressions
369
412
  or break plugins.
378
421
 
379
422
* Users like it.
380
423
 
381
 
After doing this for the 2.0 cycle (September 2009 through to early
382
 
2010), it seems to be going well.
383
 
 
384
 
 
385
 
Reviewing for the Stable Branch
386
 
*******************************
387
 
 
388
 
These are guidelines and can be interpreted case-by-case.
389
 
 
390
 
* All changes to the stable branch should fix a bug, even if you would not
391
 
  normally file a bug for the change.  The bug description should if at
392
 
  all possible explain how to manually verify the bug in a way that will
393
 
  fail before and pass after the change.  (These are requirements for the
394
 
  SRU process.)
395
 
 
396
 
* The change should be reasonably small and conservative.  
397
 
 
398
 
* Remember that the patch will be read during the SRU
399
 
  process and so keeping the patch small is useful even beyond keeping the
400
 
  logical changes small.  Avoid doing mechanical bulk changes on the
401
 
  stable branch.
402
 
 
403
 
* Use particular care for things that may behave differently across
404
 
  platforms, encodings or locales.  It's harder to thoroughly test these
405
 
  things before a release.
406
 
 
407
 
* Generally speaking, just cleaning things up is not a sufficient reason
408
 
  to make changes to the stable branch.  It has to actually fix a bug.
409
 
 
410
 
* Changes to the stable branch should include tests as usual.  
411
 
 
412
 
* Don't change or remove existing APIs that might be used by plugins, even
413
 
  if they are underscore-prefixed.  Adding APIs that are also being added
414
 
  to the trunk branch may make sense.
415
 
 
416
 
* Keeping consistency with trunk is useful, but less important than
417
 
  keeping the stable branch stable.
418
 
 
419
 
* (more items welcome)
420
 
 
421
424
References
422
425
**********
423
426
 
424
 
#. List thread "`[rfc] six-month stable release cycles`__", July 2009.
425
 
 
426
 
.. __: https://lists.ubuntu.com/archives/bazaar/2009q3/060882.html
 
427
#. List thread "[rfc] six-month stable release cycles", July 2009.
427
428
 
428
429
..
429
430
   vim: filetype=rst textwidth=74 ai shiftwidth=4
 
431