-
-
Notifications
You must be signed in to change notification settings - Fork 10
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
run_exports doesn't match ABI #62
Comments
Sigh. Sorry about this. We should just pin to minor versions. Hoping for major pin level compatibility is alot for nascent projects. So we should:
Truthfully, I don't really have the "time" to deal with this before april 20th, so your help if you can would be greatly appreciated. I would support:
Then we can take our time with the repodata patch. |
@conda-forge-admin please rerender |
Hi! This is the friendly automated conda-forge-webservice. I just wanted to let you know that I started rerendering the recipe in #63. |
#64 is one possibility for ABI pinning going forward, by tracking the ABI version (and making sure SONAME matches or it won't build) |
with the API / ABI changes, I'm not sure how far we have to mark things broken as... if you were built with 2.14.1, does it work with 2.13.2 or 2.14.2??? |
maybe we don't mark the packages as broken, but pin exact for anything built between: 2.14.0 and 2.14.3 2.14.4 can work with 2.14.x |
Ok, upstream developer here. For context, the origin of the change is this: Blosc/c-blosc2#581 . Would you like the Blosc developers to invalidate 2.14.4 and release 2.15.0 for this SONAME change better? We are sorry that we don't deeply understand the conventions for changing APIs in C libraries, so we are just following advices here and hoping for the best. Thanks for your patience. |
Thanks Francesc! I should have for sure read the release notes of 2.14.4 and it would have flagged this issue days ago.
There sadly aren't very strict conventions. Some take "minor bump" as the API change, some think "only in major". It is convenient when ABI bumps are synched predictaly with a version number for packagers, but many upstream developers don't really care.
I'm not really sure it matters so much for this release. The main thing I would ask (as a packager) is that future SONAME changes sync up with minor release bumps. @FrancescAlted my question to you:
|
why specifically 2.11? There are builds accepting up to 3.0 back to 2.0.1, I think. What should be done with those? |
Ok, so in this case, as the API change had effect back in 2.13.0, we should have bumped SOVERSION by then right? Ok, I have added a reminder to do that in the future.
I'm not sure what do you mean here. Are you suggesting to add SOVERSION bumps for every new version? Or only when ABI/API changes?
You mean that a future 2.15.0 should bump SOVERSION too (and so with every minor version, like 2.16.0 and so on)? If so, what's the rational behind it?
Yes, actually 2.14.4 should be compatible with all previous 2.14.x releases. For 2.14.4. we just were trying to acknowledge a previous API change in 2.13.0. |
Sorry, I mean "if you change the ABI", try to "synchronize it with" a minor bump, like 2.15 -> 2.16
Understood. I'll likely try to find a package that was built with it, and see what happens in the conda-forge context. |
Ah, that makes sense. Clarified in Blosc/c-blosc2@ce788ef
Sounds good. Thanks for your cooperation! |
@FrancescAlted part of the problem is that conda(-forge) makes an assumption that the ABI and the version number have a relationship. Since there is no hard and fast rule, I just "assumed" that it was related to the "major" number of the library. So it was my assumption that ultimately caused the problem. @minrk tried to "remove this assumption" in #64 but I think that it is too complicated and the version number is quite useful to communicate to downstream users and packagers that things "change". So many times, it is not necessary. Often the challenge is when the lines are blurred between application and library, such as with ffmpeg, where the SO number is for a developers, and a version is for a user of the cli or the GUI. |
SOVERSION should be increased when a package built against the previous version may not work with the new version (typically removed or renamed symbols, or a struct changing in size or layout). That's the goal of what SOVERSION is to communicate. If you are only adding symbols, SOVERSION doesn't need to change. This can be tricky for maintainers, because ABI changes and API changes don't always map 1:1, but for the most part:
If I understood Blosc/c-blosc2#581 correctly, that means that 2.13 should have bumped the SOVERSION, but this was delayed until 2.14.4. That would mean that the compatibility ranges are:
That is, these transition lines cause breakages when the compile-time version doesn't match runtime:
and ideally these two transitions (reported ABI and actual ABI) happen at the same time. https://abi-laboratory.pro is a handy tool (not sure if it's really maintained anymore) that scans libraries to determine when their ABI changes. It might be useful to check with a tool like that when preparing releases to make sure you know whether to bump SOVERSION. I'll try to update conda-forge/conda-forge-repodata-patches-feedstock#703 to reflect this |
Larger discussion in: conda-forge/c-blosc2-feedstock#62 (comment) TLDR: - Previous run export was to major version - SO changed in between 2.13 and 2.14 Patching will be made for previous builds in conda-forge/conda-forge-repodata-patches-feedstock#703
Thanks for the detailed information @minrk! I have added a link to this note to our release procedure. Hope to make it better next time! |
Do we have anything else to do now that the migration is complete: |
I don't think so, thanks @hmaarrfk! |
Solution to issue cannot be found in the documentation.
Issue
current installs of libadios are failing to find
libblosc2.2
. This is because libadios is linking tolibblosc2.2.dylib
(dependency: c-blosc2 >=2.11.2,<3.0a0), but c-blosc2 2.14 containslibblosc2.3.dylib
, which will not work with any package built against c-blosc2 < 2.14). I believe this will affect all packages that linked c-blosc2 prior to the 2.14 release.I'm not sure how best to indicate this ABI version, but it's probably worth including a pinning in run_exports that will work, and an assert in tests that
libblosc2.${ABI_VERSION}
is present.Apparently c-blosc has ABI breakages in minor versions.
Installed packages
Environment info
The text was updated successfully, but these errors were encountered: