Почему программное обеспечение не упаковано в один файл?

15

Мы видим, что большинство программ Windows упакованы в один исполняемый файл. Когда я дважды щелкаю по файлу установки, он устанавливает все файлы, двоичные файлы и библиотеки вместе с ним.

Я понимаю зависимость Ubuntu или более общих пакетов Linux. Но мне интересно, почему они существуют. Разве нельзя создать один файл со всеми зависимостями? В чем проблемы с этим методом?

Пожалуйста, попробуйте подробно объяснить причину.

Анвар
источник

Ответы:

17

Основная причина того, что зависимости не включены в саму программу, заключается в том, что компоненты системы могут быть легко обновлены.

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

Для пользователя не имеет значения, что необходимо установить несколько пакетов - установка одного программного обеспечения, которое вы хотите, автоматически устанавливает его зависимости.


Основное различие между упаковками .deb и .exe заключается не в том, что программное обеспечение Ubuntu не публикуется в одном файле. Основным отличием является концепция программного хранилища, которое содержит пакеты, и что обновления могут быть легко предоставлены.

Иногда это может быть проблематично для компьютеров без прямого подключения к Интернету. Есть инструменты, такие как APTonCD , которые помогают минимизировать эти трудности.

8128
источник
2
иногда имеет значение с такими пользователями, как мы, без надлежащего доступа к Интернету
Anwar
2
В любом случае, я ненавижу эту функцию, потому что мой интернет работает медленно. А делиться загруженными программами Ubuntu очень сложно, (не предлагайте делать резервную копию apt-cache, потому что я делаю это ежедневно)
Tachyons
1
Но тогда вам действительно понравится эта функция! Потому что вместо загрузки библиотеки пять раз, вы просто скачиваете ее один раз. Представьте, что каждая программа в вашей установке Ubuntu поставляется с собственной установкой GTK + или Qt! Эти вещи огромны .
Майкл Вайлд
4

Это не совсем верно. Программное обеспечение Ubuntu обычно поставляется в одном файле .deb. Будучи совершенно упрощенными (и неточными), файлы .deb являются соответствующим файлом .exe для Windows. Все программы, в том числе в Windows, используют зависимости от других файлов в операционной системе (библиотеки). Процесс установки более или менее явный в разных ОС. Когда вы используете центр программного обеспечения в Ubuntu для загрузки программы, вы загружаете только зависимости, которые не установлены в вашей системе, и фактические программные файлы. Это предотвращает перегрузку системы дублирующимися файлами и дублирующими функциями, которые могут привести к конфликтам.

Хотите верьте, хотите нет, единственная разница между установкой программы в Windows или Ubuntu - это объем информации, которую они предоставляют пользователям. Windows считает, что ее пользователи глупы и не хотят, чтобы они знали, что именно устанавливается при запуске exe-файла. В Linux вы получаете эту информацию ... для некоторых пользователей это слишком много деталей, но другие (большинство) действительно ценят это.

надеюсь, что это имеет смысл.

leousa
источник
2
Совершенно верно. Даже другие дистрибутивы (не так хорошо, как Ubuntu) используют .rpms. Особенность .exe, .deb или чего-то еще в том, что это в основном большой .tar, который извлекает себя в разные места! В Windows он идет в Program Files и показывает вам индикатор выполнения, но в Linux он показывает намного больше.
WindowsEscapist
1
Я думаю, что предположение, что exe-файл похож на большой tar-файл, заходит слишком далеко в направлении упрощения. Файл tar не является исполняемым. EXE-файл (естественно) есть. То есть с файлом deb (который на самом деле является файлом tar) именно менеджер пакетов обрабатывает фактический процесс перемещения файлов, поэтому система может довольно элегантно справляться с задачами. С программой установки (как в Windows) это делает сам установщик. Он может общаться с некоторыми компонентами системы, чтобы держать вещи в порядке, но только если он чувствует себя так, как он.
Дилан Макколл
1
Лучший способ подвести итог - это то, что в Windows есть такие программы-установщики, как InstallShield и NSIS. Подобные инструменты есть и для Linux. MojoSetup является популярным. Вот где вы иногда скачиваете программу, и она имеет исполняемый файл (обычно заканчивающийся на .sh или .run) и дает вам небольшой мастер. Они обычно не общаются с менеджером пакетов, и они работают так же, как программы установки в Windows. На этом замечании установщик Windows (с его MSI-файлами) - это попытка убрать этот беспорядок с их стороны;)
Дилан Макколл
Я думаю, что способы Linux намного лучше, чем способы Windows. Но да, способы Windows просты и легки
Анвар
2
Формат файла Windows, который соответствует .debis .msi.
Элия ​​Каган
3

В Ubuntu большая часть программного обеспечения поставляется в одном файле. Это *.debфайл пакета Debian, который загружается, распаковывается и устанавливается из вашего менеджера пакетов.

Почему Ubuntu не устанавливает программное обеспечение из самораспаковывающихся исполняемых файлов, как большинство программ Windows?

Потому что самораспаковывающиеся *.exeфайлы - очень опасное предложение.

Наиболее важные различия между самораспаковывающимися исполняемыми файлами и системой упаковки, такой как Debian / Ubuntu, заключаются в следующем:

  • Безопасность
  • прозрачность
  • Более детальный контроль

Подробнее:

Безопасность

В мире Windows вы должны доверять этому единственному *.exeфайлу. Как можно быть уверенным, что ему можно доверять? Как вы можете даже знать, что он что-то устанавливает? Как вы можете быть уверены, что за вашей спиной ничего не происходит?

В Ubuntu все пакеты имеют цифровую подпись, поэтому с помощью отдельного файла пакета - менеджера пакетов (будь то мюон, синаптик, aptitude или даже прямой apt) - вы проверяете содержимое еще до его распаковки, не говоря уже об установке. Это предполагает, конечно, что вы доверяете репозиториям. Я бы предпочел доверять репозиториям Ubuntu (один авторитет), а не сотням часто незнакомых разных источников для скачивания.

Гранулярный контроль

С *.exeфайлом вы можете сделать одну вещь: выполнить его. В Ubuntu вы можете проверить содержимое пакета, описания, конфигурации, отдельные файлы, последние изменения, исправления ошибок и т. Д. С помощью вашего менеджера пакетов, прежде чем решить, устанавливать или нет.

Когда вы устанавливаете из *.exeфайла, вы также должны доверять его хуку «удаления» (и не все *.exeфайлы гарантированно имеют его). В Ubuntu все файлы, принадлежащие стандартным пакетам, установленным менеджером пакетов, всегда могут быть удалены, потому что это функция менеджера пакетов, а не сам пакет. Менеджер пакетов - это отдельное доверенное приложение, которое предоставляет как установщик, так и деинсталлятор, пакет не может отнять у вас хук деинсталляции. Конечно, вредоносный пакет может проникнуть через действия после установки, но именно поэтому у нас есть официальная система репозитория и те же люди, которым мы доверяем, чтобы поддерживать их.

прозрачность

Это идет дальше. В Ubuntu я действительно могу доверять своей системе, потому что я могу проверять программное обеспечение на многих уровнях. Конечный уровень - возможность взглянуть на исходный код. бинарные пакеты имеют соответствующие исходные пакеты. Я действительно могу посмотреть на источник (Пример: ' apt-get source bash ' даст вам полные исходные коды для оболочки bash). В мире файлов * .exe обычно есть только двоичные файлы, и кто знает, что они на самом деле делают за кулисами?

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

arielf
источник
2

В дополнение к тому, что было сказано другими, иногда одна часть программного обеспечения разделяется на несколько пакетов, потому что не все функции актуальны для всех пользователей. Например, если документация программы объемная, обычно она предоставляется отдельным пакетом. Это позволяет пользователям, которые не заинтересованы в этих дополнительных функциях, экономить дисковое пространство и пропускную способность / время для загрузки.

OMACs
источник
0

Давайте попробуем поделиться своим пониманием зависимостей (Да, я знал о достоинствах Ubuntu или более общего Linux-подхода к работе с программным обеспечением. Я просто пытался собрать все хорошие мнения и причины централизованно, чтобы я мог продемонстрировать некоторые из моих друзей) .

Программное обеспечение Windows в основном упаковано в один файл. Означает ли это, что они не имеют никакой зависимости?

Нет, почти все программы зависят от некоторых других программ. (Если это программное обеспечение не очень низкого уровня и может напрямую взаимодействовать с оборудованием, например самой операционной системой) . Программное обеспечение Microsoft не свободно от зависимости. Итак, важный вопрос: как они справляются с этим?

Ответ: они справляются с этим по-своему. Предполагая, что их большинство пользователей глупы, они просто помещают все зависимости в один файл, в результате чего получается программное обеспечение большего размера (1 файл).
Например, см. Игры, выпущенные для Microsoft. Почти каждая игра включает в себя настройки DirectX, хотя пользователи, возможно, уже обновили их версии.

Вот что я нашел в Google о том, почему DirectX включен в каждую игру.

Даже если более поздняя версия двоичного файла уже установлена, эта версия не может быть использована, и даже если ваша установка DirectX актуальна, потому что вы запустили более свежую версию установщика, который не гарантированно установил все предыдущие версии. Хуже того, если версия установлена ​​для x86, это не гарантирует, что та же версия установлена ​​для x64, поэтому 64-битным и 32-битным играм может потребоваться запускать одну и ту же версию установщика, но при запуске на разных платформах.

Нажмите здесь для полной статьи. Понятно, что они плохо справляются с обработкой зависимостей.

Большую часть времени, независимо от того, какие зависимости уже существуют, они предоставляют его для упрощения (для своих пользователей) . Также посмотрите, сколько программных продуктов включает в себя компоненты среды выполнения .NET.
Другой пример из моего опыта: однажды я скачал и установил программное обеспечение MS. Удовлетворенный процессом, я нажал на значок, чтобы открыть программное обеспечение, и только тогда он говорит мне, что «мне нужна Java для запуска». Такая ситуация никогда не возникает в мире Linux через управление пакетами. (если только вы не попробуете загрузить файлы .deb с сайта репозитория и установить их двойным щелчком мыши в стиле MS) .

Как Linux решает эту проблему зависимости?

Что ж, Linux или Ubuntu не скрывают, что для использования программного обеспечения необходимо установить зависимости (в отличие от способа Microsoft). Но когда вы устанавливали компоненты, другое программное обеспечение, которое зависит от того же компонента, использует установленные ранее зависимости (в отличие от программного обеспечения MS, включая все).

Анвар
источник