前言:软件包管理器的演进
Linux 操作系统一直以其开源性质和灵活性而闻名,而要使 Linux 系统能够顺利安装并运行所需的软件,最关键的部分就是软件包管理器。
此外,还有许多其他的软件包管理器,如 yum、portage 和 pacman 等。包管理器的多样性给用户带来了更多选择,但缺点也十分显著:它们的软件包无法互通,这意味着一款软件要在其他发行版上使用,可能需要被重复打包。
随着 Linux 内核对容器的支持、Docker的诞生,Snap、Flatpak 等一批容器思想的包管理器也开始崭露头角。这类格式的软件包与系统环境几乎完全解耦,不再依赖系统上的库文件(AppImage 也是如此),应用分发开始逐步变得简单起来。但磁盘、内存占用较高,启动时间被不断延长等问题也随之而来,至今仍未被解决。
探索:“玲珑”应运而生
deepin 自 2015 年放弃基于 Ubuntu 作为上游,选择 Ubuntu 的非商业上游社区 Debian 作为研发的基础起,我们便收到了众多用户关于软件包管理上的问题反馈,常见的有:
-
系统上能用的应用太少,可用的应用版本太老; -
系统更新后,某些应用无法正常使用; -
从其他来源获取某些应用软件安装后,包管理器无法正常工作,甚至系统无法继续使用。
以上这些问题有一个共性原因:依赖关系绑定太强。因系统底层库的关系,应用无法随意更新,在底层库有接口变动时,应用需要重新适配才能正常工作。
-
在 deepin 上适配 Snap:由于 Snap 在除 Ubuntu 系统环境外有诸多兼容性问题,遂放弃。 -
将部分自研应用转化为 AppImage:AppImage 有着不错的可移植性,这些应用可以很轻松地在其他发行版上使用。但它没有集中的仓库存储和软件包管理功能,也不提供 Snap、Flatpak 同一级别的沙箱,安全性无法保障,不适合作为操作系统的默认软件包管理方式。 - 2017年,deepin 对 Flatpak 格式进行了跟进,完成了 100+ 的软件包构建工作,后因其应用体积较大,磁盘占用过多、Bug 修复缓慢等各种原因没有继续适配。
在经历过种种“折腾”后,基于对各类包管理器的了解,我们决定自己设计一套软件包管理系统。
在经过 3 个多月的技术调研,1 年多的原型验证、技术方案完善和产品打磨后,最终一套先进的解决方案——“玲珑”应运而生。
顶层组件关系图:
- 应用沙箱 (ll-box) :按照 OCI 标准设计的应用沙箱运行环境,利用内核 Cgroup、Namespace 特性将应用与宿主机环境隔离,限制系统资源的使用。
- 应用管理服务 (ll-service/ll-cli) :提供应用沙箱环境创建,系统兼容性问题处理等功能。完成对应用的安装状态/运行状态管理。
- 权限管理代理服务 (ll-dbus-proxy/ll-fuse-proxy) :提供权限管理功能,包括 DBus 接口以及文件接口。
- 应用构建工具(ll-builder):提供容器化的应用构建环境,方便开发者在不同的环境上构建出一致性的应用。
- 单独打包格式(uab/AppBundle):Uniontech Application Bundle,应用包封装格式,提供可直接运行的二进制包格式。
- 仓库系统(ll-repo-server):提供包上传、下载、信息统计、查询等功能,底层存储使用 OSTree。
成果:解决兼容性问题、性能大幅提升
而玲珑的出现,无疑为解决这一难题提供了新思路。玲珑的隔离技术可以将应用与系统进行完全解耦,从而彻底解决系统与应用、应用与应用之间因升级引起的兼容性问题 ,同时减少不同操作系统下分发时的打包次数。
传统架构 Vs 玲珑架构
-
使用非全量运行时(宿主系统+Runtime),整体体积较小; -
由于复用宿主系统上的库,可以使用到部分已经加载到内存中的库文件,启动速度会更快,同一应用在玲珑下启动速度提升显著; -
提供开发库托管服务,类似NuGet,方便开发者进行开发; -
支持Rootless(无特权)沙箱。
软件包大小统计:
软件包启动耗时统计:
未来:助力操作系统软件包生态健康发展
2、用户交互
目前玲珑应用的更新需要用户手动命令行更新,需要一定的 Linux 基础。且当软件包出现问题时,无法直接查询到构建源头的信息,如 git 项目的 hash 值。
未来,应用商店将支持玲珑应用更新。同时支持溯源,对开发者来说能快速查询到软件包使用的源文件 hash 值,更容易追踪和解决问题。
3、软件包生态
生态建设需要大家共同发力,我们目前已在着手开发相关软件包转换工具,可以将现有的 deb、appimage 等格式软件包轻松地转换成玲珑应用。同时也在推动已有合作软件厂商对玲珑的适配。
与其踽踽独行,不如结伴而行,生态建设需要大家共同努力。
我们衷心希望玲珑能够解决多发行版应用分发困难的问题,同时也期待更多的感兴趣的朋友加入我们,共建应用分发体系,为操作系统软件生态健康发展贡献力量。
发表回复