The main goal of this investigation is to organize shared data and code across multiple binary files. This is especially important for something like a base layer that will be used in a program that supports hot-reloading or plugins. Each isolated example in this repository explores a way to set up the base layer, plugin, and main program. The examples: *_concrete - Concrete examples for each operating system I have investigated showing how to setup and use various types of dynamic linking. In these the "base" layer goes through load-time linking, the "plugin" layer goes through run-time linking, and the "main" layer acts as the executable that must bind it all together. xlist - My prefered solution to the problem posed in the investigation which relies only on run-time linking. It uses an xlist to manage the maintenance burden of run-time linking, and a basic outline of the abstracted form of each layer.