Personally, I do not like annotations to describe the stability of an API.

If it's public I can use it. The next release is binary and/or source
compatible, just document how to migrate. No one is forcing me to upgrade.
If I upgrade, I am using a new pile of code and I must deal with that.

Using ".internal" packages is an interesting way to go.

But I do like documentation of some kind for things like immutability and
thread-safety.

We've started going down the path of what I call "extreme versioning" when
we create new packages for new incompatible releases.

Right now, binary incompatible -> new package (I'm even going to include
Maven artifact ID noise here).

But what about a change in behavior that is not compatible? Should that not
lead to a new package?

Commons is a 'special' project because it includes so many components. It
would be nice if all components played by the same rules. Strictly
speaking, I think we are bound to do so.

Gary

On Mon, Dec 5, 2011 at 10:21 AM, Christian Grobmeier <grobme...@gmail.com>wrote:

> Henri,
>
> I would love to see this as a Commons recommendation on the Wiki.
> As Stefan mentioned, in Compress we have @experimental annons (I
> actually added them).
> I like the idea to make up a public, rarely to break interface api and
> some not so public sometimes to break implementation. Maybe we should
> even consider to create an interface jar and an implementation jar of
> different versions. On the other hand this makes things complex - but
> anyway....
>
> Cheers
> Christian
>
> On Sun, Dec 4, 2011 at 11:41 AM, henrib <hen...@apache.org> wrote:
> > Keeping track as it evolves based on feedback;
> >
> > Goal is to allow easy definition, usage and check of stable APIs.
> > An annotation and a package naming convention allow the project
> developer to
> > clearly state when a class/method/field is not part of the stable
> contract
> > despite a public/protected declaration but only of the internal part of
> the
> > project.
> >
> > @internal annotated class/method or *internal* package mean "use this at
> > your own maintenance cost"; those are not part of the "public" API. They
> can
> > be used and extended but are subject to change between versions without
> > @deprecated annotations.
> >
> > Those annotations and conventions should allow feeding a clirr report
> with
> > the proper information to allow detection of unintended API breakage and
> may
> > even allow creating IDE plugins to warn about usage.
> >
> > --
> > View this message in context:
> http://apache-commons.680414.n4.nabble.com/RELEASE-PROCESS-Stability-versus-usability-tp4150322p4156552.html
> > Sent from the Commons - Dev mailing list archive at Nabble.com.
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
> > For additional commands, e-mail: dev-h...@commons.apache.org
> >
>
>
>
> --
> http://www.grobmeier.de
> https://www.timeandbill.de
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
> For additional commands, e-mail: dev-h...@commons.apache.org
>
>


-- 
E-Mail: garydgreg...@gmail.com | ggreg...@apache.org
JUnit in Action, 2nd Ed: <http://goog_1249600977>http://bit.ly/ECvg0
Spring Batch in Action: <http://s.apache.org/HOq>http://bit.ly/bqpbCK
Blog: http://garygregory.wordpress.com
Home: http://garygregory.com/
Tweet! http://twitter.com/GaryGregory

Reply via email to