When space on our computers wasn't enough and programs were primitive, than it was convenient to link them dynamically. As software complexity begun to grow as dynamic linking became more inconvenient.
Further more, as a result of this inconvenience next facts showed up:
- You could loose your favorite program just because there's no one to support it anymore and it's not compatible with other components.
- You would not be able to run a new feature which appeared just then, without updating half of your system.
The Microsoft shortly understood that everybody will benefit when their application will correspond to one consistent structure, without having programs which are not able to run without third-party libraries that often do not exist in the system. As a result Microsoft begun to produce all software ready to go, when Linux developers continued to build a Pisa Tower.
In the end of the day in Windows 7 we can use all bunch of the software written for Windows 95, whereas in Linux this seems to be impossible.
Forthcoming of the package managers in Linux had to resolve dynamic dependencies problem by automating the process, but ignited a lot of despites on the Internet forums, because very soon everybody realized that software versions populate as a bunnies, that API changes to often and dammed users have questionable desire to have two or more versions of the software in their system installed. Packaging system does not resolve dynamic linking problems but creates more.
Once, when I wanted to install in my OpenSUSE system a simple notepad the size of 300kb I also had to install 250MB of other software. Notepad required some library, in which it probably used function or two. That library depended on the other library which came together with an application for burning CD-ROMs and that application needed whole GUI Framework and a few other libraries. I guess that everyone can see, how crazy this is.
So there is only one way to resolve the problem of the dynamic dependencies - to use static linking. Let's have a look at next example: You are in some outback with no Internet or with a dial-up link and you have to install a software that depends on the number of packages the size of 200MB. Would you prefer to take this software from your friend or pull everything through the net?
Not long ago the Ubuntu developers admitted that the future lays after the static linking. The point is: "No interdependencies between the packages!".
I rekon that dynamic linking is the old-school. It needed only in case when the software is stable.