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