* Ferenc Kovacs <i...@tyrael.hu> wrote:

> You can't expect the users to switch to the new major version as soon as it
> comes out. They have to either migrate their codebase, and sadly they will
> wait(at least me and my collegues/friends do this) one or two micro/build
> version bump, usually the new major/major.minor version is stable enough.

ACK. One of my customers, a major ISP with millions of customers,
often sticks in older versions as newer ones tend to break many things.
Just had such a problem myself a few weeks ago: a minor update
(IIRC was from 5.3.2 to 5.3.3) broke virtually all of my web applications
(had to do lots of config adaptions to get it running again ;-o).

I got the strange feeling that php-devs don't care very much of long
term stability ;-p

It's more a problem of careful API/feature design than release cycling.
Once some feature or interface is in stable branch, it should stay there
w/o any disturbance at least until next *major* release.

> So if we want to support "equally" 2 major version concurrently, I can't see
> how can we make it through supporting 4 branches (oldmajor.last,
> oldmajor.current, newmajor.last, newmajor.current)
> 
> or we can make "unequal" or "favored" branches:
> - either an early adopter vs lts sytem like ubuntu does, but they have 4
> supported version at a time also
> https://wiki.ubuntu.com/LTS
> but I don't know how to mix LTS and php, because they release "shared
> nothing" versions, while the php versions does share a common codebase
> through their major version, so we can't plan beforehand that what version
> will be the nextlts before getting there like the ubuntu guys can. :/

Why not using a branch hierachy ?

* new major branch is forked from latest release tag when compatibility
  breaks will occour (properly planned and only done if *necessary*,
  eg. like 4.x -> 5.x).
* for each minor release, a separate branch is forked on the latest
  stable tag.
* bugs in a minor releases are fixed in these branches and micro
  releases tagged out from there.
* canonical versioning scheme: A.B.C (the 4th digit is reserved for
  distros / downstreams)
* all issues (bugfixes, features, etc) are done in their own per-issue
  branches, which get rebased to their parent branch before merging back.


Scenario A: bugfixing.

-> found a bug in 5.3.4, reporting as bug# 12345
-> forking a branch bugfix_5.3.4_12345 from release-5.3.4
-> fixing the bug, testing until everything's fine
-> rebasing to latest php-5.3 branch and maybe retest.
-> submit my bugfix branch for review, until aggreed to be fine
-> rebase to latest php-5.3 again and merge into it
-> tag a new release from that branch
-> rebase to to latest master branch (that will become 5.4),
   test again and merge if still applicable there

Scenario B: new feature

-> inventing some super-new feature, which will take a while to 
   be stableized
-> fork from latest stable release or master branch (whatever seems
   applicable, on when the feature might get into mainline)
-> do development here, possible rework multiple times
-> frequently rebase to new releases or master branch
-> plan into which release the feature will get in
-> when properly reviewed/tested/accepted, rebased to latest master
   and merge into it



cu
-- 
----------------------------------------------------------------------
 Enrico Weigelt, metux IT service -- http://www.metux.de/

 phone:  +49 36207 519931  email: weig...@metux.de
 mobile: +49 151 27565287  icq:   210169427         skype: nekrad666
----------------------------------------------------------------------
 Embedded-Linux / Portierung / Opensource-QM / Verteilte Systeme
----------------------------------------------------------------------

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to