[dev] Horde release cycle
Gunnar Wrobel
wrobel at horde.org
Tue Jan 25 21:04:07 UTC 2011
Zitat von Ben Klang <bklang at horde.org>:
>>
>>
>> 1) Breaking backward compatibility is a key issue. It determines
>> how fast the developers may move forward. This in turn also plays a
>> role in how fast new features can be delivered to end users. But
>> backward compatibility also has its part in determining how long a
>> custom Horde application any of you out there wrote will be
>> provided with a supported base.
>>
>> So far we have a history of keeping backward compatibility for a
>> very, very long time. But as far as we know most people will
>> upgrade the whole Horde system with every release anyway. So there
>> is no need to be able to run the most recent kronolith release with
>> Horde 3.0.0. Everyone probably uses 3.3.11 anyhow.
>
> Completely agree here.
>
>>
>> A good compromise might be to break backward compatibility every year.
>
> I'm not sure I'd phrase it quite this way. Doing development
> eventually means breaking backward compatibility as systems and
> features evolve. That being said, there's no automatic requirement
> to break backward compatibility when developing so I don't think it
> makes sense to say "we are going to break backward compatibility
> every year." What is more important to me is the promise we make to
> consumers of our software. To me the promise should be something
> like this:
>
> 1) The existing API (method signatures and return values) will not
> change as long as the major number is the same
> 2) If new methods or classes (significant functionality) are added
> then a minor number is incremented
> 3) When and if we decide to break backward compatibility in a given
> library or application we will commit to supporting the latest
> release of the old major version with security updates for a period
> of time (example: 2 years)
> 4) When and if we decide to break backward compatibility we document
> what has changed and, ideally, make recommendations on how to update
> code to support the new version.
>
> It's bad for everyone if we are requiring frequent
> backward-incompatible changes. I know that many of us core
> developers feel a lot of strain over the last five years as *no*
> backward incompatible change has been made. Clearly, with Horde 4,
> we need to move on.
>
> All of the above applies to the public-facing Framework APIs as well
> as the external-facing Horde application APIs, such as SOAP, XML-RPC
> or any of the DAV implementations.
>
> With that said, my vote would be that we commit to avoiding any
> backward compatible change for at least 18 months from the first
> release of a new major version. Forward-incompatible changes, such
> as adding new methods or classes, would be exempt from this.
Of course I don't want to force BC breaking changes if they are
unnecessary. I might comment in more detail on this tomorrow but I
wanted to mention that you are looking at this from the users side.
There is also the developers side. An example: I started improving the
Kolab drivers in 2006. Back then Horde3 was the active branch. The was
already some Kolab code in there that desperately needed some
improvements. While I was able to do them I had to bend backwards to
keep BC. I admit that at that point in time my PHP knowledge was also
much worse than now so I produced really crappy code. However: That
code is still there. 2011, stable version. And that is really not good.
Code always needs to work for both sides: users and developers. So as
a developer I want to get the promise: "Yes, you may break BC if it is
bringing you forward. You will have to wait a little until you get
your next window but it will come at a defined time."
One year or 18 months wouldn't matter that much to me. But I want that
promise ;)
Cheers,
Gunnar
>
>
>>
>> 2) Applications could be released in a synchronized manner every
>> half year. That would keep us in tune with some of the major Linux
>> distributions out there and might help packagers to deal with the
>> Horde applications. Security releases are a different matter of
>> course.
>
> This works for me as well. Again whatever our promise is as far as
> security updates needs to be documented publicly on our website
> somewhere so distributions and packagers know what to expect.
>
>>
>> 3) Does a similar release scheme make sense for framework packages?
>> Maybe not as there are many of these and not all of them will see
>> changes during six months. In addition these are intended to be
>> distributed as small PHP component libraries with Horde4. So it
>> could make sense to publish bug fixes once these become available.
>> But I admit I'd prefer regular releases for these components as well.
>
> I think there's a difference in Framework packages versus Horde
> packages. Personally I feel no need to release library packages on
> any regular basis. For example, the Horde Cache SQL driver pretty
> much does what it needs to and, bugs aside, doesn't need to do much
> more. My feeling is that it should be updated and released only as
> needed.
>
> Now, when we are talking about releasing Horde and associated
> applications as a package, then I do agree that we need a regular
> release schedule. My preference would be to make a new minor
> version release every 6 months and a new major version release
> approximately every 18 months. Whatever changes we have in Git when
> release time comes get tested, polished and documented then released
> as close to the due date as possible.
>
>>
>> 4) I would like us to support the active version (which also gets
>> new features), the last stable version (which gets no new features
>> but the bug fixes) and the version before that (which only gets
>> security fixes). If that is the case and assuming we'd keep that
>> scheme when breaking backward compatibility every year then each
>> version would see support for three full years. In case that would
>> not be enough one might consider doing something like the long term
>> support scheme Ubuntu is doing.
>>
>> 5) With the scheme suggested above we would have four active
>> branches (development, active, stable, security) which might be too
>> much. Three would sound better.
>
>
> #4 and #5: This seems like too much work to me, but I think it is
> more important to get feedback from the community here. Personally,
> I'm fine with only two maintained branches:
> 1) The latest current major version release (new features, bugfixes
> and security)
> 2) The last release of the previous major version (security and
> critical bugfixes only).
>
> We will always have a development branch as well of course but no
> guarantees are made at all.
>
>
>>
>> In addition to the points above it might also be important what we
>> can actually do with PEAR. Horde4 will be fully PEAR based and
>> hopefully we can rely on the dependency management that comes with
>> PEAR to prevent users from accidentally pulling packages from
>> mismatched branches.
>>
> Agreed. This versioning and dependency should also be available in
> any other packaging mechanism we distribute, such as RPM or DPKG as
> appropriate.
>
>> And last but not least the versioning is important too. Would we do
>> Horde5, Horde6, Horde7...? Or Horde 2011, Horde 2012, Horde 2013?
>> I'm somewhat in favor of the latter.
>>
> I dislike year-based version numbers. I'm a fan of Semantic
> Versioning, which is reflected in my comments above:
> http://semver.org/
>
>
>> As mentioned these are just a few thoughts that come to my mind
>> when considering the release scheme. I'm certain I forgot a bunch
>> of important factors but hope we'll touch these in the discussion
>> that hopefully evolves.
>>
> Thanks for getting the discussion started!
>
> /BAK/
> --
> Ben Klang
> Core Developer
> The Horde Project
> bklang at horde.org
> http://www.horde.org
>
> --
> Horde developers mailing list
> Frequently Asked Questions: http://horde.org/faq/
> To unsubscribe, mail: dev-unsubscribe at lists.horde.org
--
Core Developer
The Horde Project
e: wrobel at horde.org
t: +49 700 6245 0000
w: http://www.horde.org
pgp: 9703 43BE
tweets: http://twitter.com/pardus_de
blog: http://log.pardus.de
More information about the dev
mailing list