I think we absolutely need package based versioning for the APIs.
Especially for the shell command API as many people use it.
If we would have had it already for the switch from karaf 2 to 3 we
could have avoided changes in all other frameworks like cxf and camel
where we had to open the import range.
The semantic versioning tooling should help us do it correctly. I do not
have much experience with it but it is definately better than trying to
do this by hand.
I am not sure what rules should be in place for the relation between
package versions and the bundle versions but I think the bundle versions
are lesser important then.
Christian
Am 22.05.2014 16:01, schrieb Guillaume Nodet:
A recent contribution to the felix maven-bundle-plugin is that baseline
goal which checks and/or reports semantic versioning changes.
It basically does a binary diff with the latest release of the same
artifact for changes and verify that the changes are compatible with the
semantic versioning rules.
I think we should try to leverage those, but without changing our release
lifecycle. This could be done the following way:
* keep our artifacts versioning and release mechanism untouched
* add the baseline plugin
* in 4.0, exported packages would all have a version of 4.0.0
* follow semantic versioning for all releases > 4.0
This would mean that karaf 4.1 would have packages in version 4.0, 4.0.1 or
4.1. Note that the version used for karaf (and for bundles) isn't tied in
any way to the version of the packages.
But this would also help making sure we stay compatible, and whenever we do
a new release (be it 4.1 or 5.0), help users with migration because the
package versions would not be changed unless needed.
Downsides:
* users may be impacted in the future with the fact that not all packages
have the same version, but this should usually be minor, as tools usually
grab the version of the packages from the binary when writing an import
package. However, for those which do not leverage those features, this
will have an impact
* bug fix releases may be more tricky : the main problem is that with
semantic versioning, once a package is released with a minor upgrade,
there's no room left
The last point needs an explanation. Let's say we have a package in
version 4.0.0 in karaf 4. We later release karaf 4.1 with a very minor
addition to that package, so that this package is now in version 4.0.1. If
we later find a bug which require a fix, we won't be able to release a
karaf 4.0.1 with a micro change in that package, so we'd have to at least
backport the interface change from 4.1 in 4.0.1 (even if we don't backport
the implementation) and then do the fix with a 4.0.2 package version.
Not sure this is very clear, but the last point has always been my worry
about semantic versioning.
Thoughts ?
Guillaume
--
Christian Schneider
http://www.liquid-reality.de
Open Source Architect
Talend Application Integration Division http://www.talend.com