跨發行版救星?用Flatpak安裝Linux軟體的優缺點

Ivon Huang
·
·
IPFS
·
不管是Arch Linux還是Slackware,都可以透過Flatpak享受到版本一致的應用程式。

「Flatpak,應用程式的未來」Flatpak官方網站上如是說。 為何有時候Linux安裝應用程式是一大惡夢?為什麼Flatpak能有效舒緩這個問題?這篇文章將會介紹Flatpak產生的背景及Flatpak技術特色。

名詞解釋:

「系統程式」指的是編譯器、執行時間、函式庫等軟體。

「應用程式」指的是有圖形界面的文書軟體、美工、瀏覽器等軟體。

1.Linux發行版間的軟體安裝問題

我們都知道Linux安裝應用程式,只要透過套件管理員(package manager)下載安裝即可,應用商店背後做的也就是這些事情。

Linux現在少說有100個以上的發行版(distribution),這就造成了一些問題。

不同的發行版還有各種套件管理員,安裝應用程式指令都不一樣,甚至要額外調整系統設定。有時候還會發生套件相依性(dependencies)衝突。

再者,各個發行版會維護自己的線上軟體庫(repository),受歡迎的發行版會收錄很多軟體,比方說Ubuntu幾乎是什麼都有。相較之下,小眾發行版要等社區成形後軟體庫數量才會累積起來,不然就得手動從原始碼編譯了。

不同發行版打包也會導致應用程式版本不一致,像新版本Ubuntu會收錄最新的軟體,而LTS版則要稍後,造成更新不同步。

所以試圖統一跨發行版安裝應用程式的技術就就出現了,Flatpak就是其中一個例子,其他的有Snappy、AppImage等。

2.Flatpak是什麼

Flatpak是由Freedesktop.org開發的跨發行版套件管理員和軟體部署系統。大部份Linux發行版 (Debian系、Fedora系、openSUSE系、Arch系) 都已經支援Flatpak,連ChromeOS都有,甚至Fedora Silverblue就是幾乎全Flatpak環境。

Flathub則是最受歡迎的Flatpak軟體庫來源,已經有數千款應用程式上架。

Flatpak主攻的對象為桌面圖形應用程式,例如瀏覽器、LibreOffice、Steam、整合式開發環境這類。引入了沙盒(sandbox) 機制隔離APP,並設計了一套權限系統加強安全性。

3. 用Flatpak安裝應用程式的優點

首先對使用者而言,Flatpak解決了各發行版應用程式版本不一的問題。不管你是滾動更新的Arch Linux,還是萬年更新一次的Slackware,都可以透過Flatpak享受到版本一致的應用程式。

此外,Flatpak可以選擇將應用程式安裝到系統,或者只安裝給特定使用者,所以一般使用者安裝應用程式不需要Root權限。

再來對開發者也有好處,Flatpak官方文檔有詳細說明如何將應用程式打包成Flatpak。開發者在分發應用程式時能提供穩定版和測試版給使用者下載,以及提供x86 / ARM等不同架構的版本,Flatpak的安裝程式會自動判斷。

下圖是Flatpak官方文檔所描述的沙盒運作原理,Flatpak應用程式的依賴套件或執行時間(runtime)是由Flatpak控管,安裝應用程式時會自動下載。

從安全角度來看,Flatpak引入的權限機制跟Android有類似之處。Google近來年規定Android APP只能存取部份常用目錄,透過Flatpak安裝的應用程式也有這類效果,防止應用程式在家目錄亂塞一堆設定檔。Flatpak還可以限制應用程式存取網路服務和特定硬體設備。

部份Linux的應用商店會在安裝頁面列出該Flatpak APP會用到的權限,圖為GNOME Software。

最後,Flatpak安裝的程式資料統一放在~/var/app,這樣透過Flatpak解除安裝程式時,能把相關應用程式資料一鍵刪除。

並且我們能夠透過Flatseal這類程式來開關應用程式的權限,在必要的時候允許應用程式存取使用者全部的檔案,否則應用程式就必須使用Flatpak提供的一套「門戶」(Portal) API來存取使用者檔案。

4. 用Flatpak安裝應用程式的缺點

第一,Flatpak很肥,尤其是不常使用Flatpak安裝應用程式的情況下。安裝Flatpak等同裝了第二個套件管理員,所以要另外下載依賴套件。舉例來說,在新安裝的Linux系統上,用Flatpak下載Firefox瀏覽器,還需要500MB空間安裝Nvidia、GNOME等依賴。但若透過系統本身的套件管理員可能不到200MB而已。多使用Flatpak來安裝應用程式,這個問題就不會那麼嚴重。

第二,有些軟體的沙盒權限設計不當,導致無法正常存取檔案、找不到系統執行檔,或是無法跟桌面主題整合。因為Flatpak有persist的功能,所以某些程式還是會因為各種因素把資料放在~/.var/app以外的地方。

再者,Flatpak執行程式指令 (詳細見下)會變很長,過去在終端機打firefox就會開啟;而Flatpak變成要打flatpak run org.mozilla.firefox才行。還有Flatpak不會把程式加到環境變數(PATH),因此若用一般套件管理員的方式執行firefox指令,系統是找不到Flatpak版Firefox的。

最後是系統程式與伺服器應用。上面說了,Flatpak主攻的是圖形應用程式,系統程式方面的就比較少見,雖然有輸入法存在,但目前還沒聽過有人用Flatpak裝Java和PHP的。這樣導致在伺服器方面Flatpak沒什麼用處,相較之下Canonical力推的Snappy還做的比較完善。

5.總結

Flatpak對使用者好處是顯而易見的,如果想知道如何在你的Linux系統上安裝Flatpak,請到Flatpak官網閱讀指示,My Blog上也有討論相關技巧!

CC BY-NC-ND 2.0

Like my work? Don't forget to support and clap, let me know that you are with me on the road of creation. Keep this enthusiasm together!

Ivon Huang自由軟體、航空、20世紀歷史愛好者。 這裡記載的東西究竟會成為未來的碎片,在那最果之處,反射出匯集各處思念的光芒。 My Blog: https://ivonblog.com
  • Author
  • More

將suckless.org極簡網頁設計哲學付諸實現

Linux電腦好用的必裝軟體,從文書處理到玩遊戲一次滿足

半回憶錄形式的2022年Matters回顧問卷