KDE ABI stability?
Nicolas Goutte
nicolasg at snafu.de
Mon Dec 5 16:43:09 GMT 2005
On Sunday 04 December 2005 18:47, Kevin Krammer wrote:
> On Sunday 04 December 2005 18:36, Thiago Macieira wrote:
> > Kevin Krammer wrote:
> > >> This means a program that compiled and ran with KDE 3.0.0 must still
> > >> compile and run with 3.5.0 (including running without re-compiling).
> > >
> > >Unfortunately this seems only be true for kdelibs. I remember a thread
> > > on debian-qt-kde (Debian KDE packagers list) about one of the other
> > > modules breaking BC in a library shared with another module.
> >
> > All *public* libraries are supposed to maintain BC. Non-public ones and
> > non-library code doesn't have to maintain.
>
> Sounds reasonable.
>
> > I am not sure whether libcvsservice was supposed to be public or not, but
> > it does have public headers. This looks like a bug from the cervisia
> > developers.
>
> Unfortunately nobody seemed to know about it. Both me and Ian Geiser
> (thread starter IIRC) insisted on the very thread that KDE was supposed to
> be binary stable within a major release but we were told that this wasn't
> the case.
To avoid a possible misunderstanding: an application built from an older
version of KDE should work on a younger version (assuming the same major
version) but not the other way round.
Also that works as long as Qt keeps its binary compatibility, which was not
entirely the case during (early) Qt3 (for example plugins).
Also binary compatibility is not enough. KDE should have a
behaviour-compatibility rule, which it does not have. (Example: two changes
of the handling for "recent files", each breaking KDE applications.)
>
(...)
> Assuming that the bug was indeed a BIC change in libcvsservice, it could
> indicate that non-core developers are not aware of the binary compatability
> requirement or uncertain when a library has to be considered public.
I think that the problem is that the BC rules are not easy to understand, as
you enter the subtle realms of C++. For examples, the multiple inlined
constructors in public kdelibs classes that disallow to use of the planned
private class defined by the corresponding public class.
Also it is perhaps easy to forget that an application has a public API too.
(It seems that I have managed to break KBabel's one for KDE 3.5.)
>
> Cheers,
> Kevin
Have a nice day!
More information about the kde-core-devel
mailing list