快轉到主要內容

Flatpak vs Snap vs AppImage,跨Linux發行版的套件格式比較

· 民國114年乙巳年
· ·
分類   Linux系統 Linux使用技巧
標籤   Flatpak Snap AppImage Freedesktop Specifications
目錄

The comparison of Flatpak, Snap, AppImage, the three universal and distro-agnostic package formats of Linux.

Ivon將在這篇文章討論三個Linux套件格式的異同,他們分別是Flatpak、Snap、AppImage。

基於官方文件和Linux社群的意見,以及Ivon個人觀察撰寫而成。

文末分享這三個套件格式的使用方式。

這三小?我只聽過APT
#

這不是三小,是三大跨Linux發行版的套件格式!Flatpak、Snap、AppImage這三個套件格式的目的相同,就是要解決跨Linux發行版安裝軟應用程式的問題。

我們知道Linux安裝應用程式,大部分是透過原生套件管理員(native package manager)下載安裝,像是Ubuntu的APT、Fedora的DNF、openSUSE的Zypper等等。Linux現在少說有100個以上的發行版(distribution),這就造成了軟體打包不一致問題。不同的發行版有不同的套件管理員,安裝應用程式指令不一樣。就連同一個系統,都可能在系統升級後發生套件依賴的(dependencies)衝突問題。

還有,各個發行版會維護自己的套件庫(repository),受歡迎的發行版會收錄很多程式,比方說Ubuntu、Arch Linux幾乎是什麼都有。相較之下,小眾發行版Void、Alpine要等社區成形後套件庫數量才會累積起來,不然就得手動從原始碼編譯了。這樣碎片化的情況,會讓應用程式版本不一致,造成更新不同步。

諸如以上種種問題,光是不同發行版之間的維護工作就會累死開發者了,使用者裝軟體也會覺得不便。所以試圖統一跨Linux發行版安裝應用程式的技術就出現了,目前常見的有三個,就是Flatpak、Snap、AppImage。

本文Ivon會嘗試比較他們的相同、不同之處。

如果你問Ivon哪個比較好?難以給出答案,要看用途,我在這篇文章有進一步說明。現在還沒有出現所謂的「萬用格式」。

套件數目
#

只計算官方商店的數目,不計算第三方管道散佈的套件。

截至2025年1月

Flathub有2818個應用程式。

SnapCraft具體數量未知,根據2018年發表的文章,官方宣稱有4100個以上應用程式。

AppImageHub有1430個應用程式。

順帶一提,目前Ubuntu的APT套件庫有38475個套件。

用途取向
#

儘管這三個套件管理器都宣稱自己是跨Linux發行版的套件格式,但他們的取向還是不太一樣的。

Flatpak主要提供圖形應用程式,少部份命令行程式。Flatpak因為沙盒的權限因素無法執行需要動到root權限的程式。適合桌面用戶使用。例如在較少更新的Debian安裝最新版的瀏覽器。或者在Arch Linux這類滾動發行版安裝Flatpak,減少因為系統套件更新太頻繁而導致程式崩潰的情況。

Snap提供圖形應用程式與命令行程式,能夠執行需要root權限的任務,適合桌面與伺服器用戶使用。例如在舊版的Ubuntu LTS系統安裝最新版本的Docker。

AppImage提供圖形與命令行程式,概念類似Windows的可攜式exe,或是macOS的dmg。能夠執行需要root權限的任務。適合桌面用戶使用。

支援的Linux發行版
#

這三個套件格式應能在各大發行版使用。部份發行版已經內建支援,作為原生套件管理員的輔助方案,無需手動安裝。

Flatpak一開始是RedHat公司員工發起的專案。內建Flatpak套件管理器的發行版:RHEL、Fedora、CentOS、Rocky Linux、openSUSE、Manjaro、Linux Mint、Kubuntu等

Snap最早是Canonical公司發起的專案。內建Snap套件管理器的發行版:Ubuntu、KDE Neon、Manjaro、openSUSE、Solus、Zorin OS等

AppImage最初是由Simon Peter發起的專案,支援AppImage的發行版:無需套件管理器。Ubuntu 16.04以後發表、任一glibc的發行版都能使用。

系統資源佔用
#

這三者啟動速度都比原生套件要慢一點點,Flatpak和AppImage的程式啟動的速度差不多,Snap要再慢一些。

三者啟動之後執行的效能應與原生套件沒有太大差異。

三者都會在安裝程式時一併安裝該個程式的依賴套件,故佔用硬碟空間比原生套件要肥大。

Flatpak會讓程式共用依賴套件,再利用重複資料刪除技術,節省一部分空間。

Snap會讓程式共用依賴套件,節省空間。

AppImage則是每個程式打包自己的依賴套件,理論上會更佔空間。

軟體分發管道
#

Flatpak主要從GNOME基金會經營的Flathub下載,亦可以自訂遠端儲存庫。開發者能夠獨立分發.flatpak格式的應用程式。但Flatpak程式脫離Flatpak套件管理器便無法使用。

Snap主要從Canocial經營的SnapCraft下載,亦可以使用其他商店。開發者能夠獨立分發.snap格式的應用程式。但Snap程式脫離Snapd套件管理器便無法使用。

AppImage沒有固定的應用程式商店,除了AppImageHub之外,就是到Github開發者的Release頁面下載。AppImage沒有套件管理器,下載.AppImage格式後點二下執行,能夠自由移動到其他電腦執行。尚提供解壓縮執行內部二進位檔的功能。

套件管理
#

Flatpak可以免root權限安裝程式。Flatpak本身有套件管理器的功能,能夠自動更新。支援AppStream協定,能夠與桌面環境的應用程式商店整合。

Snap需要root權限安裝程式。Snap本身有套件管理器的功能,能夠自動更新。支援AppStream協定,能夠與桌面環境的應用程式商店整合。

AppImage沒有套件管理功能,只能簡單檢查軟體更新,使用者要手動下載並管理眾多的AppImage檔案。雖有第三方開發者製作AppImage套件管理工具,但不是內建的功能。

權限管理
#

Flatpak提供沙盒權限,規範放置設定檔的位置,以及能存取的資統資源。遵守XDG標準,擁有一套Portal API規範程式存取系統資源的方式。

Snap提供沙盒權限,規範放置設定檔的位置,以及能存取的資統資源。遵守XDG標準,擁有一套Confinement的權限系統。

AppImage無任何權限管理,程式預設擁有的權限就跟一般二進位檔沒兩樣。遵守XDG標準。

命令行友好
#

Flatpak啟動程式的指令一大串,像是flatpak run org.vim.Vim,要設定alias,不適合命令行程式使用。

Snap安裝後會自動加入到PATH,能像一般二進位檔程式一樣執行。例如snap run vim可以直接寫vim

AppImage不會自動加入PATH。由於檔案本身就是執行檔,執行的時候需要寫出完整檔名,很是不便。例如./vim.AppImage

對宿主機的依賴程度
#

Flatpak把應用程式執行時的依賴套件包在一起,幾乎不受系統套件影響。

Snap把應用程式執行時的依賴套件包在一起,幾乎不受系統套件影響。

AppImage把依賴套件包在一起,但依賴宿主機系統套件的程度較高,很容易受到glibc版本影響。若宿主機系統並非使用glibc,而是musl libc,也得重新編譯。

可移植性
#

Flatpak依賴Linux核心的cgroups功能,透過Bubblewrap實現沙盒化,程式打包的映像檔遵守OCI規範,利用OSTree管理更新。能移植到絕大多數的Linux發行版。

Snap的軟體透過SquashFS掛載,但系統需要支援Systemd才能用Snapd管理Snap套件,還必須有AppArmor管理應用程式權限。可移植性受限,僅適合在Ubuntu使用。

AppImage能在任一支援SquashFS的Linux發行版運作,適用於絕大多數的Linux發行版,就連chroot環境也能使用。

跨架構能力
#

Flatpak部份程式支援x86與ARM架構,要看開發者有沒有打包。允許使用qemu-static模擬異質架構。

Snap部份程式支援x86與ARM架構,要看開發者有沒有打包。

AppImage執行檔需要針對x86與ARM架構個別編譯。

延伸閱讀:如何使用這三個套件格式
#

相關文章

Linux應該用何種方法安裝應用程式,談談我的軟體安裝偏好來源
分類   Linux系統 Linux使用技巧
標籤   Flatpak Snap AppImage Freedesktop Specifications
Linux如何解除安裝軟體並刪除乾淨
分類   Linux系統 Linux使用技巧
標籤   Ubuntu Flatpak Snap AppImage
無法開啟檔案?用Flatseal調整Linux Flatpak應用程式權限
分類   Linux系統 Linux使用技巧
標籤   Flatpak Freedesktop Specifications

留言板

此處提供二種留言板。點選按鈕,選擇您覺得方便的留言板。要討論程式碼請用Giscus,匿名討論請用Disqus。

這是Disqus留言板,您可能會看到Disqus強制投放的廣告。為防止垃圾內容,有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。若要上傳圖片請善用圖床網站。