On Feb 8, 2013, at 11:18 AM, Vincent Massol <vincent(a)massol.net> wrote:
On Feb 7, 2013, at 5:52 PM, Vincent Massol <vincent(a)massol.net> wrote:
FWIW Guava is using a @Beta annotation:
http://code.google.com/p/guava-libraries/
Extract:
"
APIs marked with the @Beta annotation at the class or method level are subject to change.
They can be modified in any way, or even removed, in any major release. If your code is a
library itself (i.e. it is used on the CLASSPATH of users outside your own control), you
should not use beta APIs, unless you repackage them (e.g. using ProGuard). Here is a
current list of all the beta APIs.
Serialized forms of ALL objects are subject to change. Do not persist these and assume
they can be read by a future version of the library.
Deprecated non-beta APIs will be removed eighteen months after the release in which they
are first deprecated. You must fix your usages before this time. If you don't, any
manner of breakage might result (you are not guaranteed a compilation error).
"
Interestingly a user points out the issue I had with using an annotation, see the
comments in
http://code.google.com/p/guava-libraries/wiki/Release10:
Extract:
"
My understandig of @Beta is, that these are the higly unstable parts of guava, so I
don't want to use them (and I guess most developers don't want to because why
should anybody make his lives more difficult when moving to the next version).
But how do I do that? I don't want to look all the time at the source code when
programming to make sure I didn't use the beta parts. Code completion knows nothing
about @Beta (and it shouldn't!). Hence I have to remove all the beta parts. But why
should the user handle the repackaging thing when you can simple release two versions: a
beta / instable version and a stable / release version. Simple as that. Anybody can use
the version he likes.
Other OSS projects handle this much better. The same goes vor versioning, naming,
packaging, downloading, etc. E. g. I never had such fruitless discussions with Apache
software (and in case Apache commons collection ever releases a "generified"
version, I'll most certainly switch back to that).
"
Actually, reading further it seems only one user has an issue with the @Beta annotation
and others find it acceptable.
ok so here's the summary of the brainstorming so far:
* Proposal 1 (internal package):
- Vincent
- Marius
* Proposal 2 (experimental package)
- Caleb
* Proposal 3 (@Beta/@Experimental annotation)
- Thomas
- Edy
* Other proposal
- Denis (use 1) for small changes and only use RN to mark new module as experimental)
Note that with proposal 3 we also need to remember 2 things:
- we'll need to add CLIRR excludes but that can be done globally using the global
exclude so not too painful
- we'll need to detail how long is the @Beta annotation supposed to stay. If it stays
forever it's the same syndrome as never releasing a 1.0 version which doesn't help
because people will use it in production anyway if it's too long to be 1.0. So
proposal 3 needs to have a max timeframe. IMO a full cycle would be a good max time to
remain @Beta annotations. So if you add the @Beta in version N.P we have to remove it
before N+2.0 (in practice that's a max time of 1.5 years). We could also say N+1.P but
it's harder to remember since it means verifying at each release whereas N+1.P means
verifying only once.
Personally I'm ok to try option 3 since I'd like to make progress on this.
WDYT?