Ubuntu 推出的Snap應用架構有什麼深遠意義?

近日,Ubuntu推出了Snap應用包格式,受到各主流發行版和軟體基金會歡迎.這有何深遠意義?


首先「受到各主流發行版和軟體基金會歡迎」這句可是 Ubuntu 的人說給媒體人的,別的發行版都還沒表態,見我另一個回答 Flatpak 和 Snap package 技術上有何區別?各有何優劣?如何看待兩者的發展前景? - fc farseer 的回答。

然後,容器技術的重要性和 Linux 上第三方軟體開發商打包困難的問題很多人都提到了,都說得不錯,不再複述。

我就提一下爲什麼 Ubuntu 要做這個,爲什麼 Ubuntu 要在這個時候大張旗鼓推這個。

在操作系統領域幾十年來經久未變的一點是,操作系統本身不重要,重要的是能跑在其上的應用程序,現在的話說是生態環境。而應用程序不是針對操作系統本身撰寫,應用程序是針對操作系統提供的API/SDK撰寫,換句話說,掌握了API/SDK的控制權,就掌握了最寶貴的應用程序開發者,操作系統本身就得以長久發展。這就是爲什麼 Windows 遠比 Mac 賣得好的道理,Windows 掌握著桌面操作系統裏最穩定的SDK,幾十年來保持兼容性未曾變過,而 Mac 時常破壞 API 兼容性使得老程序不能再跑在新系統上。這個道理 How Microsoft Lost the API War 這篇文章闡述得非常明白。

GNU/Linux 乃至整個 FOSS 社區,在這一點上,其實非常另類。 GNU 系統從來沒有把「保持程序兼容性以吸引用戶和開發者」放在首要目標,GNU 的首要目標是「給用戶以自由」。那麼 GNU/Linux 的應用程序兼容性不好麼?並不見得,幾十年前的 ed/vi/xterm 程序現在還好好得跑在 各大發行版上,一些程序比 Windows 上的軟體還要古老很多。但是這並不是 GNU/Linux 和各大發行版致力於保護兼容性的結果,而是這些軟體「自由」的結果。因爲他們自由且開源,發行版維護者們可以拿他們的源代碼重新編譯以利用新的軟體庫新的 ABI ;因爲他們自由而且開源,上游維護者可以不斷更新他們的代碼讓他們適應新的技術新的框架新的 API ;因爲他們自由而且開源,當上游開發者放棄項目不再開發的時候,還會有有志之士挺身而出接替開發維護的職責。換句話說,在 Linux 發行版上,軟體的兼容性好是軟體自由的直接結果

這就是現在 GNU/Linux 發行版們打包軟體發佈軟體的模式,大家努力的目標是給予用戶自由。這一模式在自由開源軟體上非常有效,但是面對閉源軟體就不那麼有效了。閉源軟體的源代碼在開發者手上,沒有發行版打包者做銜接工作,所以閉源軟體在 GNU/Linux 上發佈起來非常困難。軟體的自由,除了乾淨放心保證隱私外對普通用戶來說沒有立竿見影的優勢,只對軟體開發者們有意義,所以 GNU/Linux 發行版一直是程序員的天堂,用戶的地獄。

而 Ubuntu 作爲一個發行版,並沒有共享傳統發行版的自由精神。從一開始,Ubuntu努力的首要目標就不是給用戶自由,而是擴大普通用戶的基數。Ubuntu看到,對普通用戶而言,閉源軟體尤其是商業軟體同等重要甚至可能更重要,普通用戶寧願忍受不自由,寧願放棄隱私放棄控制權,也不願使用那些表面粗質功能匱乏的開源替代。所以 Ubuntu 需要打破傳統發行版的發佈方式,讓商業閉源軟體也能在 GNU/Linux 上輕鬆發佈

而且這條路的可行性早就驗證過了。Google 通過給 Linux 內核上包裝一層 Apache 協議的「自由性中立」的 userland 層,禁錮住了 GPL 的病毒傳播性,開發出 Android 系統,發展出 Android 之上的生態環境,吸引到了無數開發者爲其平臺寫(大部分閉源)軟體。另一點 Valve 通過 Steam 作爲兼容層,附帶大量依賴庫並保持 API 足夠穩定,同時充當遊戲開發者和 Steam 兼容層之間的橋樑,也順利地招攬到不少遊戲開發商爲 Steam 移植 Linux 平臺遊戲。這兩個先例都啓迪 Ubuntu ,這件事可以做並且可以做好。

並且現在做 Snap 對 Ubuntu 有一個重大的好處,在於壟斷 SDK 控制權。Snap 架空了發行版提供的包管理器,甚至架空了發行版本身(提供的依賴庫),從而對開發者而言,針對 Snap 提供軟體包就不需要考慮發行版(這是好事)。如果 Snap 受到足夠多的開發者支持,發展出成熟的生態,那麼 Ubuntu 也就不再發愁今後的推廣之路了,因爲 Ubuntu 上的 Snap 支持必然比別的發行版要好。目前 Snap 上發佈或者安裝軟體包需要 Ubuntu One 身份認證,屬於中央化的 App Store 模式,這給予 Ubuntu 最直接的控制權(而不是 Ubuntu 宣稱的把控制權從發行版交還給開發者),到時候 Ubuntu 攜應用以令用戶,用戶並沒有選擇的權利和自由。另一點,Ubuntu要做手機系統做IoT系統,面向的用戶群就是 Android/iOS 的用戶群,這樣的用戶群下,用自由開源的生態在短期內顯然難以抗衡,所以必須引入商業生態,從而提供類似的軟體商店也是 Ubuntu 的必由之路。

最開始的時候,Ubuntu 最大的敵人是微軟,這是它的 launchpad 上第一個 bug Bug #1 (liberation) a€?Microsoft has a majority market sharea€ : Bugs : Ubuntu 。現在 Ubuntu 和微軟成爲了合作關係,然後矛頭調轉直指一衆發行版,司馬昭之心可以想像。


UBUNTU:MAKE LINUX GREAT AGAIN

Linux 社區在這麼多年之後終於重新發明了 bundle / xcopy 部署

可喜可賀 可喜可賀


小時候玩遊戲, 那時候機器差, 光碟機速度也慢, 裝半個多小時, 終於裝好了. 想要啟動遊戲, 彈出: 缺少d3d9.dll blahblah... (記不清了)...

snap for windows就是為了解決這個問題的.

(光速逃

ps: 希捷, 西數, 東芝, 三星, 浦科特, intel ... 等 或成最大贏家.


Redhat不會對Canonical這種試圖統一linux包管理的行為坐視不理的,(Redhat:要統一也應該由我來統一!),比如剛發布的Fedora24就加入了類似的包管理Flatpak……

之前紅帽的英文竟然拼錯了,現已更正……


我就好奇以後OpenSSL出補丁了,是不是整個系統所有使用OpenSSL的App都要更新一遍……


只不過是另一種容器image打包的格式,和docker image、aci、[you name it]沒有什麼不同,換了個外殼就認不出了?

跨發行版跑binary、打包,早就不是問題,Ubuntu跟風而已。


感覺上有點類似於 mac 下的 bundle,或者說 windows 下,一個軟體將本體和各種 dll 等依賴都安裝到一個目錄中,刪除這個 bundle,或者 windows 下的這個目錄,並不對系統造成影響。linux 下各種軟體的安裝、管理、升級很困難,很大程度上是缺失類似技術所造成的。

1. 讓應用的發布和部署變得簡單。讓各種 distro都使用同一個包成為可能。

2. 由於不依賴系統軟體包,應用可以任意升級、降級,不對系統以及其他軟體造成破壞。

3. 應用各種版本共存變得簡單。

不過缺點是由於打包依賴,所以應用體積自然大了,相對優點來說,影響不大。


川·烏邦圖·普:

Fuck the political correct, make Linux great again.


獲得發行版霸權的方法有兩種

1.自己足夠好

2.搞死別的開發版, 自己弄一套不兼容的


這個是在1969年設計UNIX初版時多花半個小時就能定下來的 /* TODO */,半個世紀以後終於有人想起來了


他們終於懂了,相比起 用戶/開發者 的時間,精力和系統的穩定性,維護性來說,硬碟的那點容量根本不值錢。

我只是覺得詫異,這麼樸素的道理,linux竟然花了二十五年(經過評論區指出,此處由三十年改成了二十五年,@唐生)才反應過來,看看隔壁微軟和蘋果吧

ps:linux下卸載軟體其實也很蛋疼,因為你很難確定為了安裝一個軟體而安裝的各個依賴包到底裝到了哪,usr,var,root,/,etc,,,,各種卸載不幹凈


這種自帶二進位包的方案在linux沒啥特別的吸引力,也解決不了什麼問題。

首先,如果大部分linux軟體都是由各大發行版自行發布的,也沒什麼第三方軟體開發商需要發布二進位版本的需求。如果有的話,那麼(1)一部分軟體可以以靜態鏈接形式發布;(2)有LD_LIBRARY_PATH可以作為一些比較大的獨立軟體發布的選項;(3)linux軟體跨平台其實沒有那麼嚴重,和windows一樣,如果所需的庫在目標機器都存在的話,那麼運行起來其實一般沒有問題。有經驗的人會知道,絕大部分庫在同一個大的版本號下基本保持著ABI兼容性,而一旦跨了版本,那麼系統上同時安裝兩個版本也可以解決問題,實際上很多庫都是這麼做的。問題往往在於,發行版自身會取消對過時的功能的支持,有意的淘汰舊的不被支持的系統,比如libc升級中不支持老版本下編譯的程序執行。

其次,大部分軟體都提供源代碼,都可以自行編譯安裝,二進位發布雖然方便了用戶,但解決不了許多新的軟體對新的底層功能的依賴,特別是內核的。當然一般軟體不會那麼及時的利用到內核或最新c庫中提供的介面,但一些大型的桌面軟體往往會利用這些最新的介面來提供更好的體驗,這限制了二進位發布的有效性。如果用戶仍然要升級系統才能享受到好處,那就還是要獲取最新的發行版。

最後,在不需要升級發行版的情況下,過去的包管理已經足夠方便了。主要矛盾在於,新發布的包不再支持舊的發行版。這其中的直接原因和上面第二點有密切的關係,但發行版故意或者怕麻煩不去兼容舊的系統才是根本原因。即使是最新的c庫其實也可以運行在十年前發布的系統上,但是不會有發行版會去支持這一點。

換個角度看,打一個支持老版系統的包,可能比提供一個不那麼可靠的巨大笨拙的二進位包,更能方便到客戶。比如arch在這方面做的似乎不錯。但發行版可能(一定)不會堅守在老系統上一直這麼做下去。

所以,我的經驗是,源代碼包這個時候更可靠。只是如果你的系統用了十年以上還沒有根本性地升級(內核+c庫),那麼你可能會有一些麻煩。這是對於拿到源代碼的軟體開發者而言;至於普通客戶,我覺得這種情況根本不會發生。


好像和ArchLinux沒有什麼關係呀


ubuntu心很大 你總不能在ubunutu手機上也用deb包 最好能用一個統一格式

當然現在連個ubuntru手機都買不到的情況下 有點尷尬


沒有任何卵用

Linux下的軟體發布方式非常多樣化

不自帶依賴的deb/rpm包,通過包管理器安裝依賴(大部分預編譯程序)

自帶全部/大部分依賴的deb/rpm,直接dpkg或者rpm就可以使用(因涉及版權問題,這類軟體比較少,多半是閉源軟體使用)

使用二進位文件+部署腳本,完全架空系統的包管理器(RustC,MATLAB)

還可以直接以單個二進位文件發布,依賴全部包含在bin文件內部,直接雙擊就能打開(Telegram)

也可以發布源代碼,通過編譯安裝(nginx等需要定製化編譯的程序)

snap不過是又增加了一個自帶依賴的二進位分發方式而已


架空系統包管理器,用體積膨脹告別了小快靈的歷史


已給大多數答案反對加沒有幫助。

我可以在這裡預言:無論flatpak還是snap都對傳統包管理夠不成任何衝擊。

最基本的原因就在於,這兩個方案沒法用來組裝系統。linux現在的下載安裝和編譯安裝軟體的方案已經足夠簡單和實用了


推薦閱讀:

Ubuntu 有什麼奇技淫巧?
應該刪除預裝的 Window 8,改用 Ubuntu 14 嗎?
KDE如何配置得漂亮大氣?
初學 Linux 是否可以用 Ubuntu?
為什麼ubuntu server在逐步蠶食CentOS的市場份額?

TAG:Linux | Ubuntu | Fedora | ArchLinux | Linux開發 |