Snappy与Nix和Guix有何关联?

我搜索了一下比较,但没有找到相关的信息,而且我现在对此也不是很了解。

它们都提供事务性更新,但所包含的程度有所不同。

  • Snappy通过静态编译库来提供多个版本的二进制依赖项。它将所提供的(和需要的?)服务声明为元数据。该软件包以单个镜像的形式提供?
  • Nix通过动态链接来提供多个版本的二进制依赖项。它将所提供的和需要的服务声明为元数据。该软件包通过处理依赖关系的存储库提供。
  • Guix与Nix类似,但具有GNU集成功能。

关于Nix和Guix的更详细比较由Sander van der Burg提供,我没有详细研究过。我猜想Canonical的某位人员可能已经对现有解决方案进行了分析。还有其他基于镜像的部署系统,比如我听说的CoreOS。

那么,Snappy Ubuntu与Nix和Guix有什么关系?主要区别是什么?


1所以你是在要求我们阅读你不想阅读的内容吗?“Sander van der Burg提供了更深入的Nix和Guix比较,但我没有阅读”……“Snappy Ubuntu与Nix和Guix有什么关系?主要区别是什么?” - don.joey
我在这里提问,因为我认为这个社区中的某个人已经考虑过这个问题或者知道一篇我没有找到的文章。今天我刚刚偶然发现了Snappy,并阅读了相关内容,但是我不认为自己对Snappy有足够的了解来决定它在这些成熟的软件包管理器之间的定位。Snappy的文章根本没有提到这些系统,我认为对其他处理类似问题的自由软件保持沉默是令人遗憾的。此外,链接的博客文章并没有提到Snappy,并且也不是由与Snappy有关的人撰写的。 - payload
1好的,没问题。取消了你的负评。 - don.joey
Snappy不会静态编译库。它允许您将库存储在与二进制文件相同的文件夹中,这样您就不必依赖系统库,但如果您不需要独立发布包,则也可以依赖于系统库。因此,Snappy不会削弱具有稳定LTS版本的好处。它只是使一切变得更简单。 - Jo-Erlend Schinstad
1个回答

最近,我对自己进行了评估。实际上,我是一个Nix/NixOS的贡献者,以及对部署技术感兴趣的前研究员。
我尽可能地坚持事实,但完全不偏见可能是不可能的。总结我的发现如下:
  • 两种方法都以隔离的方式存储软件包。Snappy使用以下命名约定将应用程序和框架存储在文件夹中:/app/name/version.vendor,而Nix使用/nix/store/hash-name-version
  • Nix的命名约定更强大,因为它使用派生自所有构建时依赖关系的哈希前缀。通过使用Nix,您可以轻松区分软件包的任何变体并将其存储在一起。任何更改(例如不同的构建过程、库升级、编译器升级)都会产生一个新的哈希值,从而使得可以将任何可能的变体存储在一起。
  • 为了让软件包找到其依赖项,Nix会将它们进行静态绑定到可执行文件(例如通过修改ELF二进制文件的RPATH)或者通过在脚本中封装它们,并设置适当的环境变量(例如CLASSPATHPYTHONPATHPERL5LIB等)。
  • 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几乎不支持模块化和重用。在示例软件包中,所有库依赖关系都被静态捆绑在一起,占用更多的磁盘空间和内存。此外,文档似乎没有提供任何除了框架之外的工具
    完整的博客文章可以在这里找到:http://sandervanderburg.blogspot.com/2015/04/an-evaluation-and-comparison-of-snappy.html 希望你觉得有趣并且可能会有一些值得思考的东西。

1称Nix DSL“简单”有点夸张,但除此之外,回答很棒。 - l0b0