Intro

Dynamic library linking is the technical topic about how executable binaries find their shared libraries.

(In linux, this has to do with *.so files and ELF headers; on mac, it’s *.dylib files; on windows, it’s *.dll files.)

This is something we’d frankly rather not have to have strong opinions about — but it’s a necessary problem to solve, and some solutions are drastically better than others. So, if you’re building and packaging some software, please do read on.

Goal

We want to populate the Warpsys ecosystem with things that are:

See the following video for an overview of the problem, the definition, and also the solutions:

Path-agnostic binaries, co-installable libraries, and How To Have Nice Things

We also want these properties to be obtained as simply as possible, with as few moving parts as possible: that means we want things that work without post-install hooks; without requiring mounts; without requiring… anything that we can get away without!

What we do in the Warpsys ecosystem

We’ve developed a particular approach to dynamic linking which satisfies path-agnosticism, and is simultaneously capable of sharing library objects, and doing so in a co-installable way.

The technique still uses dynamic linking (so it’s not “weird”); it almost never requires patching upstream projects in order to work(!); it works flawlessly even on read-only filesystems and needs no post-install hooks; and it has good performance and makes almost no demands of the host system. In short: it’s quite good.

The technicals get a bit complex, so we have a whole page for the detailed approach:

Warpsys Dynamic Library Linking Strategy