At the hackathon last week we (Stefan Hett, Stefan Fuhrmann, Julian,
Bert and I) discussed how we could get releases out faster. We
exchanged ideas of how we could do "time-based releases", i.e. to
agree on a fixed schedule of doing releases, not waiting for
particular features or bugfixes (except in exceptional circumstances),
and just start the release train on the agreed date with whatever is
on trunk at that time.
I know this has been discussed before, but it was never made reality.
On last week's hackathon we also didn't come to a full consensus on
various details. But I think we should simply work out those details,
hopefully come to some compromise, and if so, JFD it.
One of the problems with creating 1.x releases more often is how many
of those branches to maintain with backports, trying to satisfy both
users wanting new features more quickly, and enterprises desiring
stability and long term support. One way to address this is to
designate certain releases as "LTS" (long term support) releases,
which we'll maintain longer with backports.
Proposal
-----
(1) Start a new 1.x release cycle every 6 months.
If we branch off 1.10 this week, we could say: 1.11 will branch
end of May, and 1.12 end of November 2018. "Starting release cycle"
means: branching, releasing an rc1, and starting the four-week soak.
Missing the boat with some desired feature is not a disaster, it gets
in 6 months later.
(2) Call one release every 2 years a Long Term Support (LTS) release.
Say 1.10 becomes an LTS release, the next LTS release will be 1.14
(end of November 2019).
(3) We backport regular fixes to the last 1.x release and the last LTS
release, and security fixes to the last two LTS releases.
Say 1.12 is just released, and we fix a user-reported bug on
trunk, we backport it to 1.12, to 1.10 (LTS). If we fix a security
issue on trunk, we backport it to 1.12, 1.10 (LTS) and 1.9 (which
we'll call LTS by convention). That means one extra backport to test
compared to nowadays. Though the last 1.x should really be close
behind trunk. Can we manage that?
(4) Features that are already exposed but aren't ready yet should be
shielded with feature toggles, ifdefs, ... to make sure trunk is
almost always in a releasable state (especially close to the branch
point).
-----
We would of course have to go in detail through our community guide
[1] to figure out the details and rewrite the "Releases" chapter.
Apart from that this mainly requires a RM driving it.
Several big projects use time-based releases these days. For instance,
as of this year, Java has switched to it too, with a similar frequency
(6 month release cycles for new features, LTS releases every 3 years)
[2].
Also, our own community guide suggests "every 6 months" as a soft
schedule [3]. We just need to make that a hard schedule and be less
flexible with the timing, but more flexible with what gets in :-).
[1] http://subversion.apache.org/docs/community-guide/releasing.html
[2] https://mreinhold.org/blog/forward-faster
[3] http://subversion.apache.org/docs/community-guide/releasing.html#release-branches
, third paragraph: "The time at which a new release branch needs to be
created is fuzzy at best. Generally, we have a soft schedule of
releasing a new minor version every 6 months. So, approximately 4
months after the previous minor release is a good time to start
proposing a branch. But remember that this is flexible, depending on
what features are being developed."
--
Johan
Received on 2017-11-27 14:52:47 CET