在使用 Deepin/UOS 系统时,我注意到应用商店新增了一个“玲珑应用”的类别。经过一番了解,发现这是一种最新研发的国产软件包格式——如意玲珑。那么,什么是如意玲珑?为什么要开发这样一种全新的软件包格式?这篇文章就带大家深入探索如意玲珑的世界。
如意玲珑(Linyaps)是一种新型的独立包管理工具集,专注于解决Linux系统下由传统软件包格式的复杂性和交叉依赖关系引起的兼容性问题。
许多从 Windows 转向国产 Linux 系统的用户会困惑:为什么 Linux 应用程序没有像 Windows 那样的安装包?在 Windows 中,只需双击安装程序,通过图形界面安装,即可通过开始菜单或桌面快捷方式运行应用。这种直观的操作流程使得电脑新手也能轻松上手。
其实 Linux 下有些应用也做成了安装包,比如 Qt 开发工具,就有安装界面。那为什么 Linux 应用程序很少做安装包?
对于这个问题,我们做信创软件适配时也尝试过,使用 Qt Installer Framework 做安装包。但是发给用户,问得最多的问题是:为什么双击没反应?这不得不说一点 Windows 和 Linux 的差异,Windows 下,文件名后缀为 exe 和 com 格式的文件被认为是可执行文件,而 Linux 下则是通过文件属性来判断的,文件有读、写、执行三种标志位,只有通过命令将文件可执行标志修改过来,才可以执行。所以将包发给用户后,还得告诉用户在命令行修改为可执行文件,想想有多少用户能接受?Linux 从 Windows 借鉴了一些,通过后缀名,比如 doc 等,调用对应的软件打开,但对于可执行程序的判断,一直维持现状。
这还不算最糟糕的,因为在 Linux 操作系统发展初期,软件主要以源码发布,用户需要自己编译。那个时候 Linux 系统主要还是一群极客在使用。而开源被这群极客奉为圭臬。所以那个时候拿到软件的标志步骤是:
tar xvf xxx.tar.gz # 解压软件包
cd xxx
./configure
make
make install
至于图形界面,那是被极客们瞧不上的。
然而,随着 Linux 系统越来越受欢迎,大批不那么极客的用户开始使用 Linux 系统。这种源码编译的方式太不友好了,软件越来越复杂,编译越来越耗时,而且环境不同,有可能有编译问题。
为了解决源码编译的复杂性,软件包管理系统应运而生。由于 Linux 的开放性,很快分裂成两个阵营,分别是 deb 和 rpm:
这两种包管理系统允许用户直接下载和安装预编译的二进制包,并自动处理依赖关系。这极大地方便了软件的安装和管理,减少了手动编译和依赖解决的负担。
随着互联网的发展,DEB 和 RPM 包管理系统不断改进,引入了功能更强大的依赖管理工具:
这两个包管理系统为 Linux 社区提供了长期稳定的解决方案,现在依然被包括国产系统在内的 Linux 系统所采用。
这个时候,国产系统新开发一种软件包格式,是重复造轮子吗?
当然不是,这得说一说 deb 包和 rpm 包的问题。
首先,不同的发行版有各自的包格式和软件仓库。一个为 DEB 打包的软件不能直接在 RPM 系统上使用,反之亦然。应用程序的开发者必须为每个发行版分别打包和发布。
其次,传统的 DEB 和 RPM 包都依赖于系统的特定环境,但这容易引起软件依赖冲突。举个简单的例子,应用 A 依赖 Qt 5.12,应用 B 依赖 Qt 5.15,在没安装 B 之前 A 可以正常运行,但安装 B 后,将 Qt 库的版本升级了,这可能导致 A 运行出问题。这点和 Windows 下的 “dll 地狱问题”有些类似。我之前写过《Deepin V23下 EasyConnect VPN 问题之解决》,在这个问题上,有一个原因就是包依赖导致的。
deb 包和 rpm 包还有更多的问题,这里直接看看玲珑包做了哪些改进。
玲珑软件包是为了取代现有的 DEB 包吗?
并不是。玲珑包并不是为了完全取代 DEB,而是为了解决一些 DEB 无法解决的问题,尤其是在应用程序的跨发行版兼容性、沙盒化和易用性方面。
它们之间是并存与互补的关系。玲玲包主要用于桌面应用程序的分发,特别是需要频繁更新的应用。而 DEB 包仍然是系统核心组件和应用的首选方式。它们为不同的场景提供了不同的优势。
而且,现有的软件包大多以 DEB 包格式提供,不可能很快迁移到玲珑包格式上。
对于 DEB 或 RPM 包的这些问题,其实市场也有一些新的解决方案,比如 snap 和 flatpak,还有类似于 Windows 下绿色软件的更简单格式:AppImage。那玲珑包相较这些竞品又有哪些优势呢?请看下面的表格。
玲珑包格式的引入,会不会又是国产系统引入的壁垒?
技术架构上,玲珑最大的特点就是支持跨发行版。基于User Namespace、CGroup等机制,玲珑提供了统一的、脱离于操作系统之外的应用程序运行环境,其中主要包括 Qt 等桌面应用常用的库和依赖,这些运行环境支持多版本共存,从而能实现“一个架构,一次构建”。
目前,如意玲珑项目已正式捐赠给开放原子开源基金会(OpenAtom Foundation),项目已经支持多个发行版本,包括Deepin、统信 UOS、欧拉、OpenKylin、麒麟专业版、Ubuntu 24.04、Debian 12。
玲珑的引入标志着 Linux 软件包管理的又一次革新,它解决了传统包管理系统在现代桌面应用分发中的诸多痛点,尤其是在跨发行版兼容性、沙盒化安全环境和依赖简化等方面展现出独特优势。然而,DEB 和 RPM 包仍将在系统级软件和服务器软件的管理中扮演重要角色。玲珑包与传统包管理方式并不是相互取代,而是为不同应用场景提供了更灵活的选择,共同推动国产系统的生态发展。
如何制作玲珑软件包?如何将现有的 DEB 或 AppImg 包转成玲珑包?请关注后续的文章。