... unsure where to start, seems I missed some mails ...

Let me briefly sort my thoughts:
- We (OOo) do provide APIs (Uno, C/C++, Java, BASIC etc.) more or less for modularizing / unitizing OOo. - We do regard some of these APIs to be for internal use only, while others are available for public use. - The internal ones are (inherently) unstable, while public APIs in general should be stable (though some may still be on their way). - We do regard stability of APIs as important for 3rd parties as well as for our users, so that a user can expect a particular application (e.g. extension) to work in a particular set of OOo versions. - Obviously an API may earliest be used with the first OOo version providing it. - Historically we aimed for only adding APIs to allow any existing application (e.g. extension) to continue working with all future OOo versions. (Note: In practice we did break (accidentally or intentionally) some APIs every once a while.) - We now seem to understand that adding new APIs w/o removing/adapting old APIs creates a measurable burden on both shoulders, ours and that of 3rd parties. On ours, as we have to maintain the stuff and sometimes may not as easily change something as we wanted, on the 3rd parties, because the learning hurdle to master all of these APIs steadily increases.

Removing/adapting an API typically means breaking it! If we do want to support such changes, we certainly want to do this in a coordinated fashion, to avoid surprises. We do need some cornerstones for this, though we should also allow to apply common sense, avoiding too much of a process.

A cornerstone may be something as to allow changes/removals for major versions only etc.

... and we need to ensure that the basics are in place, such as versioning APIs etc., to be able to deal with an incompatible application (e.g. extension) in a user friendly way.

Some years ago I thought and did favorite to never ever change an API, as I wanted to be able to always use all existing applications (e.g. extensions) in any recent enough OOo version, even if the author or origin of these application had not been available anymore. After gathering some years of experience with Firefox extensions etc., I now think that we only need (and may be should) only support any lively (maintained) extension! This means also that we can expect the maintainer to adapt the code to any (reasonably) changing APIs.


Regards

       Kay


Mathias Bauer wrote:
Thorsten Behrens wrote:

Mathias Bauer wrote:
limit impact considerations to non-ABI-dependent UNO bindings (i.e. the assumption is that c++ components break randomly anyway for every other release, so they shouldn't block API changes)
This is not true; in fact on Windows C++ extensions are very stable and
at least without a base line change that should be true for other
platforms as well (some discipline assumed).

Hi Mathias,

well, Win32 is only one platform,
:-) It's the platform of the overwhelming majority of our users.

As far as I'm concerned, I'm making software for users, not for ends in
themselves. So for me there is some sense in trying to keep extensions
working as long as the pain for the developers is bearable. We decided
that it's about time to take some pain from the developers, but that
doesn't mean that we should give up compatibility completely.

and experience tells that in general, c++ extension *do* break between releases.
No, exactly that is not my experience, not with our careful handling of
baselines and backwards compatibility. If am using a very sophisticated
Windows C++ extension that was made for OOo 1.x and it is still running
well with OOo3.

C++ extensions break for the same reason as others: because of bugs of
changed behavior in OOo. There is no reason to treat C++ extensions
differently.

But you're
right, that's not necessarily caused by ABI changes in the strict
meaning of the word, a case in point is the 3 layer OOo rework.

Whatever happened there, it's not something that is likely to happen
much often and doesn't qualify for a general problem with C++
extensions. And BTW - again no problems with it on Windows.

My take on that would be: if we allow for incompatible API changes in
e.g. a major release, there's no reason not to allow incomatible changes
in the C++ libs also. Maybe that's what you wanted to express.

No, but that's surely something I can buy into as well. What I
wanted to express is that the c++ API/ABI is fragile enough IMO to
not hold back with changes that *deliberately* break compatibility
there. People should really be encouraged to use (or at least wrap
their stuff with) Java or Python when doing extensions; that would
also quite nicely solve the problem of (non-)cross-platformness. ;)

The C++ API/ABI is only as fragile as we make it. And I think we should
make it only as fragile as we will make the UNO API in general. That
means, if an OOo release came with an API that is incompatible to a
large extent, we could also change the C++ binding incompatibly - as
well as any other language binding. But changing the C++ binding with
every release just because "it's fragile anyway" isn't a good idea.

Regards,
Mathias




---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@api.openoffice.org
For additional commands, e-mail: dev-h...@api.openoffice.org

Reply via email to