无论是在接近商店包隔离。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模块化软件包并安全地管理依赖项是它的一些关键功能。