This is not true from a binary compatibility point of view. See 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
OSGi Fellow and CTO of the OSGi Alliance // mobile: +1 386 848 3788
----- Original message -----
From: Robert Munteanu <>
Sent by:
To: OSGi Developer Mail List <>
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 <> 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.


> 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 Developer Mail List


OSGi Developer Mail List

Reply via email to