> As for why bnd makes this implementation choice, bear in mind that > import ranges are applied to packages, which in a pure and ideal world > would contain only interfaces and perhaps DTOs, but no implementation > code. What kind of "bugs" could we be talking about in such a package, > other than documentation? Of course the world is not always pure and > ideal which is why the default can be overridden.
But in the real world, every project imports "OSGi-fied" libraries, usually several, and they have bugs and (hopefully) fixes. So it is something to be considered. What good is a tool that works in an ideal world if you need something done in the real world. - Michael > > Neil > > > > On Tue, 18 Jun 2019 at 09:54, Michael Lipp via osgi-dev > <osgi-dev@mail.osgi.org <mailto:osgi-dev@mail.osgi.org>> wrote: > > >>> Considering this, lowering a lower bound of an Import-Package >>> statement when resolving should be acknowledged as a bug. >>> >> I beg to differ ... >> >> As said, you can set the consumer/provider policy to your desired >> strategy. >> > So having default settings in the tool that cause a behavior that > does not comply with the specification should not be considered a bug? > > - Michael > > >> >> Kind regards, >> >> Peter Kriens >> >>> On 18 Jun 2019, at 10:33, Michael Lipp <m...@mnl.de >>> <mailto:m...@mnl.de>> wrote: >>> >>> >>>> >>>> I expect there are two things at play. First, OSGi specifies >>>> things as you indicate. An import of [1.2.3.qualifier,2) must >>>> not select anything lower than 1.2.3.qualifier. Second, bnd >>>> does have heuristics that do drop the qualifier and micro part >>>> in calculating the import ranges from the exports on the class >>>> path. >>> >>> Thanks for the clarification, I think this explains things. >>> >>>> [...] >>>> >>>> Conclusion, the spec is perfect but the implementations apply >>>> heuristics and may have bugs. >>> >>> The specification says (or defines, if you like): "|micro| - A >>> change that does not affect the API, for example, a typo in a >>> comment or a bug fix in an implementation." It explicitly >>> invites the developer to indicate a bug fix by incrementing the >>> micro part. There's no hint or requirement that he should >>> increment the minor part to reflect a bug fix. I do not find >>> your statement "The definition of the micro version is that it >>> should not make a difference in runtime" to be supported by the >>> spec or the Semantic Versioning Whitepaper. Actually, this >>> interpretation would restrict the usage of the micro part to >>> documentation changes because every bug fix changes the runtime >>> behavior. This is, after all, what it is intended to do. >>> >>> Considering this, lowering a lower bound of an Import-Package >>> statement when resolving should be acknowledged as a bug. >>> >>> - Michael >>> >>> >>>> >>>> Kind regards, >>>> >>>> Peter Kriens >>>> >>>>> On 17 Jun 2019, at 12:14, Michael Lipp via osgi-dev >>>>> <osgi-dev@mail.osgi.org <mailto:osgi-dev@mail.osgi.org>> wrote: >>>>> >>>>> Hi, >>>>> >>>>> I have in my repository a bundle A-2.0.1 that exports packages >>>>> with >>>>> version 2.0.1 and a bundle A-2.0.3 that exports these packages >>>>> with >>>>> version 2.0.3. Version A-2.0.3 fixes a bug. >>>>> >>>>> I have a bundle B that imports the packages from A with import >>>>> statements "... version=[2.0.3,3)" because the bug fix is >>>>> crucial for >>>>> the proper working of B. >>>>> >>>>> Clicking on "Resolve" in bndtools, I get a resolution with bundle >>>>> A-2.0.1. I understand that this complies with the >>>>> specification ("It is >>>>> recommended to ignore the micro part of the version because >>>>> systems tend >>>>> to become very rigid if they require the latest bug fix to be >>>>> deployed >>>>> all the time."). >>>>> >>>>> What I don't understand is the rationale. I don't see any >>>>> drawbacks in >>>>> deploying the latest bug fix. Of course, there's always the >>>>> risk of >>>>> introducing a new bug with a new version, even if it is >>>>> supposed to only >>>>> fix a bug in the previous version. But if you're afraid of >>>>> this, you may >>>>> also not allow imports with version ranges such as "[1.0,2)" (for >>>>> consumers). >>>>> >>>>> In my case, I now have to distribute bundle B with a release >>>>> note to >>>>> configure the resolution in such a way that only A 2.0.3 and >>>>> up is used. >>>>> Something that you would expect to happen automatically >>>>> looking at the >>>>> import statement. And if I want to make sure that the release >>>>> note is >>>>> not overlooked, the only way seems to be to check the version >>>>> of "A" at >>>>> run-time in the activation of "B". This is downright ugly. >>>>> >>>>> - Michael >>>>> >>>>> >>>>> _______________________________________________ >>>>> OSGi Developer Mail List >>>>> osgi-dev@mail.osgi.org <mailto:osgi-dev@mail.osgi.org> >>>>> https://mail.osgi.org/mailman/listinfo/osgi-dev >>>> >>> >> > > _______________________________________________ > OSGi Developer Mail List > osgi-dev@mail.osgi.org <mailto:osgi-dev@mail.osgi.org> > https://mail.osgi.org/mailman/listinfo/osgi-dev >
_______________________________________________ OSGi Developer Mail List osgi-dev@mail.osgi.org https://mail.osgi.org/mailman/listinfo/osgi-dev