I'm working my way through post-release and post-vacation email, so this thread has been cold for a while. But for what it's worth:

Thanks for the followup.

My issues with packaging open source libraries follow from the following:

1) From a legal perspective we do not want to touch the open source library at all, even to "simply" add OSGi framework headers. Thus we package the library in a directory-based plugin (not a JAR plugin with a nested JAR) with the metadata in that directory structure. Now, I'm not a lawyer, and I can't really comment much more on the legal issues, but in general we can wrap but we can't change the dependency.

2) We predominantly use Require-Bundle for our dependencies. For better or worse, we want this level of control over what component/ version is supplying the dependency. Yes this can be done with filters on the import- and export- packages, but the require bundles seemed to fit our needs. We typically write the dependency with a range qualifier of [x.0.0,x+1.0.0) assuming that changes in the major version mark possible breaks in backwards compatibility.

3) Since we have to live with the consequences, we determine compatibility against our uses of the libraries. We're on the hook if something goes wrong ;-)

Now, as these libraries become available with accurate OSGi metadata, we can determine how to best use them (or not) for our use cases.

/djk

Message: 1
Date: Fri, 17 Nov 2006 21:26:09 -0500
From: Jeff McAffer <[EMAIL PROTECTED]>
Subject: Re: [osgi-dev] [equinox-dev] Packaging opensource libraries
        as      osgi    bundles
To: OSGi Developer Mail List <[email protected]>
Message-ID:
<OF2DA89347.EBB4E741-ON8525722A.000C44DF-8525722A. [EMAIL PROTECTED]>
Content-Type: text/plain; charset="us-ascii"

There are alot of tradeoffs here.

Some of the challenges with picking your own version numbers
- How do you now about compatibility?  Who does that analysis?
- Confusion for consumers
- Ultimately in true OSGi form, the version numbers that matter are the
package version numbers.  You could use this point to drive either
argument but more generally it diminishes the significance of the bundle version number choice. Leaving, IMHO, the best choice to be the simplest
(i.e., use the originator's version)

If by wrapping the third party lib you mean nesting JARs, this does indeed
work but has a few drawbacks
- it doubles the disk footprint of the bundle since the nested JARs will
eventually be extracted
- you cannot easily/directly use such bundles as development targets since
Java compilers and build systems cannot see inside nested JARs.

In Eclipse Orbit (http://eclipse.org/orbit) we have choosen to "inject" the metadata directly into the original JARs (where possible) and use the originator's version numbers. Also, the bundle symbolic name is derived
from the originator's package naming.  The Orbit Wiki has some doc on
this.

For a more general discussion of bundling random libraries, see the first part of Chapter 20 in the Eclipse RCP book (http:// eclipsercp.org). A PDF
version is available at
http://www.eclipse.org/orbit/documents/RCP_Chapter20.pdf

Jeff




David Kemper <[EMAIL PROTECTED]>
Sent by: [EMAIL PROTECTED]
11/13/2006 11:58 AM
Please respond to
OSGi Developer Mail List <[email protected]>


To
<[email protected]>
cc

Subject
Re: [osgi-dev] [equinox-dev] Packaging opensource libraries as osgi
bundles






If you are going to be packaging open source libraries as OSGi
bundles, please be very careful about versioning.

The semantics of versioned dependencies (e.g. in Require-Bundle
constraints) in OSGi imply specific compatibility requirements.

Open source is open source, and some libraries may have versioning
that doesn't necessarily adhere to the guidelines.  For example an
open source library may slip a change into a minor release that
breaks backward compatibility, and which may thus unintentionally
violate existing dependencies expressed as ranges (e.g. "bundle-
version="[1.0.0,2.0.0)").

We have found that it is useful to wrap the existing third-party
library archive(s) in our own metadata wrapper so that we may do our
own versioning that guarantees such backwards-compatibility
constraints.  These synthesized versions typically track the
underlying library version, but give us the ability to adjust it if
we find incompatible changes.

This may or may not be applicable to your use cases, but I thought it
worth mentioning.

/djk
_______________________________________________
OSGi Developer Mail List
[email protected]
http://www2.osgi.org/mailman/listinfo/osgi-dev

Reply via email to