我寻找比较但找不到,而且我现在也没有足够的知识来自己做这件事。
它们都提供事务更新,但是包含的级别不同。
- Snappy 静态编译库以提供二进制依赖项的多个版本。它将提供的(和需要的?)服务声明为元数据。软件包以单个映像的形式提供?
- Nix 处理动态链接以提供二进制依赖项的多个版本?它将提供的和需要的服务声明为元数据。该包通过处理依赖项的存储库提供。
- Guix 与 Nix 类似,但具有 GNU 集成功能。
Nix 和 Guix 之间的更深入比较如下桑德·范德伯格,我没有详细研究过。我猜 Canonical 有人对现有的解决方案进行了分析。我听说还有其他基于镜像的部署系统,比如 CoreOS。
那么,Snappy Ubuntu 与 Nix 和 Guix 有何关系?主要区别是什么?
答案1
最近我自己做了一个评估。我实际上是一个 Nix/NixOS 贡献者,也是对部署技术感兴趣的前研究员。
我尽可能地坚持事实,但可能无法完全保持客观。总结一下我的发现:
两种方法都将包存储在隔离。Snappy 使用以下命名约定将应用程序和框架存储在文件夹中:
/app/name/version.vendor
,而 Nix 使用/nix/store/hash-name-version
。Nix 的命名约定更强大,因为它使用来自所有构建时依赖项。使用 Nix,您可以轻松区分软件包的任何变体并将它们存储在一起。任何更改(例如不同的构建过程、库升级、编译器升级)都会产生新的哈希,从而可以将任何可能的变体存储在一起。
为了让包找到它的依赖项,Nix 将它们绑定静态地为可执行文件(例如通过修改
RPATH
ELF二进制文件的)或将它们包装在设置适当环境变量的脚本中(例如,,,CLASSPATH
等等)。PYTHONPATH
PERL5LIB
Snappy 撰写容器可执行文件可以在其公共 FHS 位置找到其依赖项,
/lib
例如/bin
然而,Nix 也支持 Snappy 的容器方法,但这仅在极少数情况下使用。使用容器化方法的最突出的 Nix 软件包是 NixOS 中的 Steam,因为 Steam 本身就是一个具有冲突属性的部署工具。
Snappy Ubuntu Core 使用所谓的“A/B”分区方案来升级(和回滚)基础系统。它一次仅支持有限数量的版本(通常为两个)。
相比之下,NixOS(基于 Nix 的 Linux 发行版)创作基础系统也从 Nix 商店中的 Nix 软件包中分离出来,功能更加强大。您可以回滚到任何尚未被垃圾回收的先前配置。此外,各代之间的类似系统软件包可以共享。
两种工具都支持非特权用户安装。但是,Snappy 将所有文件存储在用户的主目录中。如果两个用户恰好安装了同一个包,那么它们将在系统上安装两次。
相比之下,Nix 软件包还允许普通用户在中央 Nix 商店中安装软件包,以便可以共享在用户之间。部分由于命名约定(使用哈希),这可以以安全的方式完成。
Snappy限制开箱即用的软件包的运行时行为,而 Nix 没有
Snappy 似乎无法帮助用户构造来自源代码的软件包。然而,Nix 有一个 DSL,允许人们非常轻松地做到这一点,并在需要时自动安装所有构建时依赖项(编译器、构建工具、库等)
Snappy 几乎不支持模块化,并且重复使用。在示例包中,所有库依赖项都是静态捆绑的,占用更多的磁盘空间和 RAM。此外,文档似乎没有提供除框架之外的任何功能。但是,根据文档,框架并不适合重复使用
Nix 模块化包和安全管理依赖项是它的一些主要功能。
完整博文可以在这里找到:http://sandervanderburg.blogspot.com/2015/04/an-evaluation-and-comparison-of-snappy.html
希望您觉得阅读它很有趣,也许其中有一些内容值得您思考。