> Are we extending this to all interfaces? Do we support folks implementing 
> their own Connection? Admin?

 This will bury us in weeds and bikeshedding. We can make a blanket rule about 
source compatibility appropriately scoped to minors and/or patches without that 
drama. To wit:

> So when I read the existing guides, what I see is that we're supposed to be 
> _source_ compatible on minor and patch releases, but binary compatible only 
> on patch

We should take the opportunity to clarify the language of the compatibility 
guide. And if the above is the policy then the change to Table is not allowed. 


> On Aug 15, 2016, at 8:26 PM, Sean Busbey <bus...@apache.org> wrote:
> 
> Thanks for bringing this up Josh!
> 
> 
> 
> On Mon, Aug 15, 2016 at 2:21 PM, Andrew Purtell <apurt...@apache.org> wrote:
> 
>> ​
>> I find the InterfaceAudience annotations on this really strange. How can
>> we have a Public audience Interface (o.a.h.h.c.Table) with Private methods?
>> 
>> I'm also not sure the Private annotations on the Table interface are that
>> useful. Any change to an interface renders it source incompatible, and
>> removal (or effective removal via signature change) of methods from an
>> interface introduces a binary incompatibility. I think the Private
>> annotations on methods of a Public interface imply we should refactor those
>> methods to a non-public interface.
>> 
> 
> 
> Generally, we use more restricted audience annotations on members within a
> given API to show where there are limits on our support that we can't
> express in Java access modifiers. I think it's important for us to keep
> this around so that we can avoid a proliferation of "FooUtil" and other
> classes that exist just to make a Public/Private distinction. (I recognize
> we have several of these but I was hoping we'd move in the direction of
> fewer over time.)
> 
> I agree that in the case of interfaces it's problematic, since we have no
> way to distinguish between "should be consumed" and "can be extended".
> Perhaps we should make sure we have abstract classes instead of interfaces?
> We could also add an annotation to make the consumed/extended distinction;
> I've seen it come up a few times in other users of audience annotations.
> 
> 
> 
>> ​
>> Now that we've had quite a few releases in the "not-quite-SemVer"
>> compatibility guide, is there any interest in trying to make the
>> compatibility guarantees more stringent?
>> 
>> I was looking at our compat guidelines (
>> http://hbase.apache.org/book.html#hbase.versioning) and think we could
>> make
>> a few refinements.
>> 
>> We make several allowances for public interface changes that are binary
>> compatible but not source compatible in patch releases. I think we are only
>> taking into consideration callers but should also consider implementors of
>> public interfaces. Changing a public interface on a patch release renders
>> it source incompatible. Can we avoid doing that on *patch* releases, and
>> restrict this type of change to minors?
> Are we extending this to all interfaces? Do we support folks implementing
> their own Connection? Admin?
> 
> 
>> Although we make allowances for public interface changes that are binary
>> compatible we also say "A minor upgrade requires no application/client code
>> modification." which could imply source compatibility even across minors,
>> which I believe is not the intent.
>> 
>> We could add a source compatibility dimension for patch releases.
>> 
>> 
>> ​
>> I would like to see us get to source-compatibility on patch releases, not
>> just binary compatibility
>> 
>> You mean source compatibility for Public annotated interfaces only, right?
>> 
>> In that case evaluating compliance would be easy: RMs would run the API
>> compat checker on a RC and if a patch release the number of binary and
>> source compat issues should both be zero.
> So when I read the existing guides, what I see is that we're supposed to be
> _source_ compatible on minor and patch releases, but binary compatible only
> on patch releases. I think we discussed this a year or two ago, and IIRC
> the reasoning was that since we maintain wire compatibility on minor and
> patch releases, those who need to ignore a given set of binary incompatible
> changes can just make use of the older library.

Reply via email to