[Development] QUIP for choosing a branch

Friedemann Kleint Friedemann.Kleint at qt.io
Wed Jan 4 09:37:25 CET 2017


Hi,

as a result of the QtCon 2016 discussion on Managing Qt's Branches ( 
http://wiki.qt.io/QtCS2016_Managing_Qt_Branches ), we would like to 
provide some guidelines on which branch to choose for a change. Please 
find attached a QUIP which is available for review at 
https://codereview.qt-project.org/#/c/178906/ .

Regards, Friedemann

-- 
Friedemann Kleint
The Qt Company GmbH

-------------- next part --------------
QUIP: 5
Title: Choosing a Branch
Version: $Revision$
Last-Modified: $Date$
Author: Jędrzej Nowacki, Friedemann Kleint
Status: Draft
Type: Process
Created: 2016-12-05

========================================
 Choosing a Branch
========================================

Motivation
----------

This QUIP aims to provide some guidelines on what branch to choose for a
change. It originated from the
`QtCS2016 Managing Qt Branches <http://wiki.qt.io/QtCS2016_Managing_Qt_Branches>`_
session.

Goal of the LTS branches (5.6 at the time of writing)
-----------------------------------------------------

- Support slower moving OSes
- Fix bugs in applications that were already shipped bundling the LTS and
  continue to build against the LTS
- Have a low regression risk
- Add new minor platforms (if and only if changes are minimal like
  win8 => win8.1)
- Documentation clarifications

We divide the LTS into 3 periods (assuming cherry-pick contribution model):

- 5.6.0 *relaxed*: We assume that people still develop applications with the
  LTS or they are porting to it, so they are more willing to take a risk of
  regressions or general brokenness in Qt.
- 5.6.x *strict* At that point applications should be working with the LTS or
  be shipped. It is not allowed to break existing bug workarounds, even if the
  bug is fixed. For people using the LTS release, there is no real gain in
  rewriting working code.
- 5.6.y *very strict* 2 years after the .0 release, we believe that there are
  no more P1, P0.

where x = 1 year from .0 release and y = 2 years from .0 release

Goal of the stable branches (5.x)
---------------------------------

- Bug fixes
- Performance fixes
- Documentation fixes
- As a special case, pre-release stabilization of the dev branch

Goal of the dev branch:
-----------------------

- New feature development
- Major refactoring
- Risky changes, requiring longer testing period (moc, qmake...)
- Completely new platforms (WinRT)

Approach
--------

The table below lists typical code changes and points to which branch the
change should be pushed. In all cases, we need to estimate impact of the
change. For example, a fix for a performance problem may end-up in a different
branch depending on: how many users are affected, how big is the improvement
and what is the risk of regressions. The table shows the most stable branch,
for every case. If a change is risky or it has lower impact, then it should
be placed in a less stable branch.

+----------------------------+---------+--------+-------------+--------+-----+---------------------+
|                            |            LTS                 |        |     |                     |
|                            +---------+--------+-------------+ Stable | Dev | Notes               |
| Issue                      | Relaxed | Strict | Very Strict |        |     |                     |
+----------------------------+---------+--------+-------------+--------+-----+---------------------+
| Security                   |     x   |    x   |    x        |   x    |     |                     |
+----------------------------+---------+--------+-------------+--------+-----+---------------------+
| 3rd party update           |     x   |    x   |    x        |   x    |     |                     |
+----------------------------+---------+--------+-------------+--------+-----+---------------------+
| Test improvement           |     x   |    x   |    x        |   x    |     |                     |
| (reduce flakiness)         |         |        |             |        |     |                     |
+----------------------------+---------+--------+-------------+--------+-----+---------------------+
| Adapt to minor OS/         |     x   |    x   |    x        |   x    |     |                     |
| Compiler updates           |         |        |             |        |     |                     |
+----------------------------+---------+--------+-------------+--------+-----+---------------------+
| Memory leak                |     x   |    x   |             |   x    |     |                     |
+----------------------------+---------+--------+-------------+--------+-----+---------------------+
| Fix to feature added       |     x   |    x   |             |   x    |     |                     |
| in LTS                     |         |        |             |        |     |                     |
+----------------------------+---------+--------+-------------+--------+-----+---------------------+
| Undefined behavior         |     x   |    x   |             |   x    |     |                     |
+----------------------------+---------+--------+-------------+--------+-----+---------------------+
| Something that makes       |     x   |    x   |             |   x    |     |                     |
| existing apps unstable     |         |        |             |        |     |                     |
+----------------------------+---------+--------+-------------+--------+-----+---------------------+
| Performance: significant   |     x   |    x   |    x        |   x    |     |                     |
| fix improving O()          |         |        |             |        |     |                     |
+----------------------------+---------+--------+-------------+--------+-----+---------------------+
| Performance: Other fix     |     x   |        |             |   x    |     |                     |
+----------------------------+---------+--------+-------------+--------+-----+---------------------+
| Documentation: small fixes |     x   |    x   |    x        |   x    |     |                     |
| (links, typos, warnings)   |         |        |             |        |     |                     |
+----------------------------+---------+--------+-------------+--------+-----+---------------------+
| Documentation: refactoring |     x   |        |             |   x    |     |                     |
+----------------------------+---------+--------+-------------+--------+-----+---------------------+
| Bugs: Crash                |     x   |    x   |    x        |   x    |     |                     |
+----------------------------+---------+--------+-------------+--------+-----+---------------------+
| Bugs: Hard to reproduce    |     x   |    x   |             |   x    |     |                     |
| crash                      |         |        |             |        |     |                     |
+----------------------------+---------+--------+-------------+--------+-----+---------------------+
| Bugs: Regression           |     x   |    x   |             |   x    |     |                     |
+----------------------------+---------+--------+-------------+--------+-----+---------------------+
| Bugs: Hard-to reproduce    |         |        |             |   x    |     |                     |
| regression noticed some    |         |        |             |        |     |                     |
| time after release         |         |        |             |        |     |                     |
+----------------------------+---------+--------+-------------+--------+-----+---------------------+
| Bugs: Malfunctions         |         |        |             |   x    |     |                     |
+----------------------------+---------+--------+-------------+--------+-----+---------------------+
| Bugs: Graphical glitches   |         |        |             |   x    |     |                     |
+----------------------------+---------+--------+-------------+--------+-----+---------------------+
| New modules                |         |        |             |        |  x  |                     |
+----------------------------+---------+--------+-------------+--------+-----+---------------------+
| New features               |         |        |             |        |  x  |                     |
+----------------------------+---------+--------+-------------+--------+-----+---------------------+
| Refactoring: tests         |         |        |             |   x    |     |                     |
+----------------------------+---------+--------+-------------+--------+-----+---------------------+
| Refactoring: code          |         |        |             |        |  x  |                     |
+----------------------------+---------+--------+-------------+--------+-----+---------------------+
| Enabling new compiler      |         |        |             |        |  x  |                     |
| features                   |         |        |             |        |     |                     |
+----------------------------+---------+--------+-------------+--------+-----+---------------------+
| Using new C++              |         |        |             |        |  x  | That includes       |
| features                   |         |        |             |        |     | mass updates        |
+----------------------------+---------+--------+-------------+--------+-----+---------------------+


References
----------

- `Branch Guidelines <http://wiki.qt.io/Branch_Guidelines>`_
- `JIRA-Priorities <https://wiki.qt.io/JIRA-Priorities>`_


More information about the Development mailing list