Почему при обновлении одной динамической библиотеки обновляется множество пакетов?
Я не понимаю. Каждый раз, как приходит обновление на Ubuntu, обновляется куча пакетов с одним и тем же описанием, например, исправлено переполнение буфера при таких-то условиях. Смотришь описание пакета, в котором находится библиотека с исправленной ошибкой, и видишь, что он вроде как содержит динамическую библиотеку. Но если библиотека динамическая, то достаточно обновить только ее! В этом же весь смысл динамических библиотек -- чтобы можно было исправлять ошибки, перекомпилировав только одну библиотеку и раздав новую версию всем желающим. Почему же тогда исправление в библиотеке требуется перекомпиляция чуть ли не всех зависимых от нее программ? На кой тогда эти динамические библиотеки?
Дополнение
Тут в комментариях уже несколько раз промелькнула мысль о зависимостях. Я понимаю, что одни программы зависят от других и это правильно. Но ведь софт можно ставить не только из пакетов, верно? К тому же пакеты может никто не обновлять. Вот, например, не столь давно приходили обновления в библиотеке поддержки TLS. Означает ли это, что те программы, чьи пакеты не обновлялись, по прежнему уязвимы? Нет, иначе это был бы абсурд. А если не видно разницы, то зачем обновление во внутренностях одной библиотеки, не затрагивающее ее API и ABI, порождает каскадное обновление других программ и библиотек? Ведь в коде этих программ ничего не изменилось, после сборки у них вероятно даже хеш совпадет.
Зависимости это хорошо, но ведь все в этом мире от чего-то да зависит. Когда приходит обновление libc++, например, я что-то не вижу обновлений десятков тысяч установленных пакетов, а ведь практически каждая программа (ну даже пусть 10%, хотя конечно же, явно больше) зависит от это библиотеки. Тем не менее еще ни разу не видел, чтобы больше десятка пакетов обновлялись из-за обновления libc++.
Тогда зачем остальные это делают? Это может кто нибудь объяснить?
Возможно исправление ошибки потребовало использования функционала, который имеется в только в новой версии библиотеки, что в свою очередь привело к необходимости ее обновления.
Ну, сильно сомневаюсь, что какое-нибудь обновление уязвимости в OpenTLS требует использования какого-то нового функционала. Вызывающая программа наверняка ничего и не заметит, если только она не использовала эту уязвимость :)
На убунте вы ставите софт из пакетов. Которые кто-то любезно собрал. Но дело в том, что сборка пакетов идет на компьютере, где установлены определенные библиотеки и прочий софт. Соответственно при сборке пакет создается именно под этот софт и библиотеки. И если у вас версии не совпадают, то система пытается их обновить. Собственно это и есть зависимости от определенных версий.
Нет, при чем здесь install? Oбычный apt-get update, а чаще всего просто в графическом окошке смотрю. Факт в том, что по моему мнению обновления получаются какими-то каскадными. Выше более подробно описал мысль.
обновляйте через apt-get install
apt-get upgrade обновляет все, а не только вашу библиотеку прочитайте по нему ман
а так вы вызываете команду обновить все и оно все обновляет.
Наскалько я знаю из английского, apt-get install означает "установить". Каким боком это будет относится к обновлению, мне непонятно.
Я не против того, чтобы обновлялось все, у меня канал широкий и размер скачанного меня мало волнует. Меня интересует принципиальный вопрос -- "На фига?" Почему обновление одной программы может аукнуться где-то в совершенно другом месте? А как же идеология независимости компонент? Какая же тут независимость, если из-за обновления потрохов одной библиотеки обновляется куча софта, имеющие к ней весьма посредственное отношение? Они что, работать не будут, если не соберуться на новой кодовой базе (а так как менялись только потроха библиотеки, то после сборки зависимых от нее программ должны получить ровно то же самое, что и до обновления)? Обновлений ABI ведь нет? Тогда зачем?