どちらのアプローチもパッケージを分離して保存します。Snappyは、次の名前規則を使用してフォルダーにアプリとフレームワークを保存します/app/name/version.vendor
。Nixはを使用し/nix/store/hash-name-version
ます。
Nixの命名規則は、ビルド時のすべての依存関係から派生したハッシュプレフィックスを使用するため、より強力です。Nixを使用すると、パッケージのバリエーションを簡単に区別し、それらを隣り合わせに保存できます。変更(ビルド手順の違い、ライブラリのアップグレード、コンパイラのアップグレードなど)があると、新しいハッシュが生成され、可能なバリアントを互いに隣接して格納できるようになります。
パッケージには、その依存関係を見つけることができるようにするには、ニックスは、それらを結合し、静的に(例えば変更することで実行可能にRPATH
ELFバイナリのを)、または適切な環境変数を設定するスクリプト(例えば、それらをラップすることによってCLASSPATH
、PYTHONPATH
、PERL5LIB
、など)。
スナッピーは、構成コンテナのような実行可能ファイルは、それらの共通FHSの場所にそれらの依存関係を見つけることができている、/lib
との/bin
ただし、NixはSnappyのコンテナーアプローチもサポートしていますが、これは非常にまれな場合にのみ使用されます。SteamはNixOSのSteamであり、コンテナ化されたアプローチを使用する最も顕著なNixパッケージは、矛盾するプロパティを持つ展開ツールそのものです。
Snappy Ubuntu Coreは、いわゆる「A / B」パーティションスキームを使用して、ベースシステムをアップグレード(およびロールバック)します。一度にサポートされるバージョンの数は限られています(通常は2つ)。
対照的に、NixOS(NixベースのLinuxディストリビューション)は、Nixストア内のNixパッケージからも基本システムを構成し、はるかに強力です。まだガベージコレクションされていない以前の構成にロールバックできます。さらに、世代間で同様のシステムパッケージを共有できます。
両方のツールは、非特権ユーザーのインストールをサポートします。ただし、Snappyはすべてのファイルをユーザーのホームディレクトリに保存します。2人のユーザーがたまたま同じパッケージをインストールした場合、システムに2回インストールされます。
対照的に、Nixパッケージでは、通常のユーザーがパッケージを中央のNixストアにインストールして、同一のパッケージをユーザー間で共有することもできます。命名規則(ハッシュを使用)のため、これは安全な方法で実行できます。
Snappy は、パッケージの実行時の動作をそのままで制限しますが、Nixは制限しません
Snappyは、ユーザーがソースコードからパッケージを構築するのに役立ちません。ただし、NixにはDSLがあり、必要なときにすべてのビルド時の依存関係(コンパイラ、ビルドツール、ライブラリなど)を非常に簡単に自動的にインストールできます。
Snappyはモジュール化と再利用をほとんどサポートしていません。サンプルパッケージでは、すべてのライブラリ依存関係が静的にバンドルされ、より多くのディスクスペースとRAMを消費します。さらに、ドキュメントはフレームワーク以外の機能を提供していないようです。ただし、フレームワークはドキュメントに従って再利用するためのものではありません
Nixでは、パッケージのモジュール化と依存関係の安全な管理が主要な機能です。