Hi Thorsten et al.

sorry for stepping in that late, was quite busy with other things
recently. (And, partly, didn't know whether I *really* want to join this
potentially big and ugly discussion :)

Anyway, thanks for bringing up the topic. I can't but agree with you
(and obviously with Jürgen) that the absoluteness of the "just don't
touch published API" might not make sense anymore. The topic pops up
again and again, so I'd say: let's get the party started ...

> Issue reopened - then please let's discuss this other solution,
> preferrably in the issue.

(personally, I think the mailing list is the better place)

>> Anyway the mechanism should be handled carefully.
>>
>> Don't misunderstand me i am not against API changes in general. I would  
>> really love to see some steps in the right direction but not simply by  
>> introducing a whitelist without a detailed definition what can be  
>> changed. And of course i would keep the current mechanism to explicitly  
>> change the reference rdb.
>>
> Understood - but I'm not happy with mixing this technical question
> with the general problem of policy (either way, you would surely
> watch commits to the whatever-it-is mechanism and object changes
> that violate the to-be-defined policy).

In this case, I agree to Jürgen. You problem, which you tried to address
with the patch, is, IIRC, an enum value which was never used and never
implemented (and perhaps even defined in a senseless way?), thus one can
reasonably argue that changing it does no bad at all.

For this, as we learned from Jürgen (I didn't know this before), it's
allowed to change the reference rdb, so the regcompare won't fail.

Comparing your approach - opening a wide portal for all kind of
potentially "wrong" changes - with that one - changing the reference -,
the latter sounds ... less prone to misuse to me. Yes, the latter can be
misused, too, but since changing a reference RDB is a greater hurdle
than just adding a line to a whitelist, chances are better that people
think about what they're doing.

So, for your concrete problem, I suggest you in fact commit a new
version of the rdb file.


Now, away from the concrete problem to the general policy ...

> Definitely. I guess there are (at least) the following cases:
>  1. unused API, or API that crashed OOo, or that was simply ignored
>     when calling the OOo implementation
>  2. syntactic changes, e.g. renaming, that will only cause
>     recompilation to break, but no existing client (maybe only for a
>     defined subset of frequently used implementation languages)
>  3. removal/renaming of seldomly used, or long-time deprecated API
>  4. removal/renaming of often used API
> 
> I'd say that 1. and 2. could be unanimously agreed upon, 3. needs
> some careful consideration, e.g. publicly on this list, and a
> migration path, and 4. should maybe just be left alone. ;-)

One question which you implicitly answer for yourself, and which I think
large parts of the whole discussion could boil down to, is the following:

Does our API describe implementations in OpenOffice.org, or is it
describe a generic API which can be implemented in other contexts as well?
(Of course, in reality this question would need to be answered for every
concrete piece of API, but let's save this for the moment.)

The beholders of the holy grail would probably say: the latter. You
implicitly state the first, since you claim that API which is not
used/implemented in OOo can be safely changed.

Which is what I would agree to. That is, I strongly and strictly believe
that our API (now: parts thereof) describes a concrete implementation in
OpenOffice.org, and when the implementation evolves, the API should be
allowed to evolve, too.

As an example, consider services such as css.document.OfficeDocument.
With nearly every new OpenOffice version, there are new interfaces which
are implemented by our document implementations, but which are added to
the service description as "optional", just to not break compatibility.

Which is nonsense: If your client code lives in an OOo 3.0 context, and
works on a document, then it can safely assume the new-in-3.0 interfaces
are present. On the other hand, if (against all probability) there is
client code which implements the OfficeDocument service itself (and
which was really functional in 2.x, despite all the implicit assumptions
made in OOo's implementation, which are far from being documented
anywhere), then this code will most certainly not work in an OOo 3.0, if
it doesn't implement the new-in-3.0 interfaces - simply because those
now became a requirement imposed by OOo's implementation of the
application framework.


So, this is what I think should be the first question before changing
any API: Does it describe an implementation? If yes, the door is open
for changing it, if no, the door is strictly closed.

A rule such as this would save most, though not all, of my grieves with
the "published" paradigm. Lots of my API could be cleaned up then ...


Besides this, there should be some more rules.

As you say in your third item, a policy for deprecated API is missing.
The complete css.data module is deprecated, as is much of the API in
several other modules - I really would like to get rid of those. (Though
this is a minor issue - simply removing all documentation from
deprecated API except the deprecation/successor statement works fine for
me.)

Then, the relaxation of the "published" meaning to a "client code works
again if recompiled" would be tremendously helpful. Heck, why am I not
allowed to add new methods/attributes to an interface? If this interface
really describes an implementation in OOo (ah, the same topic again
...), then I want it to evolve as the implementation evolves and
provides more features.


Sure, we do not need all of the above if we stick to creating XFoo2 and
XFoo3 and XFoo4 and such over time. But this does not really scale, e.g.
because we would also need to introduce XBar2 and XBar3 and XBar4 for
many of the XBars which somehow interact with XFoo.

So, this is not an option if we consider the *usability* of the API.
Yes, API can have a good or bad user experience as well. Finally, this
is why "new-style services" and multiple inheritance interfaces and the
like where introduced. Time to consequently advance on this way.


Play, enough grumping. A concrete suggestion: The two classes
"published" ("can never ever be changed in any way") and "unpublished"
("can change in any way you can imagine, plus a few more") are not
sufficient.

We need something in-between: "Can change in a way that all your client
code using this API still works if you simply re-compile it".

For the next release in reach (3.1), we examine the existing published
API, and look which parts of it we can downgrade to the new class.

And, well, the "we change the API incompatibly if the old version was
mere nonsense"-case should still be possible. This would catch your
concrete case (and more, if you look into the CVS history of the
reference RDB.) But that'd be a careful case-by-case decision, as it is
today.

'nuf said.

Ciao
Frank

-- 
- Frank Schönheit, Software Engineer         [EMAIL PROTECTED] -
- Sun Microsystems                      http://www.sun.com/staroffice -
- OpenOffice.org Base                       http://dba.openoffice.org -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to