Hi Stefan,

I'll do my best to answer from my heavy OSGi user's point of view -
but as mentioned I know little about the specifics of Compress.

On Mon, Jun 12, 2017 at 4:39 PM, Stefan Bodewig <bode...@apache.org> wrote:
> ...Say we started versioning packages with 1.15 and all untouched APIs stay
> at 1.14. We update package versions whenever there is an API change. We
> go ahead and fix a problem with an implementation detail in - say - "ar"
> in 1.19 but there is no API change. Would we modify the package version?...

No, in the OSGi world the Java package versions are completely
independent of the version of the bundle that provides them.

You can actually have several bundles providing the same package, and
the OSGi framework will do the right thing and wire the most recent
version only, unless dependencies specify something different. I
digress and that's kind of an edge case but that helps explain the
concept I think: each exported package (others ones are invisible in
an OSGi system outside of their own bundle) has its own version cycle,
independent from anything else.

So in practical terms you define the version number of the bundle as
usual, driven by your perception of how much it changes, and it's the
package version numbers that are actually important in an OSGi system.

>
> ...What if we change the implementation in "util", not in "ar", what is
> going to happen to the version in "ar"? What will the bundle plugin tell
> us?..

if util is exported and changes require a version number increase then
you do that.

And if ar has not changed its version number stays the same.

And if a package is not exported it doesn't have an OSGi version
number, its changes only affect the implementation but not the wiring
with its clients.

>
> ...Would this mean we'd need to start using bugfix version numbers for
> packages where the implementaion changes but the API doesn't? I.e. "ar"
> in Compress 1.19 would have version 1.14 (no API changes) or 1.14.5
> (five implementation changes since 1.14)?...

Yes that's totally possible as the package has its own version numbering cycle.

>
> ...How would we tell our users to upgrade to version 1.19 in order to use a
> bug fix that has been applied if this is the version of the library as a
> whole and not the version of a package?...

If an non-exported implementation package includes changes then you
can tell your users to upgrade that bundle to include those fixes but
at the OSGi level those changes are invisible as the OSGi framework
only sees exported packages.

That's an implementation upgrade then, but if exported packages have
not changed you can guarantee that the system will startup without
requiring any other upgrades, that's the beauty of OSGi.

And if the version of an exported package changes, it will cascade
into the whole system and force you to upgrade bundles that depend on
it (based on their importing version range), which guarantees that if
your system starts it has all the right versions.

HTH,
-Bertrand

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
For additional commands, e-mail: dev-h...@commons.apache.org

Reply via email to