void is an odd case; changing from void to non-void can be seen
generalizing not specializing; however, since a void value can't be used,
the set of SOM reasonable uses in older classes is empty.

A transform would be on the older, using, compiled classes, and is only
licensed  by source compatibility rules (though it doesn't have to care
about things like  checked exceptions being removed :)

Simon

On May 4, 2017 10:56 AM, "Matt Sicker" <boa...@gmail.com> wrote:

> Yeah, I was about to bring that up as well. Changing something from void
> to an object return type breaks binary compatibility, so you can't make an
> old void API into a fluent builder-style API without breaking the ABI. The
> difference between binary and source compatibility is rather fun to deal
> with, and that doesn't even delve into the API versus SPI contract of
> compatibility.
>
> On 4 May 2017 at 09:02, BJ Hargrave <hargr...@us.ibm.com> wrote:
>
>> This is not true from a binary compatibility point of view. See
>> https://docs.oracle.com/javase/specs/jls/se7/html/jls-13.html#jls-13.4.15.
>> Changing the return type is the equivalent of deleting the old method and
>> adding a new method. So it is in fact a binary incompatible change: A major
>> change (method delete).
>> --
>>
>> BJ Hargrave
>> Senior Technical Staff Member, IBM // office: +1 386 848 1781
>> <(386)%20848-1781>
>> OSGi Fellow and CTO of the OSGi Alliance // mobile: +1 386 848 3788
>> <(386)%20848-3788>
>> hargr...@us.ibm.com
>>
>>
>>
>> ----- Original message -----
>> From: Robert Munteanu <robert.munte...@gmail.com>
>> Sent by: osgi-dev-boun...@mail.osgi.org
>> To: OSGi Developer Mail List <osgi-dev@mail.osgi.org>
>> Cc:
>> Subject: Re: [osgi-dev] Different conceptual version numbers for
>> different forms of backwards compatibility?
>> Date: Thu, May 4, 2017 5:40 AM
>>
>> Hi Simon,
>>
>> On Wed, May 3, 2017 at 10:46 PM, Simon Spero <sesunc...@gmail.com> wrote:
>> > I'm trying to clarify some thoughts in my own mind about how different
>> kinds
>> > of backwards compatibility interact with different kinds of version
>> > numbering.
>> >
>> > There are at least two dimensions of backwards compatibility of
>> relevance:
>> > binary v. source, and provider v. consumer. Not all combinations are
>> > important  to OSGI , but there do to seem to be some situations where
>> > different use types suggest different potential version numbers (rather
>> than
>> > ranges).
>> >
>> > 1. Source compatible but binary incompatible changes.
>> > In Java, the most commonly discussed  changes of this kind are
>> specializing
>> > a method return types (e.g. Collection<String>  => List<String>). I
>> >
>> > Under standard Java linkage rules, this will cause the methods to have
>> > different signatures, making them incompatible, and requiring a major
>> > version change.
>>
>> Not to detract from your main point, but method return types are not
>> part of the method's signature in Java.
>>
>>   https://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.4.2
>>
>> Robert
>>
>> >
>> > Older source can be compiled against the newer library without changes,
>> > either to the source code, or a hypothetical range of return specialized
>> > (RS) versions ; if the source were changed to use the more specialized
>> > return type,  it would require the increasing the minimum RS  version
>> > number. Thus, only a minor RS bump is required.
>> >
>> > Where this becomes interesting is if an OSGI  framework is extended to
>> be
>> > able to rewrite calls from older bundles to use the newer method
>> signature
>> > (quasi-recompiling). That would allow the newer package to satisfy more
>> > constraints.
>> >
>> > 2. Provider vs. Consumer : default methods
>> >
>> > One of the primary use cases for default methods is to allow for new
>> methods
>> > to be added to interfaces without requiring changes to existing
>> providers.
>> > These might be convenience methods, be optional with reasonable
>> defaults, or
>> > be implementable using existing methods, with more performant
>> > implementations possible but not mandatory.
>> >
>> > Early experiments handling default methods in OSGI using micro versions
>> > showed that that  approach was not viable.
>> >
>> > A different approach might be to consider changes that only add default
>> > methods to be neutral to invisible to an implementation of the previous
>> > version of the class (excluding accidental signature clash).
>> >
>> > To packages calling the new methods there has been a minor increase;
>> > similarly for packages that implement one or more of the default
>> methods.
>> >
>> > It seems to me as if there is a separate conceptual version number is
>> > default aware, and  that need not have the minor bump required in the
>> > primary version number.
>> >
>> > [I'm getting ready to run analysis over a mostly complete set of all
>> bundles
>> > in the index on the ibiblio maven central mirror, which is mostly
>> complete
>> > through 11/2016, where a bundle is defined to be any artifact that had
>> a BSN
>> > in the manifest when processed by the nexus (now maven) indexer.  I may
>> > augment this set with output of any PAX wrap: URLs mentioned in Karaf
>> > feature files.
>> >
>> > Some of my primary hypotheses is that the majority of these bundles do
>> not
>> > follow semantic versioning rules, and that some, but not all, of the
>> set of
>> > importing bundleswill have detectable possible linkage errors (e.g a
>> > reference to a removed class or method).
>> >
>> > A secondary hypotheses is that applying recommended bndlib Baseline
>> > renumbering to all (non qualified?)  versions in a sequence, mapping
>> > external referencing import ranges to the appropriate rebased range will
>> > result in a non-trivial set of unsatisfiable dependencies.
>> >
>> > There are other hypotheses that I'm trying to refine; what I'm hoping to
>> > find are indica that can be used to predict  more reliable import
>> ranges for
>> > given maven artifact sequences, and to identify opportunities for safely
>> > relaxing constraints.]
>> >
>> > Simon
>> >
>> >
>> >
>> >
>> >
>> > _______________________________________________
>> > OSGi Developer Mail List
>> > osgi-dev@mail.osgi.org
>> > https://mail.osgi.org/mailman/listinfo/osgi-dev
>>
>>
>>
>> --
>> http://robert.muntea.nu/
>> _______________________________________________
>> OSGi Developer Mail List
>> osgi-dev@mail.osgi.org
>> https://mail.osgi.org/mailman/listinfo/osgi-dev
>>
>>
>>
>>
>>
>> _______________________________________________
>> OSGi Developer Mail List
>> osgi-dev@mail.osgi.org
>> https://mail.osgi.org/mailman/listinfo/osgi-dev
>>
>
>
>
> --
> Matt Sicker <boa...@gmail.com>
>
> _______________________________________________
> OSGi Developer Mail List
> osgi-dev@mail.osgi.org
> https://mail.osgi.org/mailman/listinfo/osgi-dev
>
_______________________________________________
OSGi Developer Mail List
osgi-dev@mail.osgi.org
https://mail.osgi.org/mailman/listinfo/osgi-dev

Reply via email to