On 05/03/2012 03:47 AM, Vincent Massol wrote:
> Hi devs,
> 
> We have recently voted a rule where we said that we will do the following:
> * Always deprecate APIs
> * Always move them to Legacy modules
> * And when there's a technical issue to moving stuff to the Legacy module, 
> only then, send a VOTE to remove an API
> (see http://markmail.org/message/tino4ngttflc5i3s).
> 
> This means that from now on (starting on 26th of April 2012)  we're not 
> allowed to put excludes in CLIRR.
> 
> However I've seen that we have added some CLIRR excludes after the vote was 
> passed.
> 
> I believe that the main issue we have is for "young" APIs that are not 
> considered stable.
> 
> Proposal 1: Internal package
> =========
> 
> * Young APIs must be located in the "internal" package till they become 
> stable. I propose "internal" to reuse an existing package that we filter when 
> testing for CLIRR. "internal" means that users should not use this API 
> because it's considered unstable and can change at any time.
> * When a Young API is considered stable enough and we want to open it to 
> public consumption then we move it from "internal" to its target package 
> (that's easy to with IDEs). From that point forward any changes to them goes 
> through  the standard mechanism of deprecation/legacy.
> * If we want to add a new method to an existing public API then this should 
> not be considered a "young" API. It's just an addition to an existing API and 
> thus goes directly to the deprecation/legacy cycle.
> * We need to be careful to isolate "young" APIs from public API so that users 
> don't inadvertently use "young" unstable APIs by mistake. If not possible 
> then directly go through the deprecation/legacy cycle. 
> 
> The advantage of this proposal is that it doesn't change our current 
> practices and is very easy to verify through CLIRR.
> 
> Proposal 2: Experimental package
> =========
> 
> Another possibility I can think of is to introduce a new "experimental" 
> package instead of reusing the "internal" one. It has the advantage of being 
> able to follow "young" APIs and ensure they don't stay in that state 
> indefinitely, while still allowing the user who uses it to notice it's 
> experimental.

I like this. I have a number of APIs in /internal/ because they just haven't 
been through their write,use,feedback,refactor cycles.
I think there should be a little bit of leniency on application of the rules 
since there are clear cases where what is technically API is almost certainly 
not used by anyone (Usually these are things which were should have been placed 
in /internal/ but were places in the main space by mistake.)
In these cases, it seems that a regular proposal on the list would be fair.

Caleb

> 
> Proposal 3: Experimental Annotation
> =========
> 
> Another idea is to just use an @Experimental javadoc tag  for experimental 
> code. It has the advantage of using the target package but it has drawbacks:
> * It's impossible for users to notice that they're using Experimental APIs 
> since when they import a class they won't see anything that'll tell them 
> they're using a "young" API
> * It's almost impossible to tell CLIRR to exclude those APIs from its checks. 
> The only way to do this is to modify the source code of the CLIRR plugin 
> AFAIK. Thus we would need to exclude those manually using CLIRR excludes and 
> thus before we release we would need to go over the full list of CLIRR 
> excludes to ensure the excludes listed are only for "young" APIs marked 
> "experimental".
> 
> Note that I mentioned javadoc tag and not annotation because I believe we 
> need to add information about when the Experimental API was first introduced 
> so that we eventually move it as a proper API by removing the Experimental 
> tag. Maybe we would need a rule such as: keep that tag for less or equal to 3 
> full minor releases (i.e. 6 months).
> 
> WDYT? Any other idea?
> 
> Thanks
> -Vincent
> 
> _______________________________________________
> devs mailing list
> [email protected]
> http://lists.xwiki.org/mailman/listinfo/devs
> 

_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs

Reply via email to