Time-based releases is a good idea and something that has proved to be 
working in a number of open source projects. One successful example is 
Node.js, that goes through two major releases a year. The interesting fact 
about the two releases is that only one (the even-number release) comes 
with a long term support (LTS) plan (30 months). More can be read here: 
https://github.com/nodejs/LTS. The odd-number releases still come with 
major changes and help build the ecosystem, but as far as LTS goes, there 
is only one per year. This LTS plan makes most enterprises want to stick 
to even-number releases, which is okay since frequent upgrades is not 
something they are normally interested in anyway.

There could be several minor releases (non-breaking) in between major 
releases. A major release contains all the features / bug fixes in the 
master branch a month before the release date, with the potential addition 
of (non-breaking) bug fixes until the release day. The deprecation cycle 
is one major release: any functionality that is decided to be removed is 
deprecated in the next major release, and removed in the major release 
after that.

Because of the success of LTS models in this and other open source 
projects, I would suggest implementing a formal LTS plan for Kafka too.

Regards,
--Vahid



From:   Gwen Shapira <g...@confluent.io>
To:     dev@kafka.apache.org
Date:   08/09/2016 04:49 PM
Subject:        [DISCUSS] Time-based releases for Apache Kafka



Dear Kafka Developers and Users,

In the past, our releases have been quite unpredictable. We'll notice
that a large number of nice features made it in (or are close),
someone would suggest a release and we'd do it. This is fun, but makes
planning really hard - we saw it during the last release which we
decided to delay by a few weeks to allow more features to "land".

Many other communities have adopted time-based releases successfully
(Cassandra, GCC, LLVM, Fedora, Gnome, Ubuntu, etc.). And I thought it
will make sense for the Apache Kafka community to try doing the same.

The benefits of this approach are:

1. A quicker feedback cycle and users can benefit from features
quicker (assuming for reasonably short time between releases - I was
thinking 4 months)

2. Predictability for contributors and users:
* Developers and reviewers can decide in advance what release they are
aiming for with specific features.
* If a feature misses a release we have a good idea of when it will show 
up.
* Users know when to expect their features

3. Transparency - There will be a published cut-off date (AKA feature
freeze) for the release and people will know about it in advance.
Hopefully this will remove the contention around which features make
it.

4. Quality - we've seen issues pop up in release candidates due to
last-minute features that didn't have proper time to bake in. More
time between feature freeze and release will let us test more,
document more and resolve more issues.

Since nothing is ever perfect, there will be some downsides:

1. Most notably, features that miss the feature-freeze date for a
release will have to wait few month for the next release. Features
will reach users faster overall as per benefit #1, but individual
features that just miss the cut will lose out

2. More releases a year mean that being a committer is more work -
release management is still some headache and we'll have more of
those. Hopefully we'll get better at it. Also, the committer list is
growing and hopefully it will be less than once-a-year effort for each
committer.

3. For users, figuring out which release to use and having frequent
new releases to upgrade to may be a bit confusing.

4. Frequent releases mean we need to do bugfix releases for older
branches. Right now we only do bugfix releases to latest release.

I think the benefits outweigh the drawbacks. Or at least suggest that
its worth trying - we can have another discussion in few releases to
see if we want to keep it that way or try something else.

My suggestion for the process:

1. We decide on a reasonable release cadence
2. We decide on release dates (even rough estimate such as "end of
February" or something) and work back feature freeze dates.
3. Committers volunteer to be "release managers" for specific
releases. We can coordinate on the list or on a wiki. If no committer
volunteers, we assume the community doesn't need a release and skip
it.
4. At the "feature freeze" date, the release manager announces the
contents of the release (which KIPs made it in on time), creates the
release branch and starts the release process as usual. From this
point onwards, only bug fixes should be double-committed to the
release branch while trunk can start collecting features for the
subsequent release.

Comments and improvements are appreciated.

Gwen Shapira
Former-release-manager





Reply via email to