[Exchange and share] 深入探索玲珑 01——玲珑方案的创造!
Tofloor
poster avatar
white777
deepin
OM
2022-08-18 05:29
Author

各位小伙伴们,此前我们已经对玲珑包格式的诞生、特性进行了完整的介绍。

在接下来的一系列文章中,我们将带大家深入挖掘玲珑包格式的更多内容,着重向大家介绍传统包管理的问题,以及我们是如何借鉴了主流通用独立包格式的优秀思路,创造了 “玲珑方案”like

玲珑1.jpg

01 传统包管理问题

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

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

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


02 选择解决方案

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

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

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

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


03 玲珑方案

玲珑,为兼容与安全而生。它致力于治理Linux系统下传统软件包格式依赖关系复杂导致的各种兼容性问题,以及过于松散的权限管控导致的安全风险。 在技术方案的选择上, 我们吸取了主流通用独立包格式的优秀思路,将应用/运行时/系统环境进行分层管理,将应用的运行依赖独立出来构建出一个较为通用的runtime,且提供了完善的机制,支持发行版针对runtime进行深度优化,兼顾通用与轻量化,避免过多占用磁盘空间和影响性能。

同时,采用“沙箱”的容器化机制运行应用,将应用与系统进行隔离,减少应用对系统造成破坏的可能性。另外,默认限制“沙箱”的root权限,防止应用运行时可获取过高权限,减少用户数据被损害的风险。 在软件分发方面, 玲珑支持增量在线分发,同时也可支持bundle格式进行离线分发。离线分发时,无需安装应用即可双击直接运行,无需卸载应用,直接删除包文件即可,使用非常方便。

那么以上是玲珑方案创造历程的介绍,欢迎各位小伙伴们与我们进行使用体验交流!

在后续的揭秘中,我们将会进一步对玲珑组件、权限管理机制进行解读,敬请期待!yeah

Reply Favorite View the author
All Replies
3 / 3
To page
阿甘
deepin
2022-09-17 19:24
#41
风轻云淡

v23运行很流畅,比v20.6更流畅  

没有应用商店,不习惯.玲珑方案是什么,不懂

装了两台电脑,网页播放均没有声音输出,但是单独播放硬盘上文件正常    

有应用商店,你自己不看吗?

Reply View the author
150******80
deepin
2022-09-27 18:01
#42

希望能有一个自定义主题中心,然后大家可以随意修改自己的布局并且上传,比如说这种布局:
202209242049401297_IMG_20220924_203322_edit_35256622913369.jpg

Reply View the author
dell1025ht
deepin
2022-10-04 03:11
#43

V23可以自带玲珑商店吗

Reply View the author
牛轧棉花糖
deepin
2022-10-18 20:18
#44
一醉陶然

bundle格式 和 appimage 格式 有什么区别?

好像本身appimage也是bundle格式的,我也比较好奇玲珑包管理跟appimage有哪些相似性以及不同

Reply View the author
牛轧棉花糖
deepin
2022-10-18 20:30
#45

我查看了https://linglong.dev/guide/start/whatis.html功能对比,但玲珑包管理与appimage在设计思想上有高度相似性,且大部分区别都是因appimage非系统原生包管理工具而导致缺失的功能,我希望了解玲珑是否借鉴appimage思路以及将其用在系统原生包管理上做了哪些工作

Reply View the author
131******00
deepin
2022-11-13 03:45
#46

玲珑的思路是有问题的,它是类似把所有依赖都打包到程序里(除了glibc这样的通用库),但是这会造成十分多的冗余;为什么不学npm的这种包管理呢?比如A应用依赖了m.so 1.1.1,n.so 2.3.4,B应用依赖了m.so 1.1.3,x.so 3.5.4,那么就在比如/usr/lib/uab_packages/m/1.1.1/m.so,uab_packages/n/2.3.4/n.so,uab_packages/m/1.1.3/m.so,uab_packages/x/3.5.4/x.so,这种方式保存依赖库呢?然后A应用启动的时候指定其依赖的库从对应的库版本目录里搜索(有点像java启动时指定classpath),这样就能保证不会依赖地狱,也能尽量少的冗余;

Reply View the author
131******00
deepin
2022-11-13 04:01
#47

还有就是能不能提供类似vendor的功能,就是发现当前要安装的应用的某个依赖库会和其他有冲突的时候,就将这个依赖库复制到安装的应用的bin目录,这样就能针对部分依赖实现解决冲突了

Reply View the author
peng3785
deepin
2022-11-17 18:19
#48

没看懂?怎么做到兼容各种格式的包,而做到体积不增大的?docker的?window程序呢?

Reply View the author
131******00
deepin
2022-11-21 20:31
#49

是不是和podman类似呢?不会有守护进程额外消耗吧?

Reply View the author
131******00
deepin
2022-11-21 20:39
#50

运行时建议支持明天的qt6.5lts,qt6对wayland有一些优化,以及支持gtk4.2以上版本,很多UI程序也是基于gtk库,然后就是wine可以考虑wineland,能够以wayland启动wine程序(后续wine官方应该就会支持,建议到时候升级),还有waydroid

Reply View the author
131******00
deepin
2022-11-21 20:40
#51
andy-ian

docker不就是只要Linux Kernel 支持就可以了吗,当然也是要安装docker环境,发布也是增量式的发布

怎么感觉与docker那么像?

还是说可以将玲珑理解成针对客户端进行了优化的docker?

别用docker了,用podman

Reply View the author
131******00
deepin
2022-11-21 20:51
#52
131******00

玲珑的思路是有问题的,它是类似把所有依赖都打包到程序里(除了glibc这样的通用库),但是这会造成十分多的冗余;为什么不学npm的这种包管理呢?比如A应用依赖了m.so 1.1.1,n.so 2.3.4,B应用依赖了m.so 1.1.3,x.so 3.5.4,那么就在比如/usr/lib/uab_packages/m/1.1.1/m.so,uab_packages/n/2.3.4/n.so,uab_packages/m/1.1.3/m.so,uab_packages/x/3.5.4/x.so,这种方式保存依赖库呢?然后A应用启动的时候指定其依赖的库从对应的库版本目录里搜索(有点像java启动时指定classpath),这样就能保证不会依赖地狱,也能尽量少的冗余;

这个类似nixos

Reply View the author
WangZhongyun
deepin
2022-11-22 18:13
#53

经测试,debian11里安装了玲珑环境,但安装软件都报608错误
截图_2022-11-22_10-13-14.png

Reply View the author
WangZhongyun
deepin
2022-11-22 18:17
#54
131******00

玲珑的思路是有问题的,它是类似把所有依赖都打包到程序里(除了glibc这样的通用库),但是这会造成十分多的冗余;为什么不学npm的这种包管理呢?比如A应用依赖了m.so 1.1.1,n.so 2.3.4,B应用依赖了m.so 1.1.3,x.so 3.5.4,那么就在比如/usr/lib/uab_packages/m/1.1.1/m.so,uab_packages/n/2.3.4/n.so,uab_packages/m/1.1.3/m.so,uab_packages/x/3.5.4/x.so,这种方式保存依赖库呢?然后A应用启动的时候指定其依赖的库从对应的库版本目录里搜索(有点像java启动时指定classpath),这样就能保证不会依赖地狱,也能尽量少的冗余;

比较合理的方式是把确实是复杂依赖的才把依赖一并打包吧。比较单一无需经常更新的依赖可以入库

Reply View the author
131******00
deepin
2022-11-22 22:23
#55
WangZhongyun

比较合理的方式是把确实是复杂依赖的才把依赖一并打包吧。比较单一无需经常更新的依赖可以入库

看nix包管理器

Reply View the author
W2J
deepin
2023-01-06 19:04
#56
火彩

appimage格式的软件届时能由用户自己操作,无损转换成玲珑格式吗?

我也喜欢appimage绿色封装方式——支持最小化,搬移便捷。

“防火墙”留个“安全门”,再加上对专业软件的“绿色增强”(支持最小化),

最后“安全门审计”留个运行足迹,算是简约完美了!

Reply View the author
flxyan
deepin
2023-02-26 02:25
#57

耐得住性子,等正式版 。。。。。。。。。。。。。。。。。。。。

Reply View the author
封禁用户SB
deepin
2023-03-06 01:56
#58
158******82

应用商店哪去了?

最新的版本有了。

Reply View the author
3 / 3
To page