Flatpak 和 Snap package 技術上有何區別?各有何優劣?如何看待兩者的發展前景?

Flatpak(Wiki),剛剛從 xdg-app 改名而來:

Flatpak - the future of application distribution

Snap package,這兩天屢屢出現在新聞中(比如 Solidot | Ubuntu的snap應用將可以安裝到其它發行版):

snapcraft - Snaps are universal Linux packages

這兩者看起來都是把軟體和其依賴打包到一個 sandbox 里實現跨 distro 的分發。那麼其技術上有何主要區別,有何優劣?如何看待兩者的發展前景?


目前涉及的各大發行版(當然除了Ubuntu)應該都還沒有官方態度,所有表態都只代表說話人自己的觀點,不代表發行版的態度。

事先聲明,我自己也還沒試過 snap/flatpak 不知道技術上來說這倆的優劣在哪兒。(我其實非常抵制拋棄技術細節談技術的。)

首先來自 Fedora 的人的態度, openSUSE娘的這篇文章翻譯得不錯 關於 Snappy 和 Flatpak:Canonical 宣傳部門總想弄個大新聞 。

然後來自 Arch Linux TU 頻道的態度,我就貼一小段鋪天蓋地的宣傳出來之後的聊天記錄,出於保護說話者的目的,以及考慮到頻道本身是內部頻道,我這裡隱去每個人的 nickname :

S: arch seems to be mentioned fairly often in this article Adios apt and yum? Ubuntua€?s snap apps are coming to distros everywhere

P: Title: Adios apt and yum? Ubuntu』s snap apps are coming to distros everywhere | Ars Technica (at http://arstechnica.com)

A: S: somebody should seriously correct that bullshit infos

S: couple of hours ago it even said in the 7th article ... Arch developer Tim Jester-Pfadt and Gentoo ... so I was just wondering who this guy is

J: oh

J: who works on snap support?

A: J: i _seriously_ hope nobody

J: (not interested, but wondering the claim of phoronix?)

J: :D

J: actually it was a dutch newssite

J: "「Rolling updates are popular in the Arch community,」 said Tim Jester-Pfadt, an Arch contributor. 「One nice feature of snaps is support for edge and beta channels, which allow users to opt-in to the pre-release developer versions of software or stick with the latest stable versions」."

J: ah it"s the fail dutch news again :p

T: what is snap?

J: T: basically run your app in a container :p

T: oh snappy

J: yes

T: I have a former colleague working on it for Canonical

J: but we also have xdg-app

F: someone from canonical dropped a package into AUR and wolah we have Arch Linux covered

T: actually he"s porting snappy on openwrt

J: which is again so stupid

J: why can"t canonical work with the community :-)

T: well, source code is available on github

J: T: that"s not "working with the community" :p

T: :k

J: chinese companies dump code in github too :P

J: then again not sure how old xdg-app is

T: J: what do they should do?

J: T: well, my issue is that we have flatpack and snappy now and we could have one project

T: we also have docker :D

J: uhu

J: and runc, rocket :p

J: wayland/mir

T: so it"s not a big problem ;)

*: A hopes its just a dream and he awakes any second

B: docker is not for desktop apps

B: despite what Jessie Frazelle tries to prove every time on conferences

J: :P

B: and we have flatpak in repositories

J: yup!

T: B: I think snappy will take more users than flatpak

B: Canonical as usually gave some source code, packaged it for all distributions without any cooperation with developers

B: did it wrong by the way

B: enjoy your systemctl enable --now in snapd post_install

B: T: I really doubt it, unless you think the same about mir and unity

最後這段 B 是在說當時 Canonical 員工放到 AUR 上的包嚴重違反 Arch Linux 的打包規範,在安裝腳本裏做了很多不該做的事情。後來這個問題通過 Arch 用戶在 GitHub 上給 snap 上游發 PR 的方式修了。

然後再貼一篇 Arch Linux 一個 dev 的博客:

http://kmkeen.com/maintainers-matter/index.html


技術區別還沒細看代碼。技術路線大概差不多:

  1. 依賴全部打包,並且通過mount namespace與發行版的文件隔離。
  2. 通過其它容器技術控制應用運行時的許可權。

1很容易,Firefox/Steam等的跨發行版二進位包一向是這麼做的。只是沒用mount namespace,在啟動腳本里設一下LD_LIBRARY_PATH罷了。2很難,幾乎肯定需要應用修改代碼。Linux桌面上惡意應用問題又不嚴重,需求不足。

發展前景嘛:

  1. 這類挖發行版牆角的工作,也包括Docker,基本上不要指望從發行版的人(Redhat/Canonical自己人除外)那裡聽到什麼好話。這一點別的答案也有所表現。
  2. 基本上Redhat和Canonical搞相似的東西,你又非要挺一個,那就選Redhat好了。兩邊的江湖地位不是一個等級。Redhat可以把systemd推進主要發行版,Canonical想把Upstart推進Debian都不可能。Mir也註定是個除了Canonical自己沒人鳥的貨。


我不是應用開發者,發表些粗淺的看法。

Flatpak 和 Snap 都還沒有成熟,之前 Snap 打包 Libreoffice 就有 1GB 大的 bug。從新聞上看 Snap 看起來很火,但是只是 Canonical 單方面在推動,其他發行版的維護者都還沒有接收呢,只是 Canonical 的員工自己在其他發行版上發布了個人打包。在安全性上,Flatpak 和 Snap 需要桌面使用 wayland/mir,兩者在桌面都還沒有流行起來。Flatpak 是 RH 的東西,Snap 是 Canonical 的東西,況且如果採用 Snap,應用商店還是 Canonical 掌控的,其他發行版也許不怎麼樂意。

Flatpak/Snap 也許會作為一個應用安裝來源的補充,不過已經足夠吸引人了,就像很多人喜歡 Arch 因為它的 AUR 源。


用了一次snap,在archlinux上,安裝moonplayer,然後就卸載了。

我的本子主要是娛樂私用,只有250G,大部分分配給存儲區。系統分區很小,開btrfs壓縮,基本也夠用了。

這次安裝,我實在受不了所佔的磁碟空間。對比moonplayer安裝一下,我用pacman安裝,只漲1M左右,依賴包之前都裝了。用snap漲了快200M了,包括一個簡版的python3,還有一堆bin等等。

可很多部件,我系統里已經安裝了。簡直就是重複。如果我都用snap裝軟體,可想得漲到什麼程度了。

我倒是不介意安裝包很大,但是如果安裝導致大量重複庫的存在,就真的受不了了,至少也該去重一下吧。

12月2日補充一下:

寫的時候,有些東西沒想好,今天補充一下。

我不是很看好這種打包,雖然我也希望有更好的linux依賴管理出現。

我不看好是因為現在linux發行版差異太大了,根本就沒有一個強制存在的,統一的基本庫和基本環境。

像windows,macOS, 用這種打包方式很好,因為,這兩個系統,都是一個公司開發,基本庫和環境已經確定了,所以缺什麼,程序全打包就可以了。

可是linux,完全沒有統一。比如,archlinux 默認python是3.0+, 而debian9是2+,勢必導致差別;此外顯示服務現在主流是xorg,但還有wayland,一直說要取代xorg,可能有些機器已經裝了,難道程序為了保險,還要打包一個顯示服務嗎?

而且打包好像沒有規範,太靈活了,什麼都打進去。就像我試過的moonplayer,居然包括一個python3的簡板,但是如果是windows安裝,一般會提醒需要安裝必須環境的;另外,我裝完沒仔細看,但估計還包括編解碼器,要是真包括,那就更糟糕了。

總的來說,我關注這類技術,但目前不看好。一是linux沒有一個統一的基本系統環境(FreeBSD倒是符合),二是打包不規範。


放心大膽的用 flatpak 吧,fedora 社區是 Redhat 推動的,看 Wayland 在 fedora 的推進之下已經可以用了,再看看 Canonical 為 Ubuntu 弄的 mir 基本已經流產了,昨天剛聽說 Canonical 把 Unity 桌面也砍掉了,重新使用 Gnome3,以前 Canonical 還搞了一個 upstart,結果就是被社區的 systemd 幹掉,直接停止維護而放棄,總結出來 Canonical 總喜歡和社區作對但是又永遠沒有能力乾的過社區。


「Canonical 和 Fedora 的全部溝通就是他們來郵件詢問在 Fedora 上如何打包 snappy,我們介紹了主要的打包流程和 COPR。他們肯定沒有以任何方式暗示 Fedora 或者圈子裡的每個其它發行版,』你們已經愉快地上車了『。」

我好奇的是真的會有發行版對Snap表示歡迎嗎?


推薦閱讀:

2014 年度,大陸安卓應用市場哪家最強?排名如何?

TAG:Linux | Canonical | 電腦軟體 | 應用分發 | XWindow |