Hi everyone,

Given the several current threads where there's arguing about what and how and 
when to release features, backported or not, I'd like to offer a tale of a 
project that was, more or less, in the same dire spot, and pulled itself out of 
that misery with great success and universal acclaim.

That project is PHP.

Back in 2010, it was stuck at version 5.3.something, there was no standards 
around what feature goes into a minor release, how a feature is even accepted 
for inclusion, how security updates were treated, and so forth.

Enter: https://wiki.php.net/rfc/releaseprocess

The tl;dr of this approach is that

- any x.y.z release only introduces bugfixes. These releases are done every 
four weeks, like clockwork. If a fix doesn't make the cut for a release, it'll 
end up in the next one;
- x.y.0 releases, on the other hand, may introduce new features, fixes, and 
deprecations, but no breaking changes;
- x.0.0 releases are the big ones (think PHP 7.0.0 in late 2015). where 
backward compatibility may be changed, etc.

This makes for very predictable update cycles, and for pretty easy updating, as 
it's very very unusual that a x.y.z release breaks existing behavior. At the 
same time, since x.y.0 releases are made roughly once a year, bigger changes do 
not exist in a limbo branch forever, but will see the light of day eventually 
(and, again, after a predictable amount of time). There is a defined roadmap 
with active/security maintenance status and EOL dates for all versions; see 
http://php.net/supported-versions.php

From a user perspective, this change has been fantastic. Once virtually 
stagnant, development of the language itself has been much more active; users 
have a much better idea up front around when fixes or features will land; 
upgrades have become easy as there are clear definitions of what kind of 
changes a version may contain.

But most importantly, the language itself has seen a steady flow of new 
features as a result from this discipline. For features and bigger changes, an 
RFC is written with rationale, analysis, suggestion of implementation, and then 
it can be voted on. Once accepted, it can be committed, reviewed, and merged. 
Even for "outside" contributors, this process is transparent, and the mental 
threshold towards contribution has been lowered greatly, as acceptance of an 
RFC basically means that the feature will go into a new release anywhere 
between within a few months and a year and a bit (depending on when in the 
release cycle it happens).

There are a bunch of technicalities that would need adjusting to fit HTTPD, 
such as release intervals, release management (for PHP, every x.y.* series has 
two managers who jointly coordinate releases), etc, but overall the idea is, 
IMO, worth considering.

As a, more or less, "outside observer", I happen to think that the current 
method of voting on finals, instead of a practice of rolling out RCs (that are 
then left up for testing for at least a week), is fundamentally broken. The 2.4 
changelog in particular is littered with releases that were never officially 
published. For users, that's really confusing. For maintainers, it's painful to 
start over the process each time, and it sometimes leads to months and months 
without a release that contains certain fixes. Then a backport goes wrong 
(still using SVN, in my opinion, does not help there, but that's a whole 
different discussion :)), and a regression is in the latest release until 
someone eventually picks up a fix. 

Much of this, and many of the "what do we backport from trunk" and "I'd like to 
squeeze in a change I've had sitting around locally, please wait with the new 
release, because who knows when the next one after that will be" are, from what 
I can tell, a significant source of discord on this mailing list. All these 
unnecessary distractions that deteriorate personal relationships, while at the 
same time slowing down the pace of the project (several people have already 
pointed out Nginx's rate of innovation in comparison) and raising the threshold 
for contributions, can be fixed. PHP is the perfect example, and I think HTTPD 
would be wise to at least consider following this example.

Happy New Year!

David


Reply via email to