Linux дистрибутивы
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 версии дистрибутива версии приложений не меняются (значительно). В обновления влкючатся только исправления багов, исправление ошибок в безопасности.
 - “постоянный выпуск”, rolling release. Вы пытаетесь использовать самое свежее ПО. При этом всё-равно пытаетесь его немного стабилизировать. Лоигка такого выпуска состоит в следующем: мы надеемся на то, что скорость добавления новых фич и решения багов будет больше сокрости добавления новых багов. В этом случае понижается степень ответственности на ментейнеров - они просто переадресуют проблемы разработчику. Arch.
 
Формирование выпусков в Debian GNU/Linux
Основые дистрибутивы Debian.
Кто-нибудь смотрел Toy Story?
Каждый дистрибутив Debian носит имя персонажа из Toy Story.
- Sid. Эта игрушка в мультике постоянно разваливалась. Unstable. В данный репозиторий попадают все новые версии пакетов для первичного тестирования на совместимость с другими пакетами. Данный дистрибутив НЕ ПРЕДНАЗНАЧЕН для использования конечными пользователями.
 - Testing. Имя данного дистрибутива “постоянно” меняется. Этот дистритрибутив используется для заморозки следующего стабильного выпуска. Сначала сюда попадают самые свежии версии из Sid (когда было показано, что они совместимы и работают). Тут более широкая общественность проверяет на наличие проблем в системе. Проблемы заносятся в специальный трекер. В определённый момент сюда разрешается добавлять только версии ПО с исправлениями.