Hi Martin,

The sources you have mentioned also say:
[2] After the API freeze, there is really no such thing as "provisional 
API". Either it is complete and committed platform API, or it is internal 
code.
Moreover it reads:
[2] Technically, a provisional API can change arbitrarily or be removed at 
any time without notice.
I believe that this document indicates that there is strong "API"-"
Internal" division after the release (and maybe this is only my 
interpretation).

In the [4] I have found interesting table:


Specification
Test Suite
Implementation
Clients
Support Promise
Package
Platform API
yes
yes
yes
yes
yes
public
Provisional
yes
yes
yes
yes
not quite
public

The table is bigger of course, but only those two cases are important for 
us. Note the public package in the provisional API. It is contradictory to 
the [2] unless provisional API becomes API after every release.

I am happy to see that someone is already using provisional API 
independent from release cycle, even happier that The TPTP project uses 
Provisional APIs for all new API introductions: the new API is released as 
provisional in release X and then hardened into platform APIs in release 
X+1. (4)

Maybe it would be good to ask TPTP team how this approach works in real 
environment?

What I'd expect from Eclipse is to adopt  slightly modified TPTP strategy 
- harden provisional API when it has not changed for one development 
cycle. Provisional API should be in public packages and has clear javadoc 
that would:
* warn the user that the API *may* change.
* encourage the user to register to particular mailing list/watch some 
wiki pages

On the other hand we could think about support from API tools, that would 
throw warnings/errors when the client access provisional API, and about 
completely new tool that would ask the user to register on mailing list, 
display messages from developer etc.

[4] http://wiki.eclipse.org/Eclipse_Quality

Example:
Commiter A creates:
package org.eclipse.component;
/**
 * This is provisional API. It is believed to be stable, but still may 
change. For your own good subscribe to the list component-dev-provisional 
to be notified about changes.
 * @provisional
 * @since 3.5
 */
public interface IInterface{
        public void method1();
        public void method2();
}

Now some client implements that interface. It is warned (by API tools) and 
prompted to register to the newsgroup.  During the development cycle we 
may ask clients if they got what they expected and if we can do anything 
better.

Eclipse 3.5 is released. A lot of people uses that interface, and it 
appears that third method is necessary. So the commiter adds method3(), 
posts to concrete mailing list and all customers are informed about 
compatibility breaking change. Also steps necessary to adapt new method 
are described (and in the future maybe some more advanced refactoring 
scripts).

Eclipse 3.6 is released with that change, than 3.7 without change, so the 
@provisional tag should be deleted and... no refactoring at that point 
:-).

I hope that my vision is easier to understand now :-).


--
Christopher Daniel 
Technical Support Engineer
Eclipse Support Center 
IBM Software Group 



From:
"Oberhuber, Martin" <[EMAIL PROTECTED]>
To:
"E4 developer list" <[email protected]>
Date:
2008-10-20 17:43
Subject:
RE: [eclipse-incubator-e4-dev] Re: Avoiding Bloat



Hi Krzysztof,
 
I'm afraid that I don't understand what you want to say.
 
The concept of provisional API in Eclipse exists today. We have 
provisional
API in releases -- For Debugging, for instance, some provisional API to
support better customization of views has been committed in Eclipse 3.2
and is still provisional as of today. See slide 4 of the EclipseCon 2008 
DD 
presentation [1] for reference. There are even clients of the provisional
API, but it'll be promoted to official finalized API only once everybody
agrees that it's the right way to go.
 
The point to be clear about is, that provisional API will always live
in "internal" packages [2]. Once the API promotes to public, existing
clients of the provisional API need to be refactored to the new (non-
internal) namespace. This need for refactoring might be one of the 
reasons why some clients are reluctant to adopt provisional API.
Perhaps we'll need to better educate clients here, that this kind of
simple rename refactoring doesn't really hurt that much. The only
thing that it truly requires, is that clients which adopt provisional API
need to be developed along with upcoming Eclipse releases: When 
a release makes the API public, the client needs to be updated at
the same time as Eclipse in order to support it.
 
Note that as per the Eclipse Guidelines, all packages need to be
exported [3], internal or not, so everybody can adopt them. This 
seems to be exactly what you are requesting?
 
I agree that we need more feedback on API while it is still provisional,
do you have any ideas for better soliciting such feedback?
 
[1] EclipseCon 2008 Device Debugging (DD) Update
     http://www.eclipsecon.org/2008/index.php?page=sub/&id=45
     
http://www.eclipsecon.org/2008/sub/attachments/Device_Debugging_Project_Update.pdf
 
[2] http://wiki.eclipse.org/Provisional_API_Guidelines
 
[3] http://wiki.eclipse.org/Export-Package
 
Cheers,
--
Martin Oberhuber, Senior Member of Technical Staff, Wind River
Target Management Project Lead, DSDP PMC Member
http://www.eclipse.org/dsdp/tm
 
 

From: [EMAIL PROTECTED] [
mailto:[EMAIL PROTECTED] On Behalf Of 
Krzysztof Daniel
Sent: Friday, October 17, 2008 4:10 PM
To: [email protected]
Subject: [eclipse-incubator-e4-dev] Re: Avoiding Bloat


As it was said before there is a huge conflict of interests between 
developers & adopters. 

It is a common guideline, almost requirement, to create new API only where 
there is at least one consumer. And this is a big problem. A consumer does 
not have to be an expert in particular area. His requirement may be just a 
part of bigger functionality, or some not-necessary-adequate point of 
view. More over, he probably tries to solve his problem, and does not care 
about quality of Eclipse solution (because commiters do it). So, commiters 
analyze, code, test, analyze again, discuss, create some more code, and... 


...API is finished when there is no more time (This is a lesson learned 
from API workshop on last EclipseCon). 

What happens next? New adopters arrive. Adopters of stable releases, which 
are believed to be well designed and stable (and they are indeed in most 
cases). The real, big feedback appears, and API evolves, but due to strict 
rules it is necessary to maintain binary & contract compatibility. 

I believe this is a problem - that the true feedback & adoption occurs 
after the API is frozen. 

Yes, I agree with some previous posts: we certainly need API evolution 
approach in longer than release cycle and more feedback about provisional 
API. 

I think it would be good to allow provisional API in Eclipse releases and 
make it stable if the changes during new cycle are small enough.  Of 
course this solution has certain disadvantages - some code will be 
unstable despite it is public. At this point we could encourage/force 
adopters to give us feedback, 
It is for their good - the more feedback they give the more chances some 
functionality will graduate to API. 

We could thing also about automatic refactoring scripts or some 
refactoring tools that would support upgrading to next release. Or just 
point to critical places in the code and indicate what should be done. 

--
Christopher Daniel 
Technical Support Engineer
Eclipse Support Center 
IBM Software Group       _______________________________________________
eclipse-incubator-e4-dev mailing list
[email protected]
https://dev.eclipse.org/mailman/listinfo/eclipse-incubator-e4-dev


_______________________________________________
eclipse-incubator-e4-dev mailing list
[email protected]
https://dev.eclipse.org/mailman/listinfo/eclipse-incubator-e4-dev

Reply via email to