「Flatpak,Linux應用程式的未來」Flatpak官方網站上如是說。
為何有時候Linux安裝應用程式是一大惡夢?為什麼Flatpak能有效舒緩這個問題?
這篇文章簡介為什麼會產生Flatpak,以及Flatpak技術的優缺點。
名詞解釋:
- 「系統程式」指的是編譯器、執行時間、函式庫等軟體。
- 「應用程式」指的是有圖形界面的文書軟體、美工、瀏覽器等軟體。
Flatpak指令與軟體的實際用法請看這篇。
1. Linux發行版間的軟體安裝問題
先來談Flatpak的產生背景。
我們都知道Linux安裝應用程式,只要透過套件管理員(package manager)下載安裝即可,應用商店背後做的也就是這些事情。
Linux現在少說有100個以上的發行版(distribution),這就造成了一些問題。
不同的發行版還有各種套件管理員,安裝應用程式指令都不一樣,甚至要額外調整系統設定。有時候還會發生套件相依性(dependencies)衝突。
再者,各個發行版會維護自己的線上軟體庫(repository),受歡迎的發行版會收錄很多軟體,比方說Ubuntu幾乎是什麼都有。相較之下,小眾發行版要等社區成形後軟體庫數量才會累積起來,不然就得手動從原始碼編譯了。
不同發行版打包也會導致應用程式版本不一致,像新版本Ubuntu會收錄最新的軟體,而LTS版則要稍後,造成更新不同步。
所以試圖統一跨發行版安裝應用程式的技術就出現了,Flatpak就是其中一個例子,其他的有Snappy、AppImage等。
2. Flatpak是什麼
Flatpak,以前叫做xdg-app,是由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會用到的權限,圖為KDE Discover列出的Firefox權限。
最後,Flatpak安裝的程式資料統一放在~/var/app
,這樣透過Flatpak解除安裝程式時,能把相關應用程式資料一鍵刪除。並且我們能夠透過Flatseal這類程式來開關應用程式的權限,在必要的時候允許應用程式存取使用者全部的檔案,否則應用程式就必須使用Flatpak提供的一套「門戶」(Portal) API來存取使用者檔案。
4. 用Flatpak安裝應用程式的缺點
第一,Flatpak很肥,尤其是不常使用Flatpak安裝應用程式的情況下。安裝Flatpak等同裝了第二個套件管理員,所以要另外下載依賴套件。舉例來說,在新安裝的Linux系統上,用Flatpak下載Firefox瀏覽器,還需要500MB空間安裝Nvidia、GNOME等依賴。但若透過系統本身的套件管理員可能不到200MB而已。多使用Flatpak來安裝應用程式,這個問題就不會那麼嚴重。設定每日自動更新Flatpak也是個解法,避免久久一次更新導致要下載一大堆依賴。
第二,有些軟體的沙盒權限設計不當,導致無法正常存取檔案、找不到系統執行檔,或是無法跟桌面主題整合。因為Flatpak有persist的功能,所以某些程式還是會因為各種因素把資料放在~/.var/app
以外的地方。
再者,Flatpak執行程式指令會變很長,過去在終端機打firefox
就會開啟;而Flatpak變成要打flatpak run org.mozilla.firefox
才行。還有Flatpak不會把程式加到環境變數(PATH),因此若用一般套件管理員的方式執行firefox指令,系統是找不到Flatpak版Firefox的,得另外將/var/lib/flatpak/exports/bin
加到PATH,並設定alias才能暫時解決。
最後是系統程式與伺服器應用。上面說了,Flatpak主攻的是圖形應用程式,系統程式方面的就比較少見,雖然有輸入法存在,但目前還沒聽過有人用Flatpak裝Java和PHP的。這樣導致在伺服器方面Flatpak沒什麼用處,相較之下Canonical力推的Snappy還做的比較完善。
5. 總結
Flatpak對開發者的好處是顯而易見的,對使用者來說亦是簡化了APP安裝程序。不過容量和沙盒問題仍要看未來Linux社群會怎樣改進。