何為“玲瓏”,它從哪里來又要到哪里去?- 文末有福利(玲瓏–)
2020 年,借鑒沙箱/容器的技術(shù)方案,玲瓏原型的核心開發(fā)悄然完成;
2022 年,作為 deepin 發(fā)行版未來的核心特性,玲瓏隨 deepin v23 預(yù)覽版共同發(fā)布,初步具備可用性;
2023 年,我們將玲瓏項(xiàng)目代碼、玲瓏官網(wǎng)、玲瓏商店等資產(chǎn)捐贈(zèng)給開放原子開源基金會(huì),欲匯聚更多產(chǎn)業(yè)力量,攜手推動(dòng)玲瓏發(fā)展,加速生態(tài)建設(shè)……
那么到底何為“玲瓏”?它從哪里來?又要到哪里去?接下來,此文為你一一揭秘。
前言:軟件包管理器的演進(jìn)
Linux 操作系統(tǒng)一直以其開源性質(zhì)和靈活性而聞名,而要使 Linux 系統(tǒng)能夠順利安裝并運(yùn)行所需的軟件,最關(guān)鍵的部分就是軟件包管理器。
顧名思義,Linux 軟件包管理器是一種在 Linux 操作系統(tǒng)上用于安裝、更新和卸載軟件包的工具。它的歷史可以追溯到上世紀(jì) 90 年代,此時(shí) Linux 正處于起步階段,軟件的安裝必須手動(dòng)下載源代碼并編譯,這對非技術(shù)用戶來說是一項(xiàng)繁瑣且困難的任務(wù)。
這種情況下,先后催生了 dpkg 和 rpm,然而由于不能自動(dòng)解決依賴關(guān)系,其使用起來依舊不便。
直到 Debian 的 apt、Red Hat 的 up2date 的發(fā)布,包管理器可用性有了很大的提升。它們采用了一種被稱為“依賴關(guān)系解決器”的算法,能夠自動(dòng)解決軟件包之間的依賴關(guān)系,從而簡化軟件的安裝和升級過程。但這在另一方面大大增加了復(fù)雜度,維護(hù)者們需要非常謹(jǐn)慎小心地處理,稍有不慎就會(huì)陷入“依賴地獄”,導(dǎo)致軟件包系統(tǒng)發(fā)生故障。
此外,還有許多其他的軟件包管理器,如 yum、portage 和 pacman 等。包管理器的多樣性給用戶帶來了更多選擇,但缺點(diǎn)也十分顯著:它們的軟件包無法互通,這意味著一款軟件要在其他發(fā)行版上使用,可能需要被重復(fù)打包。
隨著 Linux 內(nèi)核對容器的支持、Docker的誕生,Snap、Flatpak 等一批容器思想的包管理器也開始嶄露頭角。這類格式的軟件包與系統(tǒng)環(huán)境幾乎完全解耦,不再依賴系統(tǒng)上的庫文件(AppImage 也是如此),應(yīng)用分發(fā)開始逐步變得簡單起來。但磁盤、內(nèi)存占用較高,啟動(dòng)時(shí)間被不斷延長等問題也隨之而來,至今仍未被解決。
探索:“玲瓏”應(yīng)運(yùn)而生
deepin 自 2015 年放棄基于 Ubuntu 作為上游,選擇 Ubuntu 的非商業(yè)上游社區(qū) Debian 作為研發(fā)的基礎(chǔ)起,我們便收到了眾多用戶關(guān)于軟件包管理上的問題反饋,常見的有:
- 系統(tǒng)上能用的應(yīng)用太少,可用的應(yīng)用版本太老;
- 系統(tǒng)更新后,某些應(yīng)用無法正常使用;
- 從其他來源獲取某些應(yīng)用軟件安裝后,包管理器無法正常工作,甚至系統(tǒng)無法繼續(xù)使用。
以上這些問題有一個(gè)共性原因:依賴關(guān)系綁定太強(qiáng)。因系統(tǒng)底層庫的關(guān)系,應(yīng)用無法隨意更新,在底層庫有接口變動(dòng)時(shí),應(yīng)用需要重新適配才能正常工作。
在意識到這些問題后,我們開始嘗試使用新的軟件包管理器。
- 在 deepin 上適配 Snap:由于 Snap 在除 Ubuntu 系統(tǒng)環(huán)境外有諸多兼容性問題,遂放棄。
- 將部分自研應(yīng)用轉(zhuǎn)化為 AppImage:AppImage 有著不錯(cuò)的可移植性,這些應(yīng)用可以很輕松地在其他發(fā)行版上使用。但它沒有集中的倉庫存儲和軟件包管理功能,也不提供 Snap、Flatpak 同一級別的沙箱,安全性無法保障,不適合作為操作系統(tǒng)的默認(rèn)軟件包管理方式。
- 2017年,deepin 對 Flatpak 格式進(jìn)行了跟進(jìn),完成了 100 的軟件包構(gòu)建工作,后因其應(yīng)用體積較大,磁盤占用過多、Bug 修復(fù)緩慢等各種原因沒有繼續(xù)適配。
在經(jīng)歷過種種“折騰”后,基于對各類包管理器的了解,我們決定自己設(shè)計(jì)一套軟件包管理系統(tǒng)。
在經(jīng)過 3 個(gè)多月的技術(shù)調(diào)研,1 年多的原型驗(yàn)證、技術(shù)方案完善和產(chǎn)品打磨后,最終一套先進(jìn)的解決方案——“玲瓏”應(yīng)運(yùn)而生。
頂層組件關(guān)系圖
- 應(yīng)用沙箱 (ll-box) :按照 OCI 標(biāo)準(zhǔn)設(shè)計(jì)的應(yīng)用沙箱運(yùn)行環(huán)境,利用內(nèi)核 Cgroup、Namespace 特性將應(yīng)用與宿主機(jī)環(huán)境隔離,限制系統(tǒng)資源的使用。
- 應(yīng)用管理服務(wù) (ll-service/ll-cli) :提供應(yīng)用沙箱環(huán)境創(chuàng)建,系統(tǒng)兼容性問題處理等功能。完成對應(yīng)用的安裝狀態(tài)/運(yùn)行狀態(tài)管理。
- 權(quán)限管理代理服務(wù) (ll-dbus-proxy/ll-fuse-proxy) :提供權(quán)限管理功能,包括 DBus 接口以及文件接口。
- 應(yīng)用構(gòu)建工具(ll-builder):提供容器化的應(yīng)用構(gòu)建環(huán)境,方便開發(fā)者在不同的環(huán)境上構(gòu)建出一致性的應(yīng)用。
- 單獨(dú)打包格式(uab/AppBundle):Uniontech Application Bundle,應(yīng)用包封裝格式,提供可直接運(yùn)行的二進(jìn)制包格式。
- 倉庫系統(tǒng)(ll-repo-server):提供包上傳、下載、信息統(tǒng)計(jì)、查詢等功能,底層存儲使用 OSTree。
運(yùn)行視圖
成果:解決兼容性問題、性能大幅提升
此前,國內(nèi)軟件生態(tài)建設(shè)尚不成熟,軟件兼容性、安全性問題頻出,在面向不同的操作系統(tǒng)進(jìn)行應(yīng)用打包和分發(fā)時(shí),會(huì)額外耗費(fèi)大量的時(shí)間和資源。
而玲瓏的出現(xiàn),無疑為解決這一難題提供了新思路。玲瓏的隔離技術(shù)可以將應(yīng)用與系統(tǒng)進(jìn)行完全解耦,從而徹底解決系統(tǒng)與應(yīng)用、應(yīng)用與應(yīng)用之間因升級引起的兼容性問題 ,同時(shí)減少不同操作系統(tǒng)下分發(fā)時(shí)的打包次數(shù)。
傳統(tǒng)架構(gòu) Vs 玲瓏架構(gòu)
當(dāng)前,玲瓏的基礎(chǔ)設(shè)施已較為完善,衍生出了 5 個(gè)項(xiàng)目,共 9 個(gè)組件。
項(xiàng)目組件概述
相比其他類似軟件包格式,玲瓏在啟動(dòng)速度、資源占用方面具有許多優(yōu)勢:
- 使用非全量運(yùn)行時(shí)(宿主系統(tǒng) Runtime),整體體積較??;
- 由于復(fù)用宿主系統(tǒng)上的庫,可以使用到部分已經(jīng)加載到內(nèi)存中的庫文件,啟動(dòng)速度會(huì)更快,同一應(yīng)用在玲瓏下啟動(dòng)速度提升顯著;
- 提供開發(fā)庫托管服務(wù),類似NuGet,方便開發(fā)者進(jìn)行開發(fā);
- 支持Rootless(無特權(quán))沙箱。
軟件包大小統(tǒng)計(jì)
軟件包啟動(dòng)耗時(shí)統(tǒng)計(jì)
在最新版本 deepin v23 上,已預(yù)裝十多款左右玲瓏格式自研應(yīng)用。玲瓏網(wǎng)頁商店內(nèi),常用應(yīng)用已上架 120 余款,如QQ、微信、網(wǎng)易云音樂、迅雷等,累計(jì)下載量當(dāng)前已達(dá) 40w 。
未來:助力操作系統(tǒng)軟件包生態(tài)健康發(fā)展
未來,我們將從權(quán)限管控、用戶交互及可用軟件數(shù)量等方面著手,對玲瓏進(jìn)行進(jìn)一步加強(qiáng)優(yōu)化。
1、權(quán)限管控
當(dāng)前玲瓏文件訪問文件的權(quán)限較為單一,只能在應(yīng)用啟動(dòng)前處理目錄的掛載,未掛載的目錄無法被啟動(dòng)后的應(yīng)用訪問到。
未來將會(huì)支持文件訪問權(quán)限的動(dòng)態(tài)管控,無論應(yīng)用啟動(dòng)與否均可管理,同時(shí)控制中心會(huì)同步適配玲瓏的權(quán)限管控,提供應(yīng)用權(quán)限管理界面。
2、用戶交互
目前玲瓏應(yīng)用的更新需要用戶手動(dòng)命令行更新,需要一定的 Linux 基礎(chǔ)。且當(dāng)軟件包出現(xiàn)問題時(shí),無法直接查詢到構(gòu)建源頭的信息,如 git 項(xiàng)目的 hash 值。
未來,應(yīng)用商店將支持玲瓏應(yīng)用更新。同時(shí)支持溯源,對開發(fā)者來說能快速查詢到軟件包使用的源文件 hash 值,更容易追蹤和解決問題。
3、軟件包生態(tài)
生態(tài)建設(shè)需要大家共同發(fā)力,我們目前已在著手開發(fā)相關(guān)軟件包轉(zhuǎn)換工具,可以將現(xiàn)有的 deb、appimage 等格式軟件包輕松地轉(zhuǎn)換成玲瓏應(yīng)用。同時(shí)也在推動(dòng)已有合作軟件廠商對玲瓏的適配。
與其踽踽獨(dú)行,不如結(jié)伴而行,生態(tài)建設(shè)需要大家共同努力。此前,deepin 開源社區(qū)已和北京航空航天大學(xué)開展暑期共建開源生態(tài)合作,已有眾多北航學(xué)子參與到生態(tài)共建中來。
我們衷心希望玲瓏能夠解決多發(fā)行版應(yīng)用分發(fā)困難的問題,同時(shí)也期待更多的感興趣的朋友加入我們,共建應(yīng)用分發(fā)體系,為操作系統(tǒng)軟件生態(tài)健康發(fā)展貢獻(xiàn)力量。
你對玲瓏的未來有哪些期待或建議呢?歡迎在公眾號評論區(qū)留言,留言點(diǎn)贊數(shù)前三的參與者,將獲得 deepin 社區(qū)文化周邊一份~
(溫馨提示:留言點(diǎn)贊截止時(shí)間為2023 年 9 月 1 日18:00?;顒?dòng)結(jié)束后,我們將聯(lián)系中獎(jiǎng)?wù)咚统鲶@喜?。?/span>
內(nèi)容來源:深度操作系統(tǒng)公眾號
原文鏈接:https://mp.weixin.qq.com/s/XUnWNi6CZaJBf944Ge94Uw
文字來源:kamiyadm