iOS

  • Обычно приложения устанавливаются из “магазина”
  • Установка приложения не из магазина очень сильно ограничена

Что есть “приложение” из магазина?

  • Никто даже не помнит расширения этих фалов

У приложения есть разработчик. Распространение - на плечах Apple.

Android

  • Существует Play Market для установки приложений
  • Существует YandexStore, Amazon, китайцы
  • Установка приложения не из магазина ограничена только тем, что обновления надо ставить вручную
  • На телефоне есть встроенный менеджер приложений, из которого вы можете удалить “любое” приложение, полученное из внешних источников.

Что есть “приложение”?

  • Архив apk, содержащий в себе исполняемый код и ресурсы.
  • ОС заботится о том, чтобы код и ресурсы были расположены в защищённом от других приложений хранилище.

-“-

Windows 10

  • Есть концепция магазина, в котором ничего нет и ничего оттуда не работает. :wink:
    • Есть автообновление, и можно заплатить денег.
    • Есть ограничения по типу приложений, которые могут быть опубликованы.
    • Нужно для экспансии под ARM.
    • Гарантии по безопасности есть? Нет.
  • Есть интернет. Откуда можно скачать кучу приложений под ОС.
    • По умолчанию никаких обновлений нет.
      • Если это только не Firefox, Google Chrome, Steam, …
    • Вирутальным ограничением является “подпись разработчика”, которую показывает ОС при запуске установочного пакета от имени администратора.
  • Есть steam, который предоставляет единственные приложения, ради которых стоит ставить Windows.

Приложение - исполняемый файл, который работает под управлением данной ОС. Распространение приложения - отдельная тематика.

Распространение сейчас делается компанией Valve.

GNU/Linux

Приложение в GNU/Linux - классический исполняемый файл.

У нас существует множество “дистрибутивов”. Distibute - verb, распространять. Дистрибутив - распространение определённого набора ПО.

Компоненты “мира”

  • Ядро ОС, Linux.
  • Набор “стандартных системных приложений”, POSIX. Существует несколько реализаций, разрабатывают разные люди.
  • Различные системные приложения.
  • Различные прикладные приложения.

Напоминаю, что большинство этих компонент доступны “бесплатно”. И не просто бесплатно, а в виде исходных кодов.

В середине 90х

  • не было интернета.
  • была распространена модель “посылки” ПО в дистрибутивах: можно найти Windows 95 на 10 дискетах.

Была цель: сделать дистрибутив GNU/Linux. Стоит отметить следующие дистрибутивы:

  • RedHat, RHEL - комерческий продукт. Вы платите за “качество” сборки.
  • Debian, 9
  • Slackware, этот не включает )

Наследие “интернет”-эпохи.

  • Gentoo
  • Arch Linux

Чем эти “дистрибутивы” отличаются друг от друга.

Из чего состоят “дистрибутивы”?

  • Они явно состоят из “компонентов”, которые перечислены выше.
  • “Компоненты” поставляются в виде “пакетов”, package.
  • В простом случае package - это архив, содержащий в себе всё необходимое для того, чтобы бинарная версия приложения работала в рамках общего окружения дистрибутива.
    • “пакет” для ядра - бинарный файл ядра Linux, способный запускаться на определённой архитектуре процессора.
    • “пакет” для приложения - бинарый файл, способный выполняться соответствующим ядром ОС + ресурсы.
  • Понятно, что помимо пакетов, содержащих исполняемые файлы есть также и пакеты, которые содержат доп. ресурсы:
    • Документация
    • Переводы
    • Расширенные наборы ресурсов
    • Библиотеки, которые нужны для других приложений.
  • Нам нужна система, которая позволит указывать зависимости между пакетами:
    • Документация явно требует установки самого приложения.
    • Все пакеты, содержащие библиотеки, должы быть установлены до пакета приложения, которое зависит от этих библиотек.
  • Нужна некоторая система, которая позволит решать данную задачу. Она, собственно, называется менеджером пакетов.

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

Хоть исходной информацией для каждого дистрибутива являются одинаковые файлы - исходные коды соответствующих приложений, собрать из них бинарные файлы можно по-разному:

  • названия бинарных файлов (особенно актуально для библиотек)
  • можно использовать различные компиляторы (GCC, GNU C Compiler, CLang, LLVM, Low Level Vitrual Machine)
  • можно использовать разные версии как приложений, так и компиляторов, так и ядра, так и системных библиотек……

В результате рождатеся проблема: на чём можно писать своё приложение:

  • Разработчик выбирает 1 дистрибутив для тестирования ПО
  • Разработчик выбирает “стандарты”
  • Разработчик пытается поддержать большиство платформ (экономичеки выгодны)

В результате:

  • Бесплатное ПО разрабатывается зачастую под 1 платформу
  • Платное ПО поддерживает ряд выбранных платформ

Как получается, что есть много дистрибутивов (В России как минимум 2 стабильно существующих платных дистрибутива).

А кто же делает эти самые дистрибутивы?

  • Платная разработка, RedHat, Suse (SLES), ALT Linux, Canonical (Ubuntu)
  • Разработка силами сообщества. Обычно участнику сообщества денег не платят, хотя в некоторых случаях они могут получать деньги от фондов.

Есть “стандартная” роль человека, отвественного за создание и поддержание пакета в должном виде. Этот человек “работает” на стороне дистрибутива. Такой человек называется maintainer.

В результате разработчику приложения НЕ ОБЯЗАТЕЛЬНО поддерживать все дистрибутивы, ментейнеры самостоятельно адаптируют процесс сборки пакета под конкретный дистрибутив.

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

Как выглядит процесс формирования дистрибутива

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

Классические дистрибутивы ориентируются на классического системного администратора, который хочет настроить систему 1 раз, а потом она бы работала, да денег не просила. За стабильность люди платят деньги: RedHat, SuSe, Canonical… Стабильные версии выходят обычно 1 раз в 2-3 года. Debian.

“линуксоиды” хотят всегда экспериментировать над собой и окружающими, поэтому им нужны сверкающие шарики, всё новое и т.д. Плюсы этих людей: они являются добровольными тестировщиками и находят большинство багов как можно раньше. В результате ПО стабилизируется и его можно предоставлять платным клиентам. RedHat: Fedora (каждые 1/2 года), SuSe: Open SuSe, Arch (выходит ежедневно), Gentoo (Выходит ежедневно), Debian Testing (выходит почти ежедневно).

Стоит отметить, что есть 2 модели формирования дистрибутивов

  1. “заморозка”. В рамках 1 версии дистрибутива версии приложений не меняются (значительно). В обновления влкючатся только исправления багов, исправление ошибок в безопасности.
  2. “постоянный выпуск”, rolling release. Вы пытаетесь использовать самое свежее ПО. При этом всё-равно пытаетесь его немного стабилизировать. Лоигка такого выпуска состоит в следующем: мы надеемся на то, что скорость добавления новых фич и решения багов будет больше сокрости добавления новых багов. В этом случае понижается степень ответственности на ментейнеров - они просто переадресуют проблемы разработчику. Arch.

Формирование выпусков в Debian GNU/Linux

Основые дистрибутивы Debian.

Кто-нибудь смотрел Toy Story?

Каждый дистрибутив Debian носит имя персонажа из Toy Story.

  • Sid. Эта игрушка в мультике постоянно разваливалась. Unstable. В данный репозиторий попадают все новые версии пакетов для первичного тестирования на совместимость с другими пакетами. Данный дистрибутив НЕ ПРЕДНАЗНАЧЕН для использования конечными пользователями.
  • Testing. Имя данного дистрибутива “постоянно” меняется. Этот дистритрибутив используется для заморозки следующего стабильного выпуска. Сначала сюда попадают самые свежии версии из Sid (когда было показано, что они совместимы и работают). Тут более широкая общественность проверяет на наличие проблем в системе. Проблемы заносятся в специальный трекер. В определённый момент сюда разрешается добавлять только версии ПО с исправлениями.