Qt 3.2 requirement
Marc Mutz
marc.mutz at uni-bielefeld.de
Mon Jul 28 17:26:03 BST 2003
Hi!
Prologue:
KDE has a nice track-record of doing things "because they were always
done this way". This is again one of those issues where this shows up.
KDE - it is said - is all about pragmatism. However, recently it's more
about religiously fighting for principles even when they start hurting
the project. This thread is one example. The STL debate was another
one, and I expect the no-GPL-in-kdelibs to be forthcoming.
On Friday 25 July 2003 23:56, Martijn Klingens wrote:
> On Friday 25 July 2003 19:47, Ralf Nolden wrote:
> > I ack coolo that supporting two versions is a pain.
<snip>
> Since Kopete has standalone releases that have to compile against
> other KDE/Qt versions I can confirm from personal experience that
> maintaining compatibility across multiple versions is a pain if you
> also want to use the newest stuff where it's available (or are used
> to it and forget it wasn't in the old version).
This pain is self-made. It stems from violating the layering
Qt<-KDElibs<-apps
Qt/kdelibs layering is e.g. violated where (as Matthias detailed)
kdelibs subclasses try to fix bugs in Qt instead of fixing Qt in the
first place or maintaining a layer between Qt and kdelibs (the famous
qt-addons) that is bound to a specific Qt version.
Similarly, apps/kdelibs layering is violated where e.g. apps try to work
around bugs in kdelibs or Qt w/o #ifdef'ing the workaround to a
particular Qt/kdelibs version. The latter would force a re-evaluation
of the workaround for every new release, guaranteeing that workarounds
drop out of the code as their causes are fixed upstream. As it is now,
however, KMail (as an example) is full of workarounds for bugs or
missing functionality in Qt/kdelibs that no-one understands anymore. I
don't expect other subprojects to be much better in this regard.
Layering would automatically be maintained more accurately if KDE
adopted the policy of only requiring the latest stable release
branch's .0 version. Bug fixing in the libs is great, but using this as
an argument for requiring the new libs is nonsense. If people are being
bitten by bugs that are fixed in an upstream release, then they have
incentive enough to update. OTOH, people who don't experience those
bugs won't want to update, b/c - like it or not - updates are always a
risk for a production system.
> For Kopete it's something we'll have to live with, but for KDE in
> general I'd strongly recommend AGAINST maintaining 3.1 compatibility.
<snip>
You should ask yourself what that pain consists of. I strongly suspect
that it's inter-version differences of the upstream libs. If that is
so, KDE - lacking serious regression testing - very much benefits from
apps like KOffice or Kopete that want to maintain compat with at least
the last stable Qt/KDE release. It's frequently such projects that
point out incompatible (be it BIC or behavioural) changes in kdelibs/
Qt, whereas the rest just accepts them with a recompile and a fix.
> I encourage anyone who disagrees to try maintaining compat for a
> fairly big application for a few months and then tell about the
> experiences. I'm pretty confident all of you would instantly agree
> with Coolo and Ralf by then! :)
The most important pain you have with keeping backwards compat for a
subproject is that people try to bash you for doing so and don't have
anything better to do than implement a new feature in kdelibs and run
around all of CVS porting apps to use that new feature - without
#ifdefs.
The std argument of course being "I'm too lazy to test my stuff and want
others to perform this painful task for me". Of course, they don't say
so. But look around this thread. All you'll see as arguments for
requiring Qt 3.2 for CVS HEAD is paraphrased and euphemism-ized "I
don't want to write tests for my new feature. I want others to play the
guinea pig", sometimes paired with "I don't want to backport my bug
fixes. I consider KDE 3.2 a bugfix release. Who on earth still uses KDE
3.1.x?".
I'm sorry if the above sounds harsh, but it's the essence of the KDE
development model if you look at it from outside it's ivory tower.
The running after people commiting dependencies on later libs in your
code without asking for permission is the real pain you have when you
maintain a project for two different KDE versions. The issues you get
when upgrading to a new Qt or kdelibs version are for the vast amount
of cases self-made: You've relied on undocumented or not properly
documented behaviour (ie. you looked at the source instead of at the
docs). That is fixed with a quick patch and then done, whereas the
introduction of dependencies is a permanently recurring problem.
Which brings us back to the violation of layering. Every software
professional will tell you how very important it is to have a decent
layering in your code. Without proper layering, you can't regression-
test each layer independently and are thus fallible to all those tiny
little buglets that haunt KDE for every new Qt release.
Instead of fixing the symptoms, KDE should fix the _cause_.
Another point that's missing from the discussion up to now, BTW:
Don't you think Kopete and KOffice get *more* testers b/c they run on a
stable KDE platform instead of requiring users to upgrade all of the
metaphorical dog with the tail? Why else would you want to maintain
backwards compat?
Marc
--
It's one thing to accept a risk to your own data, but quite another to
standardize on something that imposes that risk on others, no matter
how unlikely you think it is that anything "really bad" will happen,
and no matter how desirable the outcome. -- Bart Schaefer, on ietf-822
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: signature
URL: <http://mail.kde.org/pipermail/kde-core-devel/attachments/20030728/a1b270c4/attachment.sig>
More information about the kde-core-devel
mailing list