Когда на компьютерах места катастрофически не хватало и программы были очень примитивными, тогда действительно было удобно их между собой динамически линковать (говоря по-русски взаимоиспользовать)….
Когда на компьютерах места катастрофически не хватало и программы были очень примитивными, тогда действительно было удобно их между собой динамически линковать (говоря по-русски взаимоиспользовать). Но как только сложность ПО стала расти, то оказалась, что динамическая линковка крайне неудобна.
Более того, результатом этого неудобства стали следующие факты:
— Вы можете лишиться любимой программы просто потому что её больше некому поддерживать или она несовместима с другими компонентами
— Вы не сможете запустить новомодную примочку которая появилась буквально вчера не обновив при этом половину системы
В Microsoft быстро поняли, что всем гораздо удобнее когда их приложение представляет собой нечто целостное, а не бинарики, не способные даже запуститься без сторонних, зачастую отсутствующих в системе, библиотек. В результате чего Microsoft стала поставлять все ПО в виде пригодном для использования, а линуксоиды пошли городить систему костылей.
Как итог в Windows 7 я могу использовать кучу софта написанного для Windows 95, а в Linux такое в принципе невозможно.
Динамическая линковка
Появление пакетных менеджеров в Linux, должно было хоть как-то автоматизировать разруливание динамических зависимостей привело к появлению вот таких тем на форумах т.к. очень скоро оказалось, что версии ПО и библиотек плодятся как кролики, что API очень часто меняется, а у проклятых пользователей возникает нездоровое желание иметь установленным в системе две версии одного и того же ПО. Динамическая линковка и связанная с ней пакетная система проблему не только не решает проблем, но и создает лишние сложности.
Как то, для того чтобы установить в систему блокнотик в 300KB мне в SUSE пришлось поставить софта на 250MB. Блокноту нужна была какая-то библиотека, из которой он дай бог 1-2 функции использовал. Эта библиотека была завязана на другую библиотеку, которая шла в комплекте с программой для записи дисков, а программе для записи дисков был нужен графический тулкит и пара сторонних библиотек. Я думаю уровень маразма понятен.
Вывод
Соответственно устранить систему зависимостей можно только путем статической компиляции. Поясню на примере. Вы в деревне за городом, без интернета или с каналом уровня диал ап и вам понадобится поставить программу тянущую за собой n пакетов размером 200 мб вместо того. Что вы предпочтете, взять программу у друга Васи на флешке или тянуть все по сети?
Не далее как несколько дней назад разработчики Ubuntu скрипя зубами признали, что будущее именно за статической линковкой. Тезис звучит так: «Никаких взаимных зависимостей между пакетами».
Считаю, что динамическая линковка — прошлый век. Она годится только тогда, когда софт не развивается.