[dev] Branches (again), Horde 4.1/5, recent IMAP changes

Michael J Rubinsky mrubinsk at horde.org
Thu Nov 3 00:35:33 UTC 2011


Quoting Jan Schneider <jan at horde.org>:

> Zitat von Michael J Rubinsky <mrubinsk at horde.org>:
>
>> Quoting Jan Schneider <jan at horde.org>:
>>
>>> Zitat von Michael J Rubinsky <mrubinsk at horde.org>:
>>>
>>>> Quoting Jan Schneider <jan at horde.org>:
>>>>
>>>>> Hi,
>>>>>
>>>>> I originally wanted to sum this up after all October releases  
>>>>> are finished, but the recent IMAP (mailbox) changes made this  
>>>>> somewhat higher priority.
>>>>>
>>>>> Even though there are still some complaints, I think the switch  
>>>>> to PEAR based releases was a great overall success. With a  
>>>>> whopping 780 (seven hundred and eighty!) package releases since  
>>>>> we started the new PEAR server, we brought the paradigm of  
>>>>> "release early, release often" to new heights, at least for  
>>>>> Horde's standards. That, and the implicit dependency management  
>>>>> makes me never want to go back.
>>>>>
>>>>> But that's not the only thing we changed for Horde 4, we also  
>>>>> intended to set new rules for release management  
>>>>> (http://wiki.horde.org/Doc/Dev/ReleaseCycle) and branch  
>>>>> management (http://wiki.horde.org/Doc/Dev/Branches). This is the  
>>>>> area where we still need to improve.
>>>>>
>>>>> We are currently in our 2nd release cycle since we released  
>>>>> Horde 4, and everybody noticed by now that there is no Horde 4.1  
>>>>> in the works, let alone Horde 5. The reason is that we simply  
>>>>> didn't have any new features or larger changes in our stable  
>>>>> code base that hadn't been released yet anyway. That's why we  
>>>>> focused on releasing the "missing bits" during this release  
>>>>> cycle, i.e. the until now unreleased applications that had to be  
>>>>> ported to Horde 4.
>>>>>
>>>>> The reason for the lack of new features is that we kept adding  
>>>>> new stuff to the master branch, i.e. to the stable branch, and  
>>>>> still shuffled things around with new stable releases. I let  
>>>>> this happen, despite this being against the release/branch  
>>>>> rules, because I felt like there still were some teething  
>>>>> troubles with our young Horde 4 release (and Michael even  
>>>>> explicitly expressed that he considered our stable release too  
>>>>> early at one point) We also had some important things missing  
>>>>> originally, that shouldn't had to wait another half a year. But  
>>>>> at the same time I was intent to get an agreement to more  
>>>>> strictly enforce these rules once the 2nd release cycle is over.
>>>>> Because the flip-side of the coin is that (even though some of  
>>>>> those changes in stable releases were necessary to fix bugs),  
>>>>> the "stable" releases were much less stable than they should  
>>>>> have been. Too often some of those larger changes caused  
>>>>> intermediate regressions. Fortunately this didn't have such a  
>>>>> high impact, thanks to our new release model (see above). I  
>>>>> still think we should stop this now though. People should not be  
>>>>> prepared to experience regressions due to code restructuring  
>>>>> (like the mailbox encoding in IMP), notable UI changes (like in  
>>>>> dynamic Kronolith) or new features suddenly popping up (like in  
>>>>> - everywhere), while they update within a minor version. Such  
>>>>> changes need more testing through RCs (yeah, I know, they won't  
>>>>> be tested properly anyway, but that's a different story), and  
>>>>> with piling them up for the next minor version, we actually  
>>>>> *have* some minor version to release.
>>>>
>>>> While I agree with the importance of keeping master stable, as  
>>>> you stated, some of those changes were necessary to fix some high  
>>>> profile bugs. Going forward, what would be the protocol for  
>>>> similar bug fixes where we really shouldn't wait 6 months to  
>>>> release a fix? Hopefully master has settled down to a point where  
>>>> we shouldn't have this type of problem. Given how we just  
>>>> released a handful of new H4 apps, it's not out of the realm of  
>>>> possibilities that a similar situation could arise.
>>>
>>> Yes, even we if set up some rules, those should not be written in  
>>> stone, and some flexibility is necessary to react properly in  
>>> important situations. But those should really only be exceptions  
>>> from the rule, well justified, with no alternative options, and  
>>> with side-effects kept as small as possible.
>>>
>>>> Part of this could indeed be that we released before the code was  
>>>> 100% ready, but I have no doubt that we *had* to do this. Had to  
>>>> finally pick a date and stick to it. Even if we *had* waited,  
>>>> some of these bugs would still not have been found until we had  
>>>> the level of use we only get after our code is put into production.
>>>>
>>>>> So, I urge everyone to read the wiki pages linked above again.  
>>>>> If everyone is still fine with that direction, then let's all  
>>>>> agree to enforce these rules from now on.
>>>>
>>>> I'm still ok with this direction overall, but I have some  
>>>> questions now that we have spent some time with this model.
>>>>
>>>> (1) I know that we are to make no BC breaks until Horde 5, and I  
>>>> also know that we have made some semi-bc breaking changes during  
>>>> this cycle and simply changed the application's minimum required  
>>>> version of the dependency. I'm assuming these were unavoidable  
>>>> changes, but it brings up a broader question in my mind: When is  
>>>> it ok to require a newer version of some dependency? Only during  
>>>> major version releases? Minor versions?Never during bug fix  
>>>> releases?
>>>
>>> Originally I thought we should not allow to require higher  
>>> versions of dependencies unless really, really required for  
>>> serious reasons (security fixes, important bug fixes). But during  
>>> our last conversation about that topic I got convinced (and that's  
>>> what the other Michael refers to in his reply) that this  
>>> strictness is not really necessary. So we should allow to raise a  
>>> dependency version. But this of course does *not* mean that this  
>>> dependency is allowed to break BC. I.e. the users must be able to  
>>> upgrade a dependency without breaking an older version of a module  
>>> that depends on it.
>>>
>>>> (2) How do individual framework packages fit into the stable  
>>>> branch/dev branch. Since they are now released separately, do we  
>>>> still stick to the no-new-features-in-master paradigm for these?  
>>>> Since these have been (up until now, anyway) released on a more  
>>>> frequent cycle I'm not sure this makes sense. Horde_Foo may have  
>>>> some new feature, or major bug fix that required the minor number  
>>>> to be bumped - and I'm not sure I would want to wait the up to 6  
>>>> months until the next time dev is merged into master for the next  
>>>> release cycle.
>>>
>>> Good question. From a gut feeling I would say that it's fine to  
>>> add features to framework packages, as long as we keep bumping the  
>>> minor version, which we already did very disciplined so far. But  
>>> thinking about it again, I'm not sure why there should be a  
>>> difference to the applications. Any arguments to rationalize my  
>>> feelings are welcome. :)
>>
>> I was thinking mostly because the release cycles are so different.  
>> No reason to hold back an improvement in a framework package for 6  
>> months just because are application release cycle is 6 months. This  
>> seems like an arbitrary rule to me. If it's stable, we should  
>> release it. Release early and often, as they say.
>>
>> While we are talking about this, I have a problem with the  
>> branching model ...
>> I'm confused about what happens once we start releasing minor point  
>> releases of some applications, while other applications are still  
>> on the x.0 release. Add to the mix that we have a number of  
>> different minor version bumps already on master and things get even  
>> more confusing (at least to me), as to what version should be on  
>> what branch. What happens when we release e.g., IMP 5.1, but not  
>> Ansel 2.1 yet? How do we merge the changes from IMP into master  
>> (since that is now the stable code for IMP), while not moving  
>> Ansel's 2.1 code to master since it is *not* yet stable? Are we  
>> going to synchronize the minor releases? That's not something we've  
>> done in the past, and don't think will work well.
>
> But that's exactly what we decided to do in the release plan:  
> synchronized releases. Of course this would be much easier if we  
> didn't have a single repository for all applications. And I can see  
> how this is going to cause problems when we don't manage to get all  
> applications ready for a new release in the same time.
> Of course we don't necessarily have to release a new minor version  
> of each application if there simply aren't any new features.

Exactly. These are the two cases I'm thinking of. I doubt we will both  
(1) Always have a minor version upgrade for every application at the  
same time and (2) Even if we did, I doubt they would be ready at the  
same time...at least given our track record.

I guess given our monolithic repository, no matter how we decide to do  
it, there are going to be some issues like this to work around.

-- 
mike

The Horde Project (www.horde.org)
mrubinsk at horde.org



More information about the dev mailing list