On 2026-01-15 5:28 AM, VĂ­t Ondruch wrote:

Dne 14. 01. 26 v 18:18 Gordon Messmer napsal(a):
I expect that it would be possible to automate running gensymbols, and sending a PR to include the results in the dist-git repo, but that's still something that happens after a build, which the developer needs to approve and maintain. And since that data is needed when building packages that depend on the libraries, it should be in the devel package, which means that when it updates, the package should be built a second time to include the updated symbols file.


Sorry for my ignorance. Probably due to my limited knowledge, I still fail to understand why this needed to be done in two steps? Why the symbols can't be gathered during the build, once we have the .so file available?


Debian's approach requires a symbols file in the dist-git repo. It would be bundled into the src.rpm. It's part of the input to the build.

"Can't" is probably too strong a word. You could use a known symbol map and just add any new symbols to a generated symbol map that is included in the -devel package. But if you do, then its contents aren't deterministic. The version that's associated with those symbols will be the package version, so it'll increment on every build. And that's ... fine, actually, as long as you accept that the install-time dependency expressions that result from a build root containing that package will also increment until someone commits that file back into dist-git.


Yes, but that's where it *should* be done. "Upstream first" is a core value. I don't think "it would require collaboration with upstream" should be a reason not to do something.

If I was upstream, you'd probably have hard time talking to me due to my ignorance 😇


If Fedora, as a project, agrees on the position that the status quo is unreliable and we would like broader deployment of versioned symbols, I am happy to write an explanation of the why and the how.

I will not be the first person to write about how. Debian's man page links to three separate papers that Ulrich Drepper wrote about versioned symbols. But those papers are very heavy on the technical implementation, with some discussion of "why?" when developers want to change behavior without renaming a symbol, and none of dependency expressions.

https://manpages.debian.org/trixie/dpkg-dev/dpkg-gensymbols.1.en.html


The 500MB abidb file is basically just a list of symbols that appear in shared libraries that don't use versioned symbols. For dependency resolution, you'd have to include versioned symbols as well (or else a library could not add symbol versions later, and I think we want them to do that!). That version of the DB would be closer to 1.3GB. And that's just the symbols provided. Once we add the list of symbols required, that metadata would be much much larger. All of that data would have to exist in the yum metadata, and in addition to an explosion in storage and data transfer, it would make dependency resolution much slower during dnf install/update operations.


So why don't have combination? E.g. symbols of first encountered appearance of `libexpat.so.1()(64bit)` stored in something external to RPM/DNF metadata and keeping just the additions directly in the RPM?


SemVer principals apply to dependency expressions the same way they apply to the implementation.

Adding something to the set is backward compatible, but removing something from the set is not. So you could specify a minimum version and symbol additions, but only if you can track those symbols in a way that they will be added to every future build of a library. (Because if it doesn't, then the new build doesn't satisfy a requirement that other packages express.)

And in the case of the abidb proposal, where each symbol is listed with the first package version where it was seen, there's no advantage over merely specifying that package version as the minimum version.


--
_______________________________________________
devel mailing list -- [email protected]
To unsubscribe send an email to [email protected]
Fedora Code of Conduct: 
https://docs.fedoraproject.org/en-US/project/code-of-conduct/
List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines
List Archives: 
https://lists.fedoraproject.org/archives/list/[email protected]
Do not reply to spam, report it: 
https://pagure.io/fedora-infrastructure/new_issue

Reply via email to