Snap、Flatpak 這種通吃所有發(fā)行版的打包方式真的有用嗎?
對(duì)新一代的打包格式開(kāi)始滲透到 Linux 生態(tài)系統(tǒng)中的深入觀察
最近我們聽(tīng)到越來(lái)越多的有關(guān)于 Ubuntu 的 Snap 包和由 Red Hat 員工 Alexander Larsson 創(chuàng)造的 Flatpak (曾經(jīng)叫做 xdg-app)的消息。
這兩種下一代打包方法在本質(zhì)上擁有相同的目標(biāo)和特點(diǎn):即不依賴于第三方系統(tǒng)功能庫(kù)的獨(dú)立包裝。
這種 Linux 新技術(shù)方向似乎自然會(huì)讓人腦海中浮現(xiàn)這樣的問(wèn)題:獨(dú)立包的優(yōu)點(diǎn)/缺點(diǎn)是什么?這是否讓我們擁有更好的 Linux 系統(tǒng)?其背后的動(dòng)機(jī)是什么?
為了回答這些問(wèn)題,讓我們先深入了解一下 Snap 和 Flatpak。
動(dòng)機(jī)
根據(jù) Flatpak 和 Snap 的聲明,背后的主要?jiǎng)訖C(jī)是使同一版本的應(yīng)用程序能夠運(yùn)行在多個(gè) Linux 發(fā)行版。
“從一開(kāi)始它的主要目標(biāo)是允許相同的應(yīng)用程序運(yùn)行在各種 Linux 發(fā)行版和操作系統(tǒng)上。” —— Flatpak“……‘snap’ 通用 Linux 包格式,使簡(jiǎn)單的二進(jìn)制包能夠***的、安全的運(yùn)行在任何 Linux 桌面、服務(wù)器、云和設(shè)備上。” —— Snap說(shuō)得更具體一點(diǎn),站在 Snap 和 Flatpak (以下稱之為 S&F)背后的人認(rèn)為,Linux 平臺(tái)存在碎片化的問(wèn)題。
這個(gè)問(wèn)題導(dǎo)致了開(kāi)發(fā)者們需要做許多不必要的工作來(lái)使他的軟件能夠運(yùn)行在各種不同的發(fā)行版上,這影響了整個(gè)平臺(tái)的前進(jìn)。
所以,作為 Linux 發(fā)行版(Ubuntu 和 Red Hat)的***,他們希望消除這個(gè)障礙,推動(dòng)平臺(tái)發(fā)展。
但是,是否是更多的個(gè)人收益刺激了 S&F 的開(kāi)發(fā)?
個(gè)人收益?
雖然沒(méi)有任何官方聲明,但是試想一下,如果能夠創(chuàng)造這種可能會(huì)被大多數(shù)發(fā)行版(即便不是全部)所采用的打包方式,那么這個(gè)項(xiàng)目的***將可能成為一個(gè)能夠決定 Linux 大船航向的重要人物。
優(yōu)勢(shì)
這種獨(dú)立包的好處多多,并且取決于不同的因素。
這些因素基本上可以歸為兩類:
用戶角度
1. 從 Liunx 用戶的觀點(diǎn)來(lái)看:Snap 和 Flatpak 帶來(lái)了將任何軟件包(軟件或應(yīng)用)安裝在用戶使用的任何發(fā)行版上的可能性。
例如你在使用一個(gè)不是很流行的發(fā)行版,由于開(kāi)發(fā)工作的缺乏,它的軟件倉(cāng)庫(kù)只有很***的包。現(xiàn)在,通過(guò) S&F 你就可以顯著的增加包的數(shù)量,這是一個(gè)多么美好的事情。
2. 同樣,對(duì)于使用流行的發(fā)行版的用戶,即使該發(fā)行版的軟件倉(cāng)庫(kù)上有很多的包,他也可以在不改變它現(xiàn)有的功能庫(kù)的同時(shí)安裝一個(gè)新的包。
比方說(shuō), 一個(gè) Debian 的用戶想要安裝一個(gè) “測(cè)試分支” 的包,但是他又不想將他的整個(gè)系統(tǒng)變成測(cè)試版(來(lái)讓該包運(yùn)行在更新的功能庫(kù)上)。現(xiàn)在,他就可以簡(jiǎn)單的想安裝哪個(gè)版本就安裝哪個(gè)版本,而不需要考慮庫(kù)的問(wèn)題。
對(duì)于持后者觀點(diǎn)的人,可能基本上都是使用源文件編譯他們的包的人,然而,除非你使用類似 Gentoo 這樣基于源代碼的發(fā)行版,否則大多數(shù)用戶將從頭編譯視為是一個(gè)惡心到吐的事情。
3. 高級(jí)用戶,或者稱之為 “擁有安全意識(shí)的用戶” 可能會(huì)覺(jué)得更容易接受這種類型的包,只要它們來(lái)自可靠來(lái)源,這種包傾向于提供另一層隔離,因?yàn)樗鼈兺ǔJ桥c系統(tǒng)包想隔離的。
* 不論是 Snap 還是 Flatpak 都在不斷努力增強(qiáng)它們的安全性,通常他們都使用 “沙盒化” 來(lái)隔離,以防止它們可能攜帶病毒感染整個(gè)系統(tǒng),就像微軟 Windows 系統(tǒng)中的 .exe 程序一樣。(關(guān)于微軟和 S&F 后面還會(huì)談到)
開(kāi)發(fā)者角度
與普通用戶相比,對(duì)于開(kāi)發(fā)者來(lái)說(shuō),開(kāi)發(fā) S&F 包的優(yōu)點(diǎn)可能更加清楚。這一點(diǎn)已經(jīng)在上一節(jié)有所提示。
盡管如此,這些優(yōu)點(diǎn)有:
- S&F 通過(guò)統(tǒng)一開(kāi)發(fā)的過(guò)程,將多發(fā)行版的開(kāi)發(fā)變得簡(jiǎn)單了起來(lái)。對(duì)于需要將他的應(yīng)用運(yùn)行在多個(gè)發(fā)行版的開(kāi)發(fā)者來(lái)說(shuō),這大大的減少了他們的工作量。
- 因此,開(kāi)發(fā)者能夠更容易的使他的應(yīng)用運(yùn)行在更多的發(fā)行版上。
- S&F 允許開(kāi)發(fā)者私自發(fā)布他的包,不需要依靠發(fā)行版維護(hù)者在每一個(gè)/每一次發(fā)行版中發(fā)布他的包。
- 通過(guò)上述方法,開(kāi)發(fā)者可以不依賴發(fā)行版而直接獲取到用戶安裝和卸載其軟件的統(tǒng)計(jì)數(shù)據(jù)。
- 同樣是通過(guò)上述方法,開(kāi)發(fā)者可以更好的直接與用戶互動(dòng),而不需要通過(guò)中間媒介,比如發(fā)行版這種中間媒介。
缺點(diǎn)
1. 膨脹。就是這么簡(jiǎn)單。Flatpak 和 Snap 并不是憑空變出來(lái)它的依賴關(guān)系。相反,它是通過(guò)將依賴關(guān)系預(yù)構(gòu)建在其中來(lái)代替使用系統(tǒng)中的依賴關(guān)系。
就像諺語(yǔ)說(shuō)的:“山不來(lái)就我,我就去就山”。
2. 之前提到安全意識(shí)強(qiáng)的用戶會(huì)喜歡 S&F 提供的額外的一層隔離,只要該應(yīng)用來(lái)自一個(gè)受信任的來(lái)源。但是從另外一個(gè)角度看,對(duì)這方面了解較少的用戶,可能會(huì)從一個(gè)不靠譜的地方弄來(lái)一個(gè)包含惡意軟件的包從而導(dǎo)致危害。
上面提到的觀點(diǎn)可以說(shuō)是有很有意義的,雖說(shuō)今天的流行方法,像 PPA、overlay 等也可能是來(lái)自不受信任的來(lái)源。
但是,S&F 包更加增加這個(gè)風(fēng)險(xiǎn),因?yàn)閻阂廛浖_(kāi)發(fā)者只需要開(kāi)發(fā)一個(gè)版本就可以感染各種發(fā)行版。相反,如果沒(méi)有 S&F,惡意軟件的開(kāi)發(fā)者就需要?jiǎng)?chuàng)建不同的版本以適應(yīng)不同的發(fā)行版。
原來(lái)微軟一直是正確的嗎?
考慮到上面提到的,很顯然,在大多數(shù)情況下,使用 S&F 包的優(yōu)點(diǎn)超過(guò)缺點(diǎn)。
至少對(duì)于二進(jìn)制發(fā)行版的用戶,或者重點(diǎn)不是輕量級(jí)的發(fā)行版的用戶來(lái)說(shuō)是這樣的。
這促使我問(wèn)出這個(gè)問(wèn)題,可能微軟一直是正確的嗎?如果是的,那么當(dāng) S&F 變成 Linux 的標(biāo)準(zhǔn)后,你還會(huì)一如既往的使用 Linux 或者類 Unix 系統(tǒng)嗎?
很顯然,時(shí)間會(huì)是這個(gè)問(wèn)題的***答案。
不過(guò),我認(rèn)為,即使不完全正確,但是微軟有些地方也是值得贊揚(yáng)的,并且以我的觀點(diǎn)來(lái)看,所有這些方式在 Linux 上都立馬能用也確實(shí)是一個(gè)亮點(diǎn)。