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.
Download
- Get the technical report on the Slinky system
here .
- Get the source code for Slinky
here .