我搜索了一个比较,但发现不是,而且我现在还没有足够的信息自己去做。
它们都提供事务性更新,但包含不同级别的内容。
Sander van der Burg对 Nix 和 Guix 进行了更深入的比较,我没有详细研究。我猜 Canonical 的某个人已经对现有解决方案进行了分析。还有其他基于图像的部署系统,比如有人告诉我 CoreOS。
那么,Snappy Ubuntu 与 Nix 和 Guix 有何关联?主要区别是什么?
小智 33
最近,我自己做了一个评估。我实际上是 Nix/NixOS 的贡献者,也是对部署技术感兴趣的前研究员。
我试图尽可能地坚持事实,但保持完全公正可能是不可能的。总结一下我的发现:
无论是在接近商店包隔离。Snappy 使用以下命名约定将应用程序和框架存储在文件夹中:/app/name/version.vendor
,而 Nix 使用/nix/store/hash-name-version
.
Nix 的命名约定更强大,因为它使用从所有构建时依赖项派生的哈希前缀。使用 Nix,您可以轻松区分包的任何变体并将它们彼此相邻存储。任何更改(例如不同的构建过程、库升级、编译器升级)都会产生一个新的哈希值,从而可以将任何可能的变体彼此相邻存储。
以允许一个包找到它的依赖性,尼克斯结合他们静态为可执行(例如通过修改RPATH
一个ELF二进制的),或通过在设置适当的环境变量的脚本(例如包裹它们CLASSPATH
,PYTHONPATH
,PERL5LIB
等等)。
瞬间组成的容器中的可执行文件可以找到它们的依赖于他们共同的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
希望你觉得阅读起来很有趣,也许其中有一些你觉得值得思考的东西。