DLL Hell

Static linking has many advantages over dynamic linking. It is simple to understand, implement, and use. It ensures that an executable is self-contained and does not require a particular set of libraries during execution. As a consequence, the executable image that was tested by the developer is exactly the same as gets executed by the user, diminishing the risk that the user's environment will affect correct behavior.

The major disadvantages of static linking are increases in the memory required to run an executable, network bandwidth to transfer it, and disk space to store it.

Efficient Static Linking

The Slinky system uses digest-based sharing to combine the simplicity of static linking with the space savings of dynamic linking: Slinky executables are completely self-contained, although minimal performance and disk-space penalties are incurred if two executables use the same library.

Our Slinky prototype consists of tools for adding digests to executables, a slight modification of the Linux kernel to use those digests to share code pages, and tools for transferring files between machines based on digests of their contents.

Results show that relative to dynamic linking our prototype has no measurable performance decrease, a 20% storage space increase, and a 34% increase in the network bandwidth required to transfer the packages.