feat(compat): a farm answers for its own members, and reaches the host only through a named package - #380
Merged
Conversation
…t only through a named package The membership of these three farms is decided by a filename pattern, and their completeness -- where it was checked at all -- was decided against a different set: the libraries an ICD manifest names. The pattern exists because a proprietary driver dlopens members of its own family by name, which no DT_NEEDED walk can see; having said that, those members have to be treated as reachable everywhere else too, and they were not. The half of each farm the pattern exists for is the half nothing verified. Measured on a host with an NVIDIA driver, by mcpp's dlopen-surface check: compat.glx-runtime 52 members / 30 unmet closure edges (it had no closure pass at all), compat.vulkan-runtime 76 / 5, compat.opencl-runtime / 4 -- the last being the findings filed as #376, which names vulkan while the observed four came from opencl. THE REASON RECORDED AGAINST SEEDING FROM THE FARM MEASURED A DIFFERENT SET. It says the closure pulled 64 libraries with GTK among them; that holds for closing over every file the PATTERN matched, since `libnvidia*.so.*` also matches the driver's settings GUI. The farm is the pattern's matches MINUS never_farm_patterns, and closing over that adds five sonames here and no GTK, GLib, Pango or Cairo. Every soname a member needs now has a written answer and there is no silent branch: * the ecosystem publishes it -> declared in xpm.linux.deps and taken from the installed payload (xim:openssl, xim:mesa) * proprietary vendor user-space -> also a package: xim:nvidia-video-host-link owns "where is the host's libnvcuvid.so.1", the shape libcuda-host-link and nvidia-gl-host-link already have * neither, and it cannot become one -> named in UNSERVED with the reason (libcrypto.so.1.1: OpenSSL 1.1 is EOL upstream and only NVIDIA's PKCS#11 provider asks for it) * anything else -> a warning naming it at install time No branch harvests a new file from /usr/lib for a farmed member. compat.glx-runtime harvests none at all: all thirty come from installed payloads, four from xim:nvidia-gl-host-link and twenty-six from the stack xim:graphics pulls in. The criterion is asked the way mcpp asks it: a member's DT_NEEDED is read with `readelf -d` and membership is decided against this directory alone. `ldd` was wrong for it -- it answers "can this resolve HERE", and here includes the host's default directories, so a soname the host happens to carry read as resolved and was never recorded while the consumer, whose search path is the farm, could not load it. Measured: the libcrypto needs were invisible to that pass and were reported by mcpp one layer up from the same directory. Measured after, on the opencl farm: members 48, walked 47, missing 0, with libcrypto.so.1.1 the one remaining finding and correctly classified dangling. Four missing before. New version keys because install() output is baked into the installed payload: without one, a host that already holds the previous version keeps the open farm. compat.glfw, compat.opencl and compat.vulkan move their pins with it. Depends on openxlings/xim-pkgindex#801, which publishes the sentinel this declares.
This was referenced Sep 10, 2026
Merged
Sunrisepeak
added a commit
to mcpp-community/mcpp
that referenced
this pull request
Sep 10, 2026
…bers (#601) * fix(examples, record): follow the farms that answer for their own members `compat:vulkan-runtime` published a farm whose members needed four sonames nothing on the artifact's search path carried. The three examples that pin it moved to 2026.09.10, where the farm closes over its own members and reaches the host only through a named `*-host-link` package. Measured on this host, the vulkan example's own record before and after: members 55, walked 55, missing 4, dangling 0 members 60, walked 59, missing 0, dangling 1 The one remaining finding is `libcrypto.so.1.1`, and it is dangling rather than missing because the publishing package now says so: OpenSSL 1.1 is end-of-life upstream, the ecosystem publishes 3.x, and only NVIDIA's PKCS#11 provider asks for it. `libcrypto.so.3` comes from `xim:openssl` and `libnvcuvid.so.1` from `xim:nvidia-video-host-link`; no branch harvests a new file from /usr/lib. The example still runs on the device: `12 24 36 48` and `device: NVIDIA GeForce RTX 4080`. Section 7 of the design record no longer files those four findings as open. It records what repairing them found instead: the defect was in three farms rather than one, mcpplibs/mcpp-index#376 named the wrong one -- the four came from `compat:opencl-runtime` -- and the reason written against the fix had measured the set before the driver's settings GUI was excluded. Follows mcpplibs/mcpp-index#380 and openxlings/xim-pkgindex#801. * fix(examples): offscreen pins compat.vulkan 1.4.357.1 The example names `compat.vulkan-runtime` itself, under a cfg(linux) predicate, and compares that pin against the one recorded in its installed copy of `compat.vulkan`. 1.4.357.0 records 2026.09.07; 1.4.357.1 is the version whose install records 2026.09.10. See mcpplibs/mcpp-index#381. --------- Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #376 — and widens it: the same defect is in three farms, and the issue names the wrong one.
What is wrong
Membership in these farms is decided by a filename pattern. Completeness — where it was checked at all — was decided against a different set: the libraries an ICD manifest names.
The pattern exists because a proprietary driver dlopens members of its own family by name, which no
DT_NEEDEDwalk can see. Having said that, those members must be treated as reachable everywhere else too. They were not. The half of each farm the pattern exists for is the half nothing verified.Measured on a host with an NVIDIA driver, by mcpp's dlopen-surface check:
compat.glx-runtimecompat.vulkan-runtimecompat.opencl-runtime#376 is titled against
compat.vulkan-runtime; the four findings came fromcompat.opencl-runtime. Both carry the same members because both use the same vendor pattern.The reason recorded against the fix measured a different set
compat.vulkan-runtimesays closing over the farm pulled 64 libraries with GTK among them. That is true of closing over every file the pattern matched —libnvidia*.so.*also matches the driver's settings GUI. The farm is the pattern's matches minusnever_farm_patterns, and closing over that adds five sonames on this host and no GTK, GLib, Pango or Cairo.The conclusion had been re-checked; the reason had not.
The rule
Every soname a farmed member needs has a written answer, and there is no silent branch:
xpm.linux.deps, taken from the installed payload (xim:openssl,xim:mesa)xim:nvidia-video-host-linkowns the one question "where is the host'slibnvcuvid.so.1", the shapelibcuda-host-linkandnvidia-gl-host-linkalready haveUNSERVEDwith the reason (today:libcrypto.so.1.1— OpenSSL 1.1 is EOL upstream and only NVIDIA's PKCS#11 provider asks for it)No branch harvests a new file from
/usr/libfor a farmed member.compat.glx-runtimeharvests none at all: all thirty come from installed payloads — four fromxim:nvidia-gl-host-link, twenty-six from the stackxim:graphicspulls in.The criterion is asked the way mcpp asks it
A member's
DT_NEEDEDis read withreadelf -d, and membership is decided against this directory alone.lddwas wrong for this: it answers "can this resolve here", and here includes the host's default directories — so a soname the host happens to carry reads as resolved and is never recorded, while the consumer, whose search path is the farm and not the host, cannot load it. Measured: thelibcryptoneeds were invisible to that pass and were reported by mcpp one layer up, from the same directory.Measured after
OpenCL farm on this host:
members 48, walked 47, missing 0. The one remaining finding islibcrypto.so.1.1, correctly classified dangling — the case declared inUNSERVED. Fourmissingbefore.Ordering and upgrade
2026.09.10) on all three farms:install()output is baked into the installed payload, so without a new key a host that already holds the previous version keeps the open farm.compat.glfw,compat.openclandcompat.vulkanmove their pins with it.vulkan-runtime = "2026.09.07"and are re-pinned in a follow-up PR there, after this publishes.