![]() |
The Versioning Problem |
![]() |
Shared libraries are a good idea. Rather than have several applications statically link in the same runtimes and functions, these were broken out into a shared module - a DLL (SO for you Unix folk). Space was saved and best of all, if you needed to upgrade you replace one module, right?
Unfortunately, unless strict 100% backward compatibility is maintained between upgrades to shared libraries, you will break every application that uses it. This problem of maintaining correct versions of a shared library for all applications using it has come to be called "DLL Hell".
Although binary interface standards like COM try to address these problems by requiring immutable interface contracts, problems with versioning still can be very difficult. For instance, Microsoft ended up inventing an entire API, DirectSetup, devoted entirely to managing the correct installation of upgrades to the DirectX software layer, which is entirely COM-based.
References: D