bundled-native-soname-conflict

Installation
SKILL.md

A bundled base library claims a system library name

Ship a native library with your app and you ship its whole dependency closure. If that closure contains a general-purpose base library the host desktop also has — a utility/collections library, a compression library, a crypto library — then the first copy loaded wins the shared-object name (on Linux, the soname recorded in the library's dynamic section) for the rest of the process. Your native loads early, so your copy wins.

Nothing fails at that moment. It fails later, in code that has nothing to do with your native: a platform API opens the system counterpart of that same family, the system copy needs a symbol the older bundled copy does not export, the load fails, and the platform marks the whole API unsupported for the remainder of the process.

Worked example (Linux): a bundled media library carried a utility library built on an older distribution. The JDK's desktop-integration API (java.awt.Desktop) probes its native backing on first use; on a host with a newer system copy of that family the probe died with an undefined-symbol message naming a third library in the same family. From then on the JDK reported the desktop API unsupported, and all external-link call sites broke at once.

Installs
2
GitHub Stars
35
First Seen
4 days ago
bundled-native-soname-conflict — maxrave-dev/kotlin-footguns