Что такое приложение?

  • Набор команд в бинарном виде для процессора
  • Файл приложения
  • Полезно для пользователя (иначе зачем оно?)
  • Набор команд для интерпретатора (бить за Ruby) или виртуальной машины (бить за Java). В этом случае для работы программы НЕОБХОДИМА среда выполнения, которая в 99% случаев является бинарной программой.

Как можно получить приложение?

  • Создать самому при помощи компилятора.
  • Скачать из интернета
    • Установочный файл
    • Исходные коды
    • Просто готовую программу для запуска
  • Собрать чужую программу из исходых кодов
  • Открыть страницу в интернете (веб-приложение)
  • Открыть приложение-магазин (steam) и нажать на кнопку “установить” / “запустить”

Как это было в UNIX-времена

Для пользователей UNIX поставлялся как бинарное представление, которое можно установить на компьютеры, а также как набор исходных кодов самой ОС и её приложений, чтобы пользователи могли модифицировать её под свои нужды.

Потом люди захотели делиться своими наработками (играми) друг сдругом. Одой из основных проблем того времени было разнообразие бинарных кодов для машин. => Было почти невозможно передавать приложение в бинарной форме. И, поэтому, использовались исходные коды. “У всех есть компилятор Си”.

Давайте повторим этот опыт )

Проблемы нашего опыта:

  • Надо иметь компилятор языка
  • Надо иметь все библиотеки, которые требовались для работы приложения
  • Надо уметь пользоваться компилятором
  • Надо уметь использовать систему сборки

Для того, чтобы сделать процесс удобнее хотелось бы делиться уже бинарными файлами.

Ограничения:

  • Арихектура компьютера должна совпадать (бинарные коды программы должны поддерживаться целевым компьютером)
  • Операционная система также должна совпадать. Т.к. в приложении ВСЕГДА используются системные вызовы, т.е. обращения к ядру ОС.

Но пользоваться этим стало гораздо удобнее )

Как это сделано в Linux

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

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

Изначально проект GNU предоставлял все свои наработки в виде исходных кодов. Но для среднестатистического пользователя удобнее работать именно с бинарными форматами. В результате появились дистрибутивы, которые собирали это ПО в бинарные формы и доставляли конечным пользователям.

В рамках 1 дистрибутива всё ПО (в идеале) умеет работать друг с другом и создатели дистрибутива пытаются это обеспечить.

В 90х следует отметить появление двух основных игроков на рынке дистрибутивов Linux:

  • Red Hat. Компания, которая предоставила один из самых первых бинарных дистрибутивов.
  • Debian. Сообщество, которое нацелено на предоставление хорошего дистрибутива.

Стабильные выпуски Red Hat интересны тем, что они поддерживаются порядка 15 лет после выпуска.

Debian интересен тем, что вся система развивается за счёт волонтёров (почти). Т.е. прямого комерческого интереса у её создателей не было.

Что из себя представляет на низком уровне дистрибутив Debian

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

  • С приложениями
  • С документацией
  • С библиотеками
  • С исходными кодами
  • Разное )

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

По-простому пакет - это:

  • Архив с файлами
  • Файлы для установки на компьютер
  • Файлы-скрипты для выполнения в рамках установки:
    • Установки
    • Удаления
    • Обновления

За установку пакета отвечает (в случае Debian) DPKG (Debian PacKaGing). Он знает как распаковать пакет, какие скрипты следует запускать и когда.

DPKG также содержит в себе базу данных, которая описывает:

  • Какие пакеты были установлены
  • Какие файлы на жёском диске соотносятся с каким пакетом

Для установки пакета в систему он должен быть совместим с дистрибутивом

  • Целевая архитектура (x86, amd64, IBM, ARM)
  • Целевой дистрибутив (Debian, Ubuntu, Mint….)
  • Версия целевого дистрибутива

Самый простой способ - сходить на зеркало нужного дистрибутива.