Авторские статьи об OpenSource

8 отличий snap от других систем доставки софта.


Многим пользователям всё равно как к ним прибыл софт в систему, другие в штыки воспринимают новый формат типа snap или flatpak. Разработчик Алан Поуп (Alan Pope) попытался разъяснить как новые форматы позволяют улучшить жизнь как разработчикам, так и пользователям.


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

Большинство систем упаковки ПО мало чем различаются между собой: форматом файла-архива, инструментами создания и методами доставки. Snap имеют ряд дополнительных преимуществ, помимо простой доставки байт в сжатом виде. Давайте рассмотрим эти 8 способов улучшения.

Простая публикация в ваши сроки

Предоставить ваше ПО в официальных репозиториях (repo) может быть для вас очень сложно. Данные хранилища софта налагают строгое соблюдение набора правил, из-за которых будет задержка между запросом на включение программы, отправкой её на рассмотрение и появление в стабильном релизе данного Linux дистрибутива.

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

С другой стороны, snap публикуются в центральном хранилище (store), которое позволяет пользователю легко найти нужное ПО, установить его и в дальнейшем обновлять. Буквально в течении дня (и часто даже быстрее) разработчик может перейти от snapcraft register для запроса на название своей программы в хранилище к заливке snapcraft push и публикации snapcraft release.

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

Автоматическое обновление

К сожалению, большинство пользователей, примерно 40-70%, не обновляются регулярно. Ситуация ещё хуже для таких устройств как удалённые сервера или Raspberry Pi, спрятанные за обслуживающими ими устройствами.

Современные Linux дистрибутивы стараются сгладить проблему за счёт фоновых задач по автоматизации установки критических заплаток безопасности (Unattended Upgrade) или показом уведомлений с напоминанием о необходимости обновиться. Но обычно многие пользователи отключают данные механизмы или игнорируют уведомления, оставляя себя уязвимыми.

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

Однако некоторые пользователи не хотят, чтобы их ПО обновлялось немедленно. К примеру, они проводят презентацию и хотят показать текущую версию и/или их Интернет соединение лимитировано. Snap позволяет контролировать данный аспект и выставить обновление как вам удобно: после рабочего дня, на ночь или в конце месяца.

Никто не мешает пользователю вручную форсировано обновить все пакеты snap refresh или конкретную программу snap refresh имя-пакета. Автообновление гарантирует, что пользователи получат последние исправления безопасности, исправление ошибок и улучшение функций, сохраняя контроль над ситуацией за собой.

Один пакет для всех

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

Одним пакетом snap разработчик может охватить пользователей 40+ различных дистрибутивов Linux, сохранив время на упаковке, контроле качества (QA) и выпуске. Все Linux дистрибутивы не охвачены, но основные игроки типа Arch Linux, Debian, Ubuntu, Fedora и их производные типа Manjaro, Linux Mint, elementary OS, CentOS - да! Актуальный список дистрибутивов с возможностью установки софта в формате snap.

Каналы, треки, ветки

При публикации программного обеспечения в традиционных репозиториях Linux обычно одновременно доступна только одна поддерживаемая версия конкретной программы. Хотя дистрибутивы могут иметь отдельные «стабильные» (stable), «тестируемые» (testing) и «нестабильные» (unstable) ветки, но за ними обычно прячутся конкретные репозитории.

Как результат, не просто и даже невозможно выпустить вам несколько версий вашего приложения в конкретном релизе дистрибутива Linux.

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

В мире snap по умолчанию доступно 4 уровня риска под названием каналы (channels): stable, candidate, beta и edge.

Разработчик по желанию может публиковать различные сборки одного и того же софта на этих каналах. К примеру, разработчики VLC используют stable для финальных релизов и edge для ежедневных сборок прямиком из своей системы непрерывной интеграции (CI).

Пользователи могут установить стабильную версию программы, но, услышав о новых функциях в предстоящей бета-версии, могут переключиться на неё snap refresh имя-программы --channel=beta, чтобы протестировать. Позже они могут вернуться к стабильному каналу snap refresh имя-программы --channel=stable. Пользователи могут выбрать определенный уровень риска, которым они довольны в зависимости от приложения. Им не нужно обновлять всю свою ОС, чтобы получить «тестирующие» сборки программного обеспечения, и не нужно делать такой выбор для всех приложений.

Кроме того, Snap Store поддерживает треки (tracks), что позволяет разработчикам публиковать несколько поддерживаемых потоков релизов для своих приложений в хранилище. По умолчанию имеется только один трек - latest, но разработчики могут запрашивать дополнительные треки для каждого поддерживаемого релиза. Например на дату написания статьи, авторы Node создали отдельные треки Node 6, 8, 9, 10, 11 и 12, а latest содержит ночные сборки Node 13.

Ветки (branches) полезны разработчикам, чтобы создать недолговечные «скрытые» сборки своего программного обеспечения. Это часто может быть полезно, когда пользователи сообщают об ошибке в программном обеспечении, и разработчик желает создать временную тестовую сборку специально для этого пользователя и любого другого лица, затронутого этой ошибкой. Разработчик может snapcraft push имя-программы --release=candidate/fix-1234, чтобы залить сборку в ветку fix-1234 на канале candidate.

Дельта скачивание и заливка

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

Snap Store поддерживает дельта-обновления как для upload, так и для download. Инструмент Snapcraft, используемый для публикации snap в Store, определит, будет ли эффективнее каждый раз заливать полный snap или его дельту от предыдущего. Аналогично, демон Snapd подсчитает, лучше ли загрузить дельту или полноразмерный snap? Пользователям не нужно над этим раздумывать, всё произойдёт автоматически.

Снимок при удалении

Традиционные системы упаковки Linux не ассоциируют данные с приложениями. После установки пакета с программой, в результате дальнейшей работы, ею могут быть созданы базы данных, файлы конфигурации и т.д. в различных частях файловой системы (/etc/, /home/username/, /var/). После удаления приложения эти данные обычно остаются в файловой системе. Пользователь или системный администратор самостоятельно выполняет очистку после удаления программного обеспечения.

Snap пытаются решить эту проблему в рамках механизма ограничения приложения (application confinement). Когда snap установлен, он имеет доступ к определённому списку каталогов, в которых могут храниться данные и конфигурационные файлы приложения. Когда snap удаляется, связанные с ним данные из этих каталогов также удаляются. Это гарантирует, что программа в snap может быть добавлена и удалена атомарно, оставляя систему впоследствии в согласованном состоянии.

Начиная с версии snapd 2.37, можно сделать снимок (snapshot) данных приложения перед его удалением. Команда snap save имя-программы создаст сжатый снимок данных приложения в /var/lib/snapd/snapshots/. Список сохраненных моментальных снимков можно посмотреть командой snap saved и восстановить snap restore снимок. Снимки можно удалить с помощью snap forget снимок, чтобы освободить место на диске.

Кроме того, начиная с версии snapd 2.39, снимок делается автоматически всякий раз, когда пакет snap удаляется из системы. Эти снимки по умолчанию хранятся в течение 31 дня. Период хранения может быть настроен на 24 часа или увеличен до более продолжительного периода времени. Кроме того, функция создания снимка может быть полностью отключена.

Параллельные установки

Существующие системы упаковки софта в Linux плохо работают с одновременной установкой нескольких версий одного и того же приложения. В некоторых особых случаях разработчикам определённого софта идут на встречу. В репозиториях доступно несколько версий небольшого набора инструментов, таких как компиляторы gcc-6 и gcc-7, которые могут быть установлены одновременно. Однако это только для конкретных пакетов. Это не доступно большинству разработчиков, тем более прикладного софта.

Snap решают эту проблему с помощью экспериментальной функции параллельной установки. Пользователи могут устанавливать несколько версий одной и той же программы одновременно. Каждому может быть присвоен собственный «ключ экземпляра», который является уникальным именем для ссылки на эту установку. Затем пользователь может выбрать какой экземпляр запустить или даже запустить оба. Например, пользователю может потребоваться, чтобы как стабильная, так и ежедневная сборки VLC были установлены одновременно, чтобы он мог тестировать предстоящие функции, при этом всё ещё имея возможность воспроизводить видео в стабильной версии, если ежедневная сборка нестабильна.

Поиск программ

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

В течение нескольких лет разработчики публиковали свои программы в своих сторонних репозиториях, в Personal Packages Archive (PPA), на страницах GitHub или на страницах своего собственного сайта.

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

Snap Store решает эту проблему несколькими способами. Менеджеры пакетов графического рабочего стола GNOME Software и KDE Discover обладают плагинами, которые могут выполнять поиск в Snap Store. Кроме того, веб-интерфейс Snap Store позволяет пользователям просматривать и искать новые приложения по категориям или по издателям.

Упрощение публикации программного обеспечения в Snap Store означает, что доставка обновлённого snap может стать частью стандартного процесса релиза приложений. Как только разработчики публикуют свои snap в Store, они сразу видны пользователям как в графических программах типа GNOME Software и KDE Discover, так и в Интернете.

Разработчик может напрямую ссылаться на свою страницу Snap Store в качестве электронной витрины своего приложения. На страницах Store показаны скриншоты, видео, описание, а также опубликованные в настоящее время версии и сведения о том, как установить приложение. В Store представлены кнопки и карточки, которые можно встроить в различные web-страницы и посты блога для продвижения вашей программы. Пользователи могут делиться этими страницами с друзьями и коллегами, которые могут оценить приложение и это подтолкнет других пользователей обратить внимание на вашу программу.

Кроме того, команда Snap Advocacy регулярно освещает новые приложения в социальных сетях и в блогах, чтобы привлечь внимание пользователей к привлекательному, современному и полезному новому программному обеспечению. Команда также регулярно обновляет список «Избранных приложений», представленный как в графических менеджерах пакетов Рабочего Стола, так и на первой странице веб-интерфейса Snap Store.

Разработчикам рекомендуется следить за тем, чтобы страница их магазина выглядела великолепно, благодаря скриншотам, видео, подробному описанию приложения и ссылкам для поддержки. Издатели приложений могут связаться с командой Snap Advocacy через форум Snapcraft, чтобы запросить, чтобы их приложение было включено в будущее обновление социальных сетей или блогов или рассматривалось для включения в качестве рекомендуемой записи в Snap Store.

Заключение

В этой статье перечислены восемь функций, которые отличают Snapcraft, Snap и Snap Store от других традиционных систем упаковки. Многие технические детали упаковки и доставки программного обеспечения мало интересны простым людям, которым важно получать свежее программное обеспечение с обновлениями безопасности. Это именно то, что стремятся сделать snap. Остальное - вишенка на торте.

Дополнительные материалы:
Snap vs AppImage.
Snap vs Deb.
Значительное улучшение первого старта программ в snap.

    Twitter   


Разделы

Главная
Новости
Ворох бумаг
Видео Linux
Игры в Linux
Безопасность
Статьи о FreeBSD
Статьи об Ubuntu
Статьи о Snappy
Статьи об Ubuntu Phone
Статьи о Kubuntu
Статьи о Xubuntu
Статьи о Lubuntu
Статьи об Open Source
Карта сайта