深入探索deepin自研包格式——“玲珑”

玲珑是什么?

玲珑——统信软件自研的开源软件包格式,用于与dpkg、rpm等包管理工具共同实现应用包管理、分发、沙箱、集成开发等功能。

在deepin 23 Preview阶段,独立创新的包格式到来,将解决linux长久存在的依赖问题和安全问题。同样,它也将成为建立独立上游的基础。

玲珑的诞生

“玲珑”的名称从何而来?八宝玲珑塔,蕴含芥子乾坤般的另一个世界,状似七层实非七层,以逞道法之变化。而我们则取“玲珑”二字,融合“隔离”与“分层”思想,推出全新的Linux包格式,将应用运行时的系统环境进行分层管理,并提供沙箱环境,致力于治理Linux系统下复杂、交叉的依赖关系,以及过于松散的权限管控问题。

玲珑的特性

也许你会疑惑:作为独立上游基础的玲珑,它究竟好在哪里?不妨让我们来看这张图!

第一,它将面向任意linux发行版,只需要构建一次,即可运行在任意的linux发行版桌面环境;

第二,它提供简单小巧的构建工具,方便易用;

第三,它具备稳定独立的运行环境,提供了稳定兼容的runtime,且应用可自行控制依赖与系统独立;

第四,它包含安全隔离的沙箱容器,玲珑应用运行在独立的沙箱环境,与宿主机隔离,安全稳定;

第五,它拥有完善的权限管控机制,致力于保护用户隐私;

第六,它同时支持应用增量更新。

总而言之,它提升了易用性及安全性,极大程度保护了使用者的隐私。

传统包管理问题

第一,不同发行版维护成本高。由于deb与rpm这两种包格式完全分割,开发者需要针对不同发行版单独构建和维护包。

第二,兼容性问题难以解决。deb与rpm允许各个包之间有复杂的交叉依赖(或循环依赖)关系。这使得维护包管理系统需要极强的专业知识,稍有不慎, 就会导致系统彻底故障,很难修复。系统升级有概率导致应用依赖关系被破坏,从而引发兼容性问题。

第三,安全性难以把控。传统Linux系统下的包管理更面向系统管理员而非应用开发者和使用者,给予了包更多的对系统的修改权限 ,应用开发者容易在不熟悉系统的情况下埋下较多安全隐患。

选择的解决方案

面对以上传统包管理的问题,业界已经有了一些通用独立包格式的解决方案。它致力于帮助开发者在所有Linux发行版运行同一个版本的应用。

为了实现这个目的,它们会将系统与应用进行隔离,于是封装了一个独立于系统的运行环境,应用不再依赖于操作系统本身提供的运行环境。另外,通用独立包格式也在努力增强安全性,通常它们会使用“沙箱”来将应用与宿主机进行隔离,防止恶意程序携带的病毒感染整个系统。

然而,这些方案也存在一些问题:通用软件包格式为了让应用独立于操作系统,从而封装了依赖到单独的运行环境,势必会造成应用体积变大;且为了保证通用性,需要一个庞大的运行时环境,对磁盘空间占用则会更多。对于应用来说同样存在这个问题,应用需要将部分独有的依赖加入到应用自身,使得软件大小会比传统包格式更大,对于性能也有所损耗。

另外,安全性上也有待加强。比如部分独立包格式的解决方案以root权限启动沙箱,会留下各种提权攻击的隐患,从而可能引发安全问题。

玲珑方案

玲珑,为兼容与安全而生。它致力于治理Linux系统下传统软件包格式依赖关系复杂导致的各种兼容性问题,以及过于松散的权限管控导致的安全风险。

在技术方案的选择上,我们吸取了主流通用独立包格式的优秀思路,将应用/运行时/系统环境进行分层管理,将应用的运行依赖独立出来构建出一个较为通用的runtime,且提供了完善的机制,支持发行版针对runtime进行深度优化,兼顾通用与轻量化,避免过多占用磁盘空间和影响性能。

同时,采用“沙箱”的容器化机制运行应用,将应用与系统进行隔离,减少应用对系统造成破坏的可能性。另外,默认限制“沙箱”的root权限,防止应用运行时可获取过高权限,减少用户数据被损害的风险。

在软件分发方面,玲珑支持增量在线分发,同时也可支持bundle格式进行离线分发。离线分发时,无需安装应用即可双击直接运行,无需卸载应用,直接删除包文件即可,使用非常方便。


评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注