For a long time, we've played a little fast and loose with our handling of provisional OSGi API. Starting with the OBR 1.6.0 and Gogo 0.6.0 releases, we've started to evolve a policy on how to handle this, but nothing has been decided concretely. This is problematic since it leads different people to different decisions. Thus, its about time we defined our policy on this.

So, what's the issue?

Provisional OSGi API is not official. Further, provisional package content is evolving and these changes are not always made readily available by the OSGi Alliance. Even though some of us are members of the OSGi Alliance, we are not necessarily at liberty to disclose changes to internal RFCs.

So, what can we do about it?

I see two potential [reasonable] policies from which we could choose:

  1. Always use the org.apache.felix package namespace for provisional
     OSGi API until the spec goes final.
  2. Use the org.osgi package namespace while the provisional API is in
     development, but only expose what has been publicly made available
     by the OSGi Alliance.

Both approaches have their drawbacks.

The benefit of (1) is that the legal/IP/etiquette issues and/or concerns are reduced to those associated with normal open source development. For completely new development, like Gogo, this would all happen in non-OSGi packages, while changes to existing packages would need to be done in subclasses in non-OSGi packages. One downside of (1) is that it will always result in a package name change at the end that will break existing clients. For this reason, such experimental packages should be exported with mandatory attributes to warn potential clients.

The benefit of (2) is that the package namespace is more consistent. The downside of (2) is that it is a IP/legal/etiquette gray area as to whether or not we can do official releases of subprojects containing provisional OSGi API. Even if we do not modify the API, it still is potentially confusing to our users who are getting an "official" release from us of a subproject containing these "unofficial" bytes. At a minimum we would also need to use deprecated tags and/or mandatory attributes to warn people. Even then, it still raises issues since we aren't at liberty to evolve the packages freely to include OSGi internal, non-public RFC updates, nor extensions for potential feedback into the RFC. In those cases, we would still need to resort to putting stuff in org.apache.felix packages and renaming later once the changes become public, which would also be problematic for clients. Also, you have to consider the case where the RFC is abandoned, in which case if we still find it useful, we'll be forced to change our package names.

From my point of view, approach (1) might not be awesome, but it results in a simpler process than (2). So, I'd recommend (1). If the majority prefers (2), then we can do that (although I think we'll have to run the decision by the board first).

Thoughts?

-> richard

Reply via email to