Snap і Flatpak - системи розгортання програмного забезпечення та керування пакетами для Linux, які стали дуже популярними останнім часом. На перший погляд обидві системи досить схожі. Обидві мають певний рівень ізоляції, пакети містять усі залежності програми, після пакування програма може бути встановлена в будь-який дистрибутив, що підтримує даний формат пакетів. І в Snap, і в Flatpak було запаковано вже понад 1000 програм. Але чим же вони відрізняються? І що обрати?
У цій статті я хочу провести детальне порівняння Snap та Flatpak. Я розповім про деякі технічні деталі їх роботи, призначення, переваги та недоліки. Але я хочу більше зосередитися на використанні цих пакетів з точки зору користувача та пропущу все, що пов'язано з розробкою. Я не пов'язаний з розробниками Snap чи Flatpak, просто провів невелике дослідження в Інтернеті, розібрався, як Snap і Flatpak працюють у моїй системі, і ось результат.
Зміст
- Для чого було створено Snap?
- Для чого було створено Flatpak?
- Як працює Snap?
- Як працює Flatpak?
- Snap vs Flatpak. У чому різниця?
- Висновки
Для чого було створено Snap?
Перш ніж ми почнемо порівнювати формати, давайте подивимось, для чого вони були створені. Canonical протягом багатьох років намагалася покращити доставку нових версій програмного забезпечення для користувачів Ubuntu. Основна проблема полягала в тому, що нові версії Ubuntu виходять фіксованими релізами двічі на рік, і користувачам доводиться чекати півроку, щоб отримати нові версії програм, або навіть два роки, якщо вони хочуть використовувати тільки LTS-релізи. Деякі програми, наприклад, браузери, розвиваються дуже швидко, і швидка доставка нових версій таких програм кінцевому користувачу просто необхідна. Навіть шість місяців - занадто довгий термін.
Спочатку Canonical запускає PPA, потім експериментує з точковими випусками, такими як 22.04.1, 22.04.2, до яких входять нові версії браузера та графічних драйверів для LTS-дистрибутивів, потім запускає Software Center поверх PPA. Усі ці спроби мають свої недоліки. PPA вважається небезпечним, оскільки кожен може створити PPA та оновлювати пакети без перевірки Canonical. Крім того, розробникам потрібно створити пакет для кожного випуску Ubuntu, який вони хочуть підтримувати, що вимагає багато роботи та витрат часу. Точкові релізи також вимагають багато часу від мейнтейнерів. Software Center вирішує деякі проблеми, оскільки там пакети проходили перевірку Canonical перед додаванням. Однак для кожного випуску Ubuntu все одно необхідно заново надсилати програму на перевірку.
Приблизно у 2013 році Canonical почала розробляти Ubuntu Touch та Ubuntu для IoT-пристроїв. Ця галузь мала свої особливості та вимоги до програмного забезпечення, такі як регулярні оновлення та високий рівень безпеки для зменшення кількості вразливих IoT-пристроїв в інтернеті, а також спрощення розробки та підтримки застосунків для різних версій Ubuntu Touch. Тому було створено пакети Click, а згодом і Snap.
Пакети Snap вирішили більшість проблем, розглянутих вище. Перед додаванням до магазину вони перевіряються Canonical або спільнотою, щоб переконатися в їх безпеці. Snap має регулярні автоматичні оновлення, тож ви не зможете забути його оновити. А також, створений один раз пакет може працювати в усіх дистрибутивах із встановленим snapd. Трохи пізніше Canonical додали підтримку Snap в Ubuntu Desktop. А саме в Ubuntu 16.04.
Для чого було створено Flatpak?
Не лише Canonical намагалася вигадати кращий спосіб постачання програм та зробити їх більш безпечними. Розробник GNOME Alexander Larsson експериментував зі створенням універсальних пакетів застосунків за допомогою API контейнеризації та просторів імен ядра Linux з 2007 року. У розробників програм для Linux були ті ж проблеми, що й у мейнтейнерів Ubuntu. Їм потрібно було не лише розробити та випустити програму, але й протестувати її працездатність хоча б на найпопулярніших дистрибутивах. Багато дистрибутивів мали різні версії бібліотек або навіть різні менеджери пакетів, такі як rpm та deb.
Приблизно у 2015 році Alexander Larsson представив xdg-app для вирішення цих проблем. Цей інструмент надавав розробникам застосунків середовища виконання, які називалися Runtime, що використовувалися застосунком для взаємодії з середовищем робочого столу та були проміжною ланкою між застосунком та операційною системою. Таким чином, застосунок можна було встановити на кожен дистрибутив, у якому є xdg-app та необхідне середовище виконання. Перевага такого підходу полягала в тому, що можна було мати декілька середовищ виконання з різними версіями бібліотек. Крім того, кожен застосунок запускався в пісочниці для підвищення безпеки. Ідея полягала в тому, щоб запобігти доступу застосунку до користувацьких файлів, якщо він не потрібен.
Через кілька років xdg-app еволюціонував у Flatpak, але в ньому й досі використовується концепція середовищ виконання та пісочниці. Для спрощення встановлення та пошуку застосунків новими користувачами, було створено репозиторій FlatHub. Втім, технологія повністю відкрита, і кожен може створити свій власний репозиторій.
Як працює Snap?
Canonical прагне зробити Ubuntu максимально безпечною, тому в них є лише один Snap Store, де всі пакети перевіряються перед додаванням. Імплементація snap-репозиторію є пропрієтарною, тому ніхто не може створювати альтернативні репозиторії. Все, що вам потрібно знати, це те, що ви як користувач можете шукати пакети в цьому репозиторії, встановлювати останню доступну версію, обирати канал (стабільний/останній) та перевіряти наявність оновлень.
Програми Snap пакуються в самодостатній файл-образ за допомогою SquashFS. Цей файл має розширення .snap. Усі файли .snap, встановлені у вашій системі, знаходяться в каталозі /var/lib/snapd/snaps/. Існує два типи пакетів: програми та бібліотеки snap core. Програмам потрібен інтерфейс для взаємодії з операційною системою та snapd. Такий інтерфейс надають бібліотеки snap core. В одній системі може бути встановлено декілька версій core, щоб підтримувати пакети, розроблені для різних версій Ubuntu.
Snap пакети оновлюються автоматично, і snapd перевіряє наявність оновлень чотири рази на день. Його не можна повністю вимкнути, але оновлення можна відкласти або налаштувати періодичність оновлень. Коли пакет snap оновлюється, він також зберігає попередні версії у вашій файловій системі. За замовчуванням зберігаються дві попередні версії. Ці версії називаються ревізіями. І ви можете використовувати ці збережені версії пізніше, щоб повернути попередню версію пакета, якщо щось піде не так. Крім того, з 2017 року snapd підтримує дельта-оновлення, коли завантажується не повний пакет, а лише змінені дані.
Кожен пакет snapd має бути змонтований у файлову систему перед використанням. Тому зазвичай у виводі lsblk ви бачите багато точок монтування snap:
lsblk

За замовчуванням у каталозі /snap є папка для кожного пакета та кожної ревізії. Наприклад, тут transmission - це назва пакета, а 67 - ревізія:
ls /snap/transmission/

Але Firefox оновлюється частіше, тому в моїй системі вже є не лише остання версія, а й дві попередні:

Пакет монтується в каталог ревізії, а потім туди ж монтуються всі залежності пакету, інтерфейси тощо. Але на хост-системі ви побачите лише вміст файлу snap:

Snapd використовує технологію mount namespaces, щоб зробити ці точки монтування доступними лише процесам всередині пакета snap. Втім, ви можете дослідити їх, підключившись до командної оболонки пакета за допомогою такої команди:
snap run --shell transmission

Шлях до каталогу з даними snap пакета знаходиться у змінній середовища $SNAP. Наприклад:
echo $SNAP
ls /snap/transmission/67
Сюди можуть бути змонтовані каталоги хоста або каталоги з інших snap-пакетів. Це монтування налаштовується за допомогою слотів та інтерфейсів під час створення snap-пакета.

Також тут ви можете спробувати отримати доступ до деяких папок у вашій файловій системі. Наприклад, до документів у домашньому каталозі або до конфігураційних файлів з /etc/. І, найімовірніше, ви отримаєте помилку permission denied:
ls /etc/

Програми Snap можуть перебувати в одному з двох режимів обмеження: strict та classic. У режимі strict використовуються профілі AppArmor для обмеження доступу до всіх файлів, до яких программа не повинна мати доступу. А також використовуються профілі seccomp для обмеження доступу до системних викликів ядра. У класичному режимі пакети можуть отримати доступ до всіх файлів у файловій системі.
Налаштування дозволів Snap здійснюється за допомогою слотів та інтерфейсів. Це просто абстракція, яка дозволяє вказати, які функції будуть дозволені для використання. Їх можна переглянути за допомогою наступної команди:
snap connections transmission

Додатково налаштувати дозволи Snap можна у застосунку System Settings на вкладці Apps:

Там перелічені всі програми, але тільки для Snap ви побачите детальне налаштування дозволів. Також програмам потрібно десь зберігати свої дані. Тому Snap надає дві каталоги для даних: /var/snap/ та ~/snap в домашній директорії користувача. Посилання на ці каталоги розміщуються в наступних змінних середовища:
- SNAP_DATA - загальносистемні дані пакету snap для конкретної ревізії
- SNAP_USER_DATA - користувацькі дані пакету snap для конкретної ревізії
- SNAP_COMMON - загальносистемні дані пакету, спільні для всіх ревізій
- SNAP_USER_COMMON - користувацькі дані пакету, спільні для всіх ревізій
echo $SNAP_DATA

При видаленні snap пакета всі ці дані зберігаються у вигляді знімка в /var/lib/snapd/snapshots/.
Для запуску програми зі Snap можна використати таку команду:
snap run transmission
Але ви також можете запустити його, ввівши назву програми, як і для звичайних програм. Це працює тому, що snapd створює символічні посилання для всіх доступних виконуваних файлів snap у /snap/bin на /usr/bin/snap.
ls -l /snap/bin/transmission

Коли ви запускаєте будь-яке посилання, команда snap дивиться на перший аргумент, щоб визначити назву програми, а потім просто запускає програму з потрібного snap пакета. Тому ви не помітите різниці. Також іконки та файли ярликів експортуються до /var/lib/snapd/desktop/icons/ та /var/lib/snapd/desktop/applications/. Таким чином, ви можете запускати ці програми і з головного меню.
Як працює Flatpak?
Вихідний код Flatpak повністю відкритий. Кожен може створити свій власний репозиторій, і користувачі можуть використовувати його для встановлення програм. Проте для спрощення пошуку програм існує один найбільш популярний репозиторій, який має назву Flathub. Кожна програма в ньому затверджується адміністраторами Flathub на предмет відповідності вимогам репозиторію. Крім того, програми можуть публікувати як їх розробники, так і користувачі. Програми, опубліковані розробниками, мають галочку на своїй сторінці і вважаються перевіреними:

Технічно кожен репозиторій Flatpak дуже схожий на git-репозиторій, але для бінарних файлів. Технологія, яка використовується для організації роботи репозиторію називається ostree. Кожна програма в репозиторії - це гілка, а кожна версія - це коміт. Таким чином, ви можете вільно переглядати інформацію про всі попередні версії застосунку та встановлювати будь-яку з них. Наприклад, ось так можна подивитися журнал історії версій для Transmission:
flatpak remote-info --log flathub com.transmissionbt.Transmission

Також ви можете оновити або знизити версію застосунку до певного коміту:
flatpak update --commit=1d4ddca72967f38c0339ab80dda38eb173e048800bfd11d635d21ec24781d477 com.transmissionbt.Transmission

У графічному інтерфейсі можна керувати версіями встановлених Flatpak програм за допомогою Warehouse. При оновленні пакетів Flatpak завантажуються лише змінені дані, а не весь пакет. Після виконання оновлення в терміналі ви побачите два розміри в колонці Download, перший - дельта - це фактично завантажений розмір, а другий - повний розмір завантаження:
flatpak update

Програми Flatpak розміщуються в /var/lib/flatpak/ у файловій системі. Оскільки програми можуть працювати в кожному дистрибутиві, де встановлено Flatpak, потрібні універсальні бібліотеки, які працюватимуть як проміжна ланка між операційною системою та програмою. Як я вже казав, ці бібліотеки називаються Runtime. Ця концепція була представлена на GNOME Developer Hackfest у 2013 році. На відміну від Snap, існують різні Runtime з різним набором інструментів, наприклад, GNOME Platform, Freedesktop, KDE platform тощо. Програми та бібліотеки розміщені по різних каталогах: /var/lib/flatpak/app для програм та /var/lib/flatpak/runtime для бібліотек:
ls /var/lib/flatpak/app

Сама програма Flatpak - це просто каталог у файловій системі. Наприклад, файли з пакета Transmission розміщуються в /var/lib/flatpak/app/com.transmissionbt.Transmission/current/active/. Для того щоб програми можна було запускати з головного меню, їхні ярлики та іконки експортуються до папки /var/lib/flatpak/exports/share/. До того ж у вашій файловій системі зберігається лише поточна версія пакета:
ls /var/lib/flatpak/app/com.transmissionbt.Transmission/current/active/

Якщо ви хочете подивитись, до чого програма може отримати доступ, вам потрібно увійти до командної оболонки програми. Наприклад, використайте цю команду, щоб запустити оболонку для GNOME Clocks:
flatpak run --command=sh org.gnome.clocks

Тут ви можете побачити, як виглядає внутрішнє середовище застосунку. Застосунок знаходиться в пісочниці, але для мене це більше схоже на контейнер. Тут є власна коренева файлова система, а файли застосунку монтуються в каталог /app:

За замовчуванням це не коренева файлова система Linux, а спеціальна файлова система з усіма необхідними бібліотеками, сокетами, пристроями тощо. Наприклад, у каталозі /etc/ багато порожніх каталогів, і каталог /home також порожній:

Важливо зазначити, що в каталозі /proc, який містить усю інформацію про процеси, є інформація тільки про процеси, запущені в пісочниці:

Я обрав Clocks, тому що він не потребує спеціального доступу до файлів. Звісно, якщо програмі потрібен доступ до кореневої файлової системи або файлів користувача, вона може запитати цей дозвіл, і реальна файлова система буде змонтована в пісочницю. Це широко використовується для обходу проблем з дозволами, але навіть у цьому випадку програма в пісочниці не може монтувати деякі каталоги з кореневої файлової системи, наприклад: /root та /proc. Деякі інші каталоги можуть бути змонтовані, але в /run/host, а не в root. І якщо програма захоче змонтувати домашній каталог користувача, вона все одно не зможе побачити у файловій системі дані інших програм Flatpak.
Для підвищення безпеки та забезпечення кращого контролю над доступом програм до ресурсів розробники Flatpak створили технологію Portals, яка дозволяє взаємодіяти з середовищем робочого столу та файлами без прямого доступу до файлової системи. Наприклад, Portals дозволяє робити знімки екрана, записувати екран, обирати файл, тощо. Тепер Portals належить Freedesktop і може використовуватися всіма програмами. Оскільки розробники GNOME зробили внутрішній API GNOME приватним, зараз Portals - єдиний спосіб отримати доступ до певних функцій середовища робочого столу.
Технічно, Portal - це DBus-адреса з певним API, який програма може використовувати для виконання дій або збору даних без прямого доступу до сокетів чи файлової системи. При цьому для доступу до кожного порталу програма повинна запитати дозвіл у користувача. У командному рядку пісочниці пакета можна виконати наступну команду, щоб побачити доступні портали та інші адреси DBus:
dbus-send --print-reply --dest=org.freedesktop.DBus /org/freedesktop/DBus org.freedesktop.DBus.ListNames

Перевірити дозволи для пакета Flatpak можна за допомогою команди info з опцією --show-permissions:
flatpak info --show-permissions io.missioncenter.MissionCenter

Крім того, можна перевірити і навіть змінити дозволи програм Flatpak за допомогою програми Flatseal. Вона показує всі доступні сокети, ресурси, каталоги, інтерфейси DBus, портали тощо у графічному інтерфейсі:

Якщо програмі Flatpak потрібен доступ, який не надається в Portals і не може бути наданий монтуванням файлових систем, вона може використовувати flatpak-spawn для запуску довільного процесу в хостовій системі. Для цього потрібен дозвіл на звернення до DBus за адресою org.freedesktop.Flatpak. Під час встановлення Flatpak показує дозволи, які необхідні програмі, тож ви будете знати, до чого програма з пакета може отримати доступ ще до встановлення:

Дані для програм Flatpak знаходяться в ~/.var/app/. Глобальних директорій немає, і всі дані, пов'язані з користувачем, зберігаються в його домашній папці. Наприклад, для Transmission:

Також ви можете подивитись шляхи до каталогів з даними програм, які зберігаються у змінних середовища:
- XDG_STATE_HOME - стан програми (наприклад, /var/lib)
- XDG_CACHE_HOME - кеш програми
- XDG_CONFIG_HOME - файли конфігурації програми
- XDG_DATA_HOME - ресурси програми (наприклад, /usr/share)
При видаленні програми за замовчуванням усі ці дані залишаються у вашій файловій системі. Для запуску програм використовується команда. flatpak з опцією run.
Snap vs Flatpak. У чому різниця?
Тепер ви знаєте, для чого було створено ці формати пакетів, та розумієте, як вони працюють. Давайте підсумуємо все та порівняємо їх за найважливішими аспектами.
1. Відкритий вихідний код
І Snap, і Flatpak - це системи керування пакунками з відкритим вихідним кодом. Обидві розробляються та підтримуються величезною спільнотою по всьому світу. Проте реалізація репозиторію Snap Store на серверній частині є пропрієтарною. API, за допомогою якого snapd отримує пакунки, добре задокументований, і технічно можливо створити альтернативну реалізацію. Більше того, деякий час тому були спроби, наприклад Kebe, але на момент написання статті вони виглядають закинутими. Тож працюючих альтернатив з відкритим вихідним кодом немає. Це може мати певні недоліки, наприклад, дистрибутиви та організації не можуть створювати власні репозиторії, щоб не залежати від Canonical. А якщо Canonical вирішить припинити підтримку Snap, спільнота не зможе зробити форк цього репозиторію та запустити альтернативу.
Репозиторій Flatpak базується на інструменті з відкритим вихідним кодом ostree, і користувачі можуть створювати стільки репозиторіїв, скільки забажають. Проте існує один, найбільш популярний репозиторій FlatHub, який має більшість переваг, притаманних Snap Store, таких як перевірка пакетів перед додаванням для захисту користувачів та простий інтуїтивно зрозумілий інтерфейс, що дозволяє шукати й встановлювати пакети у веб-браузері.
2. Безпека
В обох форматах існує ізоляція програм для захисту даних користувача та системи. Обидва мають механізми для обходу цієї ізоляції. Snap використовує AppArmor та Seccomp. AppArmor може гарантувати, що застосунок не матиме доступу до каталогів, які йому не потрібні. Але програмам для робочого столу дуже часто потрібно більше дозволів, тому вони використовують режим classic, коли ізоляція взагалі відключена. Такі пакети затверджуються вручну перед публікацією, щоб знизити ризики безпеки. До того ж snap-пакети можуть мати доступ до /proc та інших віртуальних файлових систем навіть у режимі strict, що дозволяє створювати snap-пакети для багатьох інструментів командного рядка, наприклад htop.
Flatpak має ізоляцію, яка більше схожа на контейнеризацію, реалізовану за допомогою bwrap. Кожна програма має свою власну кореневу файлову систему. Усі сокети, каталоги та інтерфейси, до яких вона може отримати доступ, мають бути явно змонтовані в цій файловій системі. Все, що не дозволено, заборонено. Передбачається, що програми використовуватимуть портали для доступу до різних системних функцій, тому існує flatpak-spawn, який може виконувати код у системі-хості. Саме тому Mission.Center може бачити всі системні процеси. Snap-застосунки можуть використовувати портали, але flatpak-spawn доступний лише для Flatpak застосунків.
Як бачите, за рівнем безпеки обидва варіанти не є ідеальними. Snap дозволяє розробникам налаштувати більш гнучкі обмеження для файлів та каталогів. Але портали - це майбутнє і для Flatpak, і для Snap. Найімовірніше, у майбутньому програми Linux матимуть систему налаштування дозволів, як у програмах на Android.
3. Налаштування дозволів
Розробники можуть налаштовувати, до яких файлів і системних функцій програма може отримати доступ як для Snap, так і для Flatpak. Проте, як користувач, я хочу мати можливість змінювати ці налаштування та надавати додаткові права доступу до файлової системи чи сокетів. Для пакетів Snap ви можете керувати лише попередньо визначеними налаштуваннями, вмикаючи/вимикаючи перемикачі або обираючи значення зі списку в налаштуваннях системи. Можливо, в командному рядку доступно більше налаштувань, але розібратись, що потрібно змінити, щоб забезпечити доступ до тієї чи іншої функції, не так просто.
Flatpak дозволяє налаштовувати практично будь-які дозволи за допомогою програми Flatseal. Ви можете дозволити або заборонити виконання коду на хості, надати доступ до необхідних сокетів, змонтувати додаткові каталоги хост системи в пісочницю, дозволити доступ до системних пристроїв, додати змінні середовища, налаштувати доступні адреси DBus тощо.
3. Оновлення
Snap був розроблений для пристроїв IoT, які мають працювати більшу частину часу без участі людини. У багатьох програмах постійно виявляються та виправляються вразливості. Тому такі IoT-пристрої, як роутери, камери, відеореєстратори тощо, повинні отримувати оновлення регулярно. Snap оновлює пакети автоматично та перевіряє наявність оновлень чотири рази на день. Це чудово підходить для IoT, але не дуже зручно для персональних комп'ютерів. Програма буде оновлена, навіть якщо ви її використовуєте. Наприклад, ви використовуєте Firefox, а потім бачите повідомлення про те, що потрібно перезавантажити браузер, тому що він був оновлений. Також розробники можуть повернути версію пакета до попередньої. Однак ви, як користувач, можете встановити тільки останню версію або використовувати попередні версії, які зберігаються у вашій системі.
Flatpak взагалі не підтримує автоматичні оновлення. Але якщо ви встановите інтеграцію з GNOME Software, то ваші Flatpak пакети будуть оновлюватися під час завантаження системи. Зазвичай це швидко та зручно. З одного боку, у вас завжди є свіжі версії програм, а з іншого - оновлення не перериває робочий процес.
4. Використання дискового простору
Файли обох форматів пакетів займають багато місця на диску. Пакети містять усі необхідні бібліотеки та ресурси, тому вони не можуть бути маленькими. Крім того, snap зберігає резервні копії попередніх версій пакетів після оновлення. За замовчуванням у вас є дві попередні версії, але ви можете налаштувати зберігання лише однієї резервної версії. Це означає, що якщо розмір пакета становить 1,5 Гб, snapd буде споживати щонайменше 3 Гб для цього пакета. І я не рекомендую видаляти резервну копію пакета, тому що якщо щось піде не так, ви не зможете отримати попередню версію зі репозиторію snapd. Перевага Snap-пакетів у тому, що вони стиснені, тому займають менше місця, ніж звичайні програми.
Flatpak зберігає лише поточну версію пакета. Проте цей пакет являє собою просто каталог з файлами, без будь-якого стиснення. Я провів тест на двох віртуальних машинах з Ubuntu, встановив 30 програм за допомогою Snap, а потім за допомогою Flatpak.
Використаний простір на кореневому розділі після встановлення всіх програм за допомогою Snap збільшився на 8 гігабайт. Проте цю цифру слід помножити на три, оскільки в міру виходу нових версій зайнятий простір зростатиме. Три - тому що одна поточна версія і дві резервні. Тож реальне споживання диска буде близько 24 Гбайт. Потім я встановив ті самі 30 програм за допомогою Flatpak, і використаний простір збільшився на 13 ГБ. Звісно, програми також зберігатимуть кеш та дані користувача, але малоймовірно, що в майбутньому ці програми займатимуть набагато більше місця. Таким чином, я можу сказати, що Flatpak використовує менше дискового простору, ніж Snap у довгостроковій перспективі.
5. Популярність
Нещодавно на сайті статистики snap повідомлялося, що в магазині Snap налічується близько 8000 пакетів. Це дуже багато. Решта статистики, така як кількість встановлень та активних користувачів, доступна лише розробникам застосунків. Ubuntu використовує Snap за замовчуванням, тому у багатьох користувачів деякі застосунки встановлені зі Snap Store за замовчуванням. Проте багато пакетів - це браузери, неофіційні клієнти для чогось або системні компоненти для Ubuntu Core. Snap Store не містить деяких програм із GNOME Circle. Наприклад, немає Console, Text Pieces та Polari.
Статистика FlatHub є відкритою та доступною за адресою analyzen.com. На момент написання статті там налічується 2500 програм та понад 3 мільйони завантажень на день. Ви можете знайти безліч різноманітних програм, які добре класифіковані. Там є всі програми з GNOME Circle та багато іншого.
Важко визначити, який репозиторій програм більш популярний, оскільки я не можу знайти відкритої статистики для Snap Store, але для мене FlatHub виглядає більш живим. Хоча обидва досить популярні. Усі найбільш використовувані програми можна знайти як у Snap Store, так і у FlatHub.
6. Запуск програм
Програми в пакетах Snap зручніше запускати з командного рядка, оскільки для запуску достатньо просто набрати назву програми та натиснути Enter. Немає потреби постійно писати snap run тощо.
Імена пакетів Flatpak дуже довгі тому, що вони містять не лише ім'я пакета, але також ім'я автора та префікс домену. Тому трюк із симлінками, як для пакетів Snap, не спрацює. Але це не так вже й погано. Якщо вам потрібно запустити застосунок Flatpak з командного рядка, ви можете скористатися автодоповненням Bash або створити псевдонім. Програми Flatpak призначені для запуску з головного меню, а не для CLI.
Швидкість запуску на момент написання статті приблизно однакова. Після перезавантаження програми Flatpak запускаються трохи довше, як і програми Snap. Втім, у моїх тестах обидва формати працювали доволі швидко.
7. Встановлення без інтернету
Ви можете завантажити будь-який пакет Snap зі Snap Store або з веб-сайту, а потім встановити його з опцією --dangerous локально, навіть якщо у вас немає доступу до інтернету. Це працює приблизно так само, як і з deb-пакетами, але вам не потрібно розв'язувати залежності, оскільки все необхідне вже запаковано в самодостатній образ.
Flatpak дозволяє розробникам створювати однофайлові образи з розширенням *.flatpak також. Проте зазвичай ніхто цього не робить, оскільки пакети Flatpak залежать від репозиторію для отримання оновлень. Завантажити пакет з Flathub неможливо, але за потреби можна створити USB з необхідними пакетами та їхніми метаданими для автономного встановлення.
Висновки
І Snap, і Flatpak дуже добре працюють у тій сфері, для якої вони були розроблені. Snap вирішує більшість проблем з безпекою та оновленнями для IoT-пристроїв. Більшість недоліків Snap для настільних комп'ютерів є перевагами для IoT-пристроїв. Flatpak, з іншого боку, надає більше контролю над версіями пакетів та дозволами для кінцевих користувачів, що краще для Desktop систем. Давайте проведемо стислий порівняльний аналіз Snap та Flatpak:
Параметр | Snap | Flatpak |
---|---|---|
Повністю відкритий вихідний код | Ні (Snap Store пропрієтарний) | Так (Ostree Open-Source) |
Користувачі можуть створювати свої репозиторії | Ні | Так |
Має щонайменше один популярний репозиторій | Так (Snap Store) | Так (Flathub) |
Підтримує ізоляцію програм | Так (AppArrmor, Seccomp) | Так (bwrap) |
Дозволяє повністю вимкнути ізоляцію | Так (classic confinement) | Ні (але можна змонтувати кореневу файлову систему в пісочницю) |
Дозволяє виконувати процеси поза пісочницею | Ні | Так (flatpak-spawn) |
Дозволяє монтувати /proc у пісочницю | Так | Ні |
Можна вимкнути автоматичні оновлення | Ні | Так (Немає автоматичних оновлень) |
Підтримує завантаження пакетів для встановлення без інтернету | Так (одним файлом) | Так (створення інсталяційного USB) |
Дозволяє завантажити попередню версію пакета | Ні (доступна лише остання) | Так (доступні всі раніше опубліковані версії) |
Зберігає попередні версії пакета в системі | Так (щонайменше одну) | Ні |
Простий запуск застосунків з командного рядка | Так | Ні (довгі імена) |
Використовує стиснення для файлів програми | Так (SquashFS, xz) | Ні |
Користувачі можуть налаштувати дозволи для програми | Частково (в System Settings) | Так (практично все можна налаштувати використовуючи Flatseal) |
Містить всі застосунки з Gnome Circle | Ні | Так |
Дисковий простір що займає пакет при оновленні зазвичай значно збільшується | Так (резервні копії) | Ні |
Дозволяє запускати полшоами в усіх дистрибутивах, які підтримують цю технологію | Так | Так |
Має універсальні бібліотеки для взаємодії застосунку з системою | Так (core) | Так (Runtimes) |
Автоматично оновлює застосунки навіть якщо вони запущені | Так | Ні |
Завантажує лише змінені дані під час оновлення замість всього пакета | Так | Так |
На мою думку, зараз Flatpak краще підходить для персональних комп'ютерів, оскільки не має неактуальних для них особливостей, використовує менше дискового простору та має систему дозволів, якою можна керувати в графічному інтерфейсі. Звісно, у Flatpak є певні проблеми, як і у Snap, але багато з них можна виправити за допомогою порталів. А що ви думаєте про все це? Напишіть у розділі коментарів нижче!