Почему непакетное управляемое программное обеспечение не обновляется самостоятельно?

Почему непакетное управляемое программное обеспечение не обновляется самостоятельно?

Я пользователь дистрибутивов на основе Debian - Debian, Ubuntu, Linux Mint. Я знаю, что часто последние версии программного обеспечения отсутствуют в репозиториях, поэтому я часто скачиваю их напрямую из исходников и устанавливаю.

Однако я заметил, что это программное обеспечение редко сообщает об обновлении. Также я никогда не замечал, чтобы какое-либо из них обновлялось само по себе, а затем просто спрашивало разрешение на установку.

Может быть, это связано с тем, что среди программистов распространено мнение, что версии Linux будут обновляться через менеджер пакетов?

решение1

Реализация такого рода функции довольно сложна, как с точки зрения «звонка домой» (чтобы узнать, было ли обновление), так и с точки зрения «обновления на месте»:

  • программное обеспечение, работающее в системе пользователя, должно знать, как проверить, доступна ли более новая версия (что означает добавление сетевого кода в ваше приложение, у которого, возможно, нет других причин использовать сеть);
  • программное обеспечение должно работать независимо от сетевых условий, в которых оно находится (разумеется, когда оно полностью отключено; но оно также не должно выдавать странные ошибки, когда оно оказывается частично подключенным);
  • вам необходимо иметь какой-то способ определения доступности новой версии (как вы сравниваете версии, когда пользователи выполняют сборку из исходного репозитория?);
  • вам нужно иметь где-то сервер с серверной частью, которую вам, возможно, также придется разрабатывать;
  • вам необходимо убедиться, что обновления не могут быть скомпрометированы ни на сервере, ни посредством атаки типа «человек посередине» (поэтому вам необходимо использовать TLS и/или какую-либо строгую подпись);
  • вам необходимо сделать обновления доступными в форме, удобной для использования вашими пользователями; изначально они могли быть собраны из исходного кода, но нет гарантии, что система, на которой они запускают программное обеспечение, имеет все необходимое для повторной сборки новой версии из исходного кода — поэтому вам необходимо предоставить двоичные файлы (для всех возможных целевых платформ?).

(Это не исчерпывающий список.)

Все эти проблемы были решены дистрибутивами, поэтому проще позволить дистрибутивам позаботиться обо всем этом. Кроме того, какКусаланандаобъяснил, что пользователи, которым важно использовать последнюю версию программного обеспечения, вероятно, достаточно заинтересованы в этом, чтобы хотя бы подписаться на рассылку объявлений, чтобы получать уведомления таким образом.

Другим аспектом, который следует учитывать, является то, что значительное число людей не хотят, чтобы используемое ими программное обеспечение каким-либо образом звонило домой. Некоторые дистрибутивы идут на некоторые меры, чтобыудалятькод, который делает это из программного обеспечения, которое они распространяют, или даже из других частей программного обеспечения, которые могут быть использованы для отслеживания его использования (напримердокументация, которая загружает изображения, шрифты или CSS из Интернета). Смотрите все теги «нарушение конфиденциальности» вLintian от Debianнапример.

Все это объясняет, почему так мало программных продуктов, которые содержат необходимые механизмы для самостоятельного предоставления информации об обновлениях, и еще меньше программных продуктов, которые могут обновляться самостоятельно.

Существуют и другие способы решения «проблемы»: разработчики программного обеспечения, использующие систему CI, обычно могут расширить ее, чтобы предоставлять «ежедневные» сборки в удобной для использования форме (в виде пакетов); заинтересованные пользователи могут настроить собственные системы сборки для регулярного извлечения обновленного исходного кода для интересующего их программного обеспечения (это довольно распространено в корпоративных контекстах); или вы можете настроить пакеты в стиле AUR, которые собираются самостоятельно из новейшего исходного кода.

решение2

Если только само программное обеспечение не имеет возможности «звонить домой» для проверки обновлений, как некоторые браузеры и т.п.Синхронизациякажется, это возможно, но обычно не существует механизма, который мог бы автоматически оповестить пользователя/администратора о наличии более новой версии программного обеспечения.

Пакеты, которые вы устанавливаете с помощью своего менеджера пакетов, создаются людьми — пользователями, которые, скорее всего, заинтересованы в том, чтобы они обновлялись и работали на нужных им операционных системах.

Кто-то, кто упаковывает, напримерАнсибль, илиGNU coreutils, илиоболочка Яша, илиCMakeили любой другой из тысяч программных проектов для конкретной системы Unix, скорее всего (но не обязательно) будет подписан на соответствующие списки рассылки для этих проектов и/или будет иметь специальные инструменты для регулярного просмотра репозиториев исходного кода или исходных файлов распространения. Когда они узнают о новом релизе, они будут загружать, компилировать, тестировать, исправлять (и т. д.) и упаковывать программное обеспечение соответствующими способами в зависимости от процедур упаковки в их Unix. Это может включать в себя как коммуникацию вверх по течению (разработчику программного обеспечения), так и вниз по течению (пользователям программного обеспечения) о несовместимостях или других проблемах, возникающих в процессе сборки/упаковки.

Затем они, в зависимости от того, с какой версией Unix они работают и как работает сторонний дистрибутив пакетов, зарегистрируют, загрузят или каким-то образом зафиксируют пакет, чтобы пользователи, такие как я и вы, могли использовать наши менеджеры пакетов для обновления наших систем.

Я забочусь, например, о том, чтобы иметьGNU Стоудоступно для OpenBSD (я "порт-мейнтейнер" для этого ПО). Время от времени я проверяю текущий статус Stow на веб-сайте GNU (он обновляется нечасто), и когда я замечаю новую версию, я устанавливаю ее и убеждаюсь, что она работает, и обновляю порт OpenBSD на моей личной машине. Затем я отправляю по электронной почте список портов OpenBSD с патчем для порта (порты распространяются как набор Makefiles на OpenBSD). Затем кто-то с правами на коммит убедится, что мой патч применяется чисто и что порт выглядит правильно, прежде чем он закоммит его в дерево CVS портов OpenBSD.

В следующий раз, когда пользователь обновит дерево CVS и пересоберет порт или загрузит двоичный порт, который в конечном итоге появится, его установка GNU Stow обновится.Однако GNU Stow сам по себе не знает, доступна ли его новая версия.Это просто не то, что GNU Stow должен делать. Это инструмент, который используется для установки стороннего программного обеспечения в автономных иерархиях каталогов, и это было бысерьезно странноесли он пытается «позвонить домой» каждый раз, когда его используют (так же странно, как если бы ему lsвнезапно потребовался доступ к сети для запуска).

Во многих случаях обновление ПО само по себе может быть нежелательным, поскольку многие компоненты системы должны быть протестированы вместе. Необходимые части инфраструктуры также серьезно раздули бы меньшие пакеты, и было бы невозможно для людей, у которых нет знаний или ресурсов, чтобы запустить какой-то высокодоступный сервер обновлений, чтобы разрабатывать ПО, которое автоматически обновляется.

решение3

Раньше компьютерами управляли профессионалы, которые устанавливали новое программное обеспечение по мере необходимости.

Со временем в разных операционных системах выработались две разные традиции, позволяющие облегчить задачу ручного обновления программного обеспечения.

  • В Linux и большинстве других современных вариантов Unix операционная система поставляется сменеджер пакетов. Большая часть программного обеспечения устанавливается через этот менеджер пакетов, и менеджер пакетов обновляет программное обеспечение, когда становится доступна новая версия.
  • До недавнего времени в Windows не было менеджера пакетов, поэтому поставщики программного обеспечения для Windows привыкли использовать собственный код для установки обновлений.

Подход менеджера пакетов особенно хорошо подходит для мира открытого исходного кода, поскольку программное обеспечение с открытым исходным кодом состоит из тысяч пакетов, которые разрабатываются независимо и собираются вместе. При сборке пакетов может произойти много ошибок, поэтому большинство дистрибутивов Linux предоставляют согласованный набор, называемыйвыпускать. Некоторые дистрибутивы имеют «плавающие релизы», где единственная проверка согласованности заключается в том, что программное обеспечение компилируется. Другие имеют больше тестирования и предоставляют новый релиз только один или два раза в год, или даже раз в пару лет.

Преимущество подхода Linux по сравнению с подходом Windows заключается в том, что он позволяет пакетам программного обеспечения взаимодействовать друг с другом. Это сложно в подходе Windows, потому что если программное обеспечение A и программное обеспечение B хотят что-то сделать вместе, они должны следить за тем, установлен ли их партнер, справляться с обновлениями, заботиться о том, чтобы не оставить крошек после удаления одного из них... Именно поэтому программное обеспечение Windows должно объединять все библиотеки, которые оно использует, а это означает, что если в библиотеке обнаружена ошибка, то все программное обеспечение, которое использует библиотеку, необходимо обновить. Напротив, в Linux необходимо обновить только пакет, содержащий библиотеку, независимо от того, сколько программ ее используют.

Поскольку операционная система предоставляет механизм обновления программного обеспечения, авторам программного обеспечения Linux не нужно изобретать велосипед.

Редко возникает необходимость устанавливать более новые версии программного обеспечения, чем те, что предоставляет ваш дистрибутив. Более новое программное обеспечение, как правило, не менее глючное. Дистрибутивы предоставляют обновления, если обнаружена серьезная ошибка (особенно ошибки безопасности). Более новая версия некоторого программного обеспечения полезна только в том случае, если в ней есть новая функция, которая вам нужна.

Если вы хотите иметь последнюю версию программного обеспечения, даже когда она вам не нужна, то вам следует установить непрерывный дистрибутив, такой как Debian нестабильный или Arch Linux. Дистрибутивы с когерентными релизами, такие как Ubuntu, Mint или Debian стабильный, предназначены для людей, которые не хотят ломать свою систему каждую неделю.

решение4

Остальные ответы хороши, но я хочу добавить то, чего ни один из них не затронул в полной мере: проблему безопасности.

Установка программного обеспечения (по крайней мере, установка его в масштабах всей системы) обычно требует доступа root. Вы доверяете менеджеру пакетов вашего дистрибутива и людям, которые упаковывают программное обеспечение, использовать эту привилегию надлежащим образом, но вы не обязательно доверяете каждой случайной части программного обеспечения, которую вы установили, делать это правильно.

Связанный контент