Ivon Huang
Ivon Huang

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

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

不管是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 or like, so I know you are with me..

Loading...

Comment