Snap, AppImage i Flatpak to trzy najbardziej znane dystrybucyjne formaty pakietów dla systemu Linux. Więc który wybrać?
Systemy Linux są popularne z wielu powodów, więc warto wiedzieć jak działa instalowanie aplikacji w Linux. Aplikacje w systemie Linux są dostarczane jako pakiety i mają różne rodzaje. Systemy pakowania różnią się pod względem instalacji, użyteczności, mechanizmów aktualizacji oraz wydajności.
Poniżej przyjrzymy się i porównamy trzy znane formaty pakietów:
, wszystkie niezależne od dystrybucji.
Jakie są formaty pakietów w systemach Linux?
Formaty pakietów to archiwa zawierające kod programu i metadane potrzebne do ich uruchomienia. Linux obsługuje kilka formatów pakietów, a programiści mogą zdecydować się na spakowanie swojej aplikacji w dowolnym formacie.
Jako użytkownik musisz pobrać wymagany pakiet i zainstalować go za pomocą menedżera pakietów, aby uruchomić aplikację. Ubuntu Linux i inne dystrybucje oparte na Debianie używają natywnie formatu pakietów z rozszerzeniem .deb, podczas gdy Fedora, RHEL i CentOS używają pakietów z rozszerzeniem .rpm. Pakiety natywne są szybkie, ponieważ zostały zaprojektowane i skompilowane specjalnie dla systemu i konkretnej architektury (np: i386, x86_64, czy armh), a także współdzielą biblioteki z tymi zainstalowanym już w systemie, dzięki czemu aplikacje są mniejsze.
Jednak pakiety natywne wymagają od użytkowników samodzielnego aktualizowania i utrzymywania zależności. Niezależne pakiety dystrybucji aplikacji, takie jak Snap, AppImage i Flatpak, zapewniają aplikacje, które mogą działać na różnych komputerach. Eliminują problemy z zależnościami, z którymi codziennie boryka się wielu użytkowników Linuksa i znacznie ułatwiają życie programistom. Jednak skutkuje to również większymi plikami binarnymi.
Nawiązując na chwilę do historii: kiedyś dystrybucje otwartych systemów operacyjnych takich jak Linux, czy FreeBSD były dostarczane z minimalną ilością pakietów i zarządzanie pakietami potrzebnymi dla nowo instalowanego narzędzia, czy też programu użytkowego a nawet serwera, polegało na ręcznym rozwiązywaniu konfliktów oraz gromadzeniu zależności (pakietów wymaganych). Jak domyślacie się pewnie, powstawało nam piekło plików oraz przy próbie zainstalowania kolejnych, pojawiały się inne. Czasami dochodziły do tego zależności cykliczne tzn. np. Apache – serwer www – potrzebował biblioteki libX w wersji 1.2 a inny pakiet w jego zależnościach wcześniej zainstalował bibliotekę libX w wersji 1.3 – to była jazda, aby rozpisać sobie sposób instalacji i osiągnąć cel – mowa tutaj o wczesnych latach 2000. Dzisiaj dzięki menadżerom pakietów nie musimy borykać się z takimi przygodami 😉 gdyż opisywane w tym artykule zarządcy pakietów doskonale sobie z opisanymi zjawiskami przy instalacji nowego oprogramowania w systemie Linux radzą.
Porównajmy: Snap vs. AppImage vs. Flatpak
Jak wspomniano powyżej, wszystkie trzy Snap, AppImage i Flatpak zapewniają środki do pakowania aplikacji niezależnych od dystrybucji Linuksa. Przyjrzyjmy się bliżej niektórym z ich cech, a także zaletom i wadom.
Snap
Snap to system pakowania opracowany przez Canonical – firma która wspiera dystrybucję Linux Ubuntu – i ma znaczące wsparcie korporacyjne. Po zainstalowaniu wersji snap aplikacji zawiera ona wszystkie biblioteki i zależności wymagane do uruchomienia tej aplikacji. Oszczędza to opiekunom aplikacji czas potrzebny na wdrożenie różnych kompilacji dla różnych systemów.
Można instalować snap bezpośrednio ze sklepu Snap Store lub za pomocą wiersza poleceń. Wiele popularnych dystrybucji Linuksa przyjęło Snap jako podstawowy menadżer pakietów w najbliższych wersjach, w tym Ubuntu, Manjaro, Linux Mint, Debian, Kali i RHEL. Inną kluczową zaletą aplikacji Snap jest to, że działają one również w systemach IoT i Cloud bez modyfikacji.
Snapy umożliwiają także użytkownikom korzystanie z wielu wersji tej samej aplikacji. Samoaktualizująca się natura snapów sprawia, że użytkownicy nie muszą się martwić o ręczne aktualizacje. Ponieważ jednak pakiety snap zawierają wszystkie niezbędne zależności, są one bardziej obszerne niż pakiety domyślne .deb lub .rpm. Ponadto wersja snap wielu aplikacji działa wolniej niż AppImage lub Flatpak.
Poniżej znajduje się kilka poleceń konsoli Linux, które mogą być przydatne, jeśli dopiero zaczynasz od nich. Funkcja każdego polecenia jest wymieniona jako komentarz:
# instalacja VLC Media Player
snap install vlc
# listowanie zainstalowanych pakietów snap
snap list
# aktualizacja VLC Media Player
snap refresh vlc
# przywracanie VLC Media Player do poprzedniej wersji
snap revert vlc
# usuwanie VLC Media Player
snap remove vlc
AppImage
AppImage to świetny sposób na wypróbowanie nowych aplikacji bez instalowania ich na komputerze. Koncepcja AppImage jest dość prosta: jeden plik na aplikację.
W ten sposób programiści mogą zapewnić przenośność swoich aplikacji, a użytkownicy mogą wypróbować nowe pakiety bez instalacji. Główną zaletą AppImages jest to, że nie wymagają uprawnień sudo w systemie Linux. Po prostu wszystko działa z założenia w przestrzeni użytkownika.
Aby wypróbować AppImage, wystarczy pobrać pakiet, ustawić go jako plik wykonywalny i uruchomić. To oznacza, że zawartość pliku AppImage to jest binarna reprezentacja wszystkich bibliotek, konfiguracji, zależności oraz assetów, które są niezbędne do niezależnego działania programu w naszym systemie Linux. AppImage jest wieloplatformowe, więc na innych systemach również można używać.
Warto od razu wspomnieć, że o ile snap programu to mogą być Megabajty, to AppImage programu będzie zajmował na dysku bliżej Gigabajta ze swoimi zależnościami.
AppImageHub to centralne repozytorium pakietów AppImage i zawiera wiele popularnych aplikacji. Możesz również pobrać AppImages ze stron internetowych dostawców, jeśli są dostępne. Ale trzymaj się z dala od AppImages pobranych z niezaufanego źródła, bo mogą to być wirusy, malware lub trojany siejące spustoszenie w systemie lub wykradające prywatne dane.
AppImage są zwykle szybsze niż snapy lub flatpaki i wymagają mniej miejsca do przechowywania. Są również łatwe do usunięcia, ponieważ możesz usuwać pliki AppImage w dowolnym momencie bez przerywania innych procesów systemowych. To są po prostu jednoplikowe dystrybucje binarne oprogramowania, z kompletem zależności.
Poniżej znajdują się polecenia potrzebne do uruchomienia pliku AppImage w systemie Linux z wiersza poleceń:
# nadajemy uprawnienia do uruchomienia pliku program w formacie AppImage (mają charakterystyczne rozszerzenie)
chmod a+x program.AppImage
# uruchamiamy program z pliku AppImage
./program.AppImage
Flatpak
Flatpak to kolejny niezależny od dystrybucji system pakowania, który dostarcza aplikacje z wymaganymi zależnościami. Użytkownicy mogą znaleźć i zainstalować płaskie paczki ze sklepu dystrybucyjnego popularnych systemów Linux lub za pośrednictwem interfejsu terminala / konsoli / CLI.
Flatpak to system zdecentralizowany, co oznacza, że możesz uzyskać pakiety z kilku repozytoriów lub zdalnych (w terminologii Flatpak). Flathub jest najpopularniejszym pilotem i ma tysiące aplikacji.
Aplikacje Flatpak działają domyślnie w piaskownicy, środowisku aplikacji oddzielonym od środowiska uruchomieniowego systemu hosta. Ta piaskownica zawiera wszystko, co jest potrzebne do uruchomienia oprogramowania. Taki izolowany charakter pakietów Flatpak sprawia, że są one z natury bezpieczne, a zmiany systemowe mogą wystąpić tylko wtedy, gdy użytkownik udzieli wyraźnego pozwolenia.
Jednak pakiety Flatpak zwykle zajmują więcej miejsca niż Snaps lub AppImages. Są również wolniejsze w porównaniu do AppImages, ale szybsze niż pakiety Snap. Flatpak jest domyślnie instalowany w nowoczesnych dystrybucjach Linuksa. Jeśli tak nie jest, możesz zainstalować go za pomocą następujących poleceń:
W Ubuntu/Debian:
sudo apt install flatpak
W Arch Linux:
sudo pacman -S flatpak
W Fedora, RHEL, and CentOS:
sudo dnf install flatpak
Możesz dodać repozytorium Flathub do swojego systemu, korzystając z poniższego fragmentu:
flatpak install flathub org.videolan.VLC
Przegląd uprawnień w aplikacji FlatPak – możemy szybko dowiedzieć się, z jakich zależności korzysta program:
flatpak info –show-permissions org.kde.Platform
Snap vs. AppImage vs. Flatpak: w którą stronę iść?
W związku z tym, że wszystkie trzy formaty pakietów są niezależne od systemu operacyjnego, możesz wybrać dowolny z nich. Istnieją jednak scenariusze, w których każdy z nich przewyższa pozostałe. Na przykład, jeśli liczy się dla Ciebie szybkość aplikacji i rozmiar programu, idealnym rozwiązaniem będzie AppImage.
Natomiast jeśli chcesz uruchomić swoją aplikację na różnych platformach, Snapy powinny być dobrym rozwiązaniem. Z drugiej strony Flatpaks zapewnia programistom większą kontrolę. Tak więc, jeśli jesteś programistą, możesz wybrać Flatpak zamiast Snaps. Dostępność aplikacji jest również ważnym czynnikiem przy wyborze między Snap, AppImage i Flatpak.
Najlepszy niezależny od dystrybucji system pakowania dla systemu Linux
Pakiety niezależne od dystrybucji to świetny sposób na zapewnienie przenośności oprogramowania. Wszystkie trzy opisane powyżej: Snap, AppImage i Flatpak mają coś wyjątkowego do zaoferowania użytkownikom końcowym systemu Linux. Mimo to od Ciebie zależy, którego chcesz użyć. Co więcej, wypróbuj jedne z najlepszych aplikacji na Linuksa ze wszystkich trzech dziedzin i zobacz, co działa dla Ciebie.
Podsumowanie cech menadżerów pakietów w postaci tabeli porównawczej
Poniższa tabela podsumowuje główne różnice między formatami plików Snap, Flatpak i AppImage. Większość z nich nie wymaga wyjaśnień, inne punkty wyjaśniono poniżej tabeli porównawczej.
Snap | Flatpak | AppImage | |
Wybór uprawnień jak w systemie Android (GUI and CLI) | Tak | Tak | Nie |
Wsparcie piaskownicy / Sandboxing | Tak | Tak | Tak |
Obowiązek piaskownicy / Sandboxing | Tak | Tak | Nie |
Wsparcie dla motywów natywnych | Tak (z zastrzeżeniami) | Tak (z zastrzeżeniami) | Tak (z zastrzeżeniami) |
Obsługa bibliotek dołączonych | Tak | Tak | Tak |
Przenośność aplikacji | Tak (z zastrzeżeniami) | Tak (z zastrzeżeniami) | Tak |
W pełni zawarte, pojedyncze, wykonywalne wsparcie | Nie | Nie | Tak |
Internetowy sklep z aplikacjami | Tak | Tak | Tak |
Wtyczki do oprogramowania Desktop App Store | Tak | Tak | Nie |
Obsługa wielu wersji równoległych aplikacji | Yes | Yes | Tak |
Automatyczne aktualizacje | Tak | Tak | Tak (z zastrzeżeniami) |
Obsługa Chrome OS (za pośrednictwem kontenerów Crostini) | Tak | Tak | Tak |
Rozmiar aplikacji | Zmienny, ale większy niżeli AppImage | Zmienny, ale większy niżeli AppImage | Średni |
Liczba aplikacji dostępnych w App Store | Wysoka | Niska | Średnia |