[Dev] HISTORY.txt

Heikki Toivonen heikki at osafoundation.org
Tue Nov 9 19:11:23 PST 2004


Ted Leung wrote:
> We are going to have API's that developers will use.  When those API's 
> change, we need to document that.  Changes that will break external 
> parcels between milestones are the changes that I think we should be 

I don't think a changelog is the best way for this. And we don't yet 
have real external parcels. Also, I am not sure how much effort we 
should put into informing people of changes to APIs that we haven't 
finalized yet. (I think the way we have been doing so far is ok - 
whenever Andi changes an API he sends out a note to dev, for example.) 
And once we finalize something, it shouldn't change except under very, 
very exceptional situations.

I think we should strive towards the goal of a set of public APIs that 
we promise will always work, barring those very, very exceptional 
situations.

Except for the repository, I don't think we have any parts of Chandler 
even close to finalized form. And even with the repository, I wouldn't 
feel comfortable thinking about frozen interfaces until after 6 months 
from now.

So how do we get to those APIs? The way Mozilla does this (I don't yet 
have an opinion on how closely we should match the Mozilla model on 
this) is by having having an API review to freeze public APIs that will 
never change. To freeze an API in Mozilla would require something like this:

* There must be a need for this public frozen API (for example plugins)
* The API must have been in use for a reasonable period of time 
(otherwise, you won't have enough experience using it to know what the 
final form should be like)
* The API must go through an API review
* The API review effectively notifies people that the API is under 
consideration to be frozen, and asks people for comments. The API may be 
changed based on that feedback. The API will be formatted to frozen API 
guidelines (if it isn't already), for example it must be written in IDL, 
every interface, method, parameter and return value documented, and the 
indicator that the interface is frozen will be prominently displayed). 
The API may remain in proposed frozen form for months before it is 
actually frozen. It resembles a standards process.

Mozilla explicitly says that any non-frozen interface can and will 
change without notice, and people should not be using them unless they 
are willing to go through the pain of changing their applications when 
the APIs change.

On the other hand, frozen APIs are very seriously frozen. I have only 
vague memory of one frozen interface being changed (although there quite 
likely have been more). If an interface is later found out to be broken, 
a lot of effort goes into maintaining it even when a new API will be 
created (nsIFoo, nsIFooExtended, ...)


Now, we don't have IDL, and Python gives a little more flexibility 
compared to Mozilla's situation.

What is the best way to do interfaces in Python? Should we go towards 
the model that Twisted uses, with clear interfaces (check out 
twisted.internet.interfaces)? Or will we freeze modules/classes that 
contain implementations?


So to summarize my view:

* Get rid of HISTORY.txt
* Maintain current practice of sending email to dev when commonly used 
APIs change
* Start thinking about how we will finalize public APIs, but don't 
actually start finalizing until much later

-- 
   Heikki Toivonen

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 249 bytes
Desc: OpenPGP digital signature
Url : http://lists.osafoundation.org/pipermail/dev/attachments/20041109/edd521ca/signature.bin


More information about the Dev mailing list