web-dev-qa-db-ja.com

SnappyはNixおよびGuixとどのように関連していますか?

比較のために検索しましたが、非一致を見つけたので、すぐに自分で比較するのに十分な情報がありません。

それらはすべてトランザクションの更新を提供しますが、封じ込めのレベルは異なります。

  • Snappyはライブラリで静的にコンパイルして、バイナリ依存関係の複数のバージョンを提供します。提供された(そして必要な?)サービスをメタデータとして宣言します。パッケージは単一のイメージとして提供されますか?
  • ニックスは、バイナリの依存関係の複数のバージョンを提供するために動的リンクを扱いますか?提供および必要なサービスをメタデータとして宣言します。パッケージは、依存関係を扱うリポジトリを通じて提供されます。
  • GuixはNixに似ていますが、GNU統合を備えています。

NixとGuixのより詳細な比較は Sander van der Burg で与えられますが、これについては詳しく調べませんでした。 Canonicalの誰かが既存のソリューションの分析を行ったと思います。 CoreOSなど、イメージに基づいた他の展開システムがあります。

では、Snappy UbuntuはNixとGuixとどのように関係していますか?大きな違いは何ですか?

21
payload

最近、私は自分で評価を行いました。私は実際にNix/NixOSの寄稿者であり、展開技術に興味のある元研究者です。

私は可能な限り事実に専念しようとしましたが、完全に偏見を持たないことはおそらく不可能です。私の調査結果を要約するには:

  • どちらのアプローチも、パッケージをisolationに保存します。 Snappyは、次の名前規則を使用してフォルダーにアプリとフレームワークを保存します:/app/name/version.vendor、Nixは/nix/store/hash-name-versionを使用します。

    Nixの命名規則は、すべてのビルド時依存関係から派生したハッシュプレフィックスを使用するため、より強力です。 Nixを使用すると、パッケージのバリエーションを簡単に区別し、それらを隣り合わせに保存できます。変更(ビルド手順の違い、ライブラリのアップグレード、コンパイラのアップグレードなど)により、新しいハッシュが生成され、可能なバリアントを互いに隣接して格納できるようになります。

  • パッケージが依存関係を見つけることができるように、Nixはそれらをstatically実行可能ファイルにバインドします(たとえば、ELFバイナリのRPATHを変更するか、適切な環境変数を設定するスクリプトでラップします) (例:CLASSPATHPYTHONPATHPerl5LIBなど)。

    Snappyはcontainersを作成します。このファイルでは、/lib/binなどの共通のFHSロケーションで実行可能ファイルが依存関係を見つけることができます

    ただし、NixはSnappyのコンテナアプローチもサポートしていますが、これは非常にまれな場合にのみ使用されます。 SteamはNixOSのSteamであり、コンテナ化されたアプローチを使用する最も顕著なNixパッケージは、矛盾するプロパティを持つ展開ツールそのものです。

  • Snappy Ubuntu Coreは、いわゆる「A/B」パーティションスキームを使用して、ベースシステムをアップグレード(およびロールバック)します。一度にサポートされるバージョンの数は限られています(通常は2つ)。

    対照的に、NixOS(NixベースのLinuxディストリビューション)composes Nixストア内のNixパッケージからの基本システムであり、はるかに強力です。まだガベージコレクションされていない以前の構成にロールバックできます。さらに、世代間で同様のシステムパッケージを共有できます。

  • 両方のツールが非特権ユーザーインストールをサポートします。ただし、Snappyはすべてのファイルをユーザーのホームディレクトリに保存します。 2人のユーザーがたまたま同じパッケージをインストールした場合、システムに2回インストールされます。

    対照的に、Nixパッケージでは、通常のユーザーが中央のNixストアにパッケージをインストールできるため、ユーザー間で同一のパッケージをsharedにすることができます。一部には、命名規則(ハッシュを使用)により、安全な方法でこれを行うことができます。

  • Snappy restrictsパッケージの実行時の動作はそのままで、Nixは

  • Snappyは、ユーザーがソースコードからパッケージをconstructするのを助けていないようです。ただし、NixにはDSLがあり、必要なときにすべてのビルド時の依存関係(コンパイラ、ビルドツール、ライブラリなど)を簡単にインストールできます。

  • Snappyはモジュール化とreuseをほとんどサポートしていません。サンプルパッケージでは、すべてのライブラリ依存関係が静的にバンドルされ、より多くのディスクスペースとRAMを消費します。さらに、ドキュメントはフレームワーク以外の機能を提供していないようです。ただし、フレームワークはドキュメントに従って再利用するためのものではありません

    Nixでは、パッケージのモジュール化と依存関係の安全な管理が主要な機能です。

完全なブログ投稿はこちらにあります: http://sandervanderburg.blogspot.com/2015/04/an-evaluation-and-comparison-of-snappy.html

読むことが面白いと思うし、考えてみる価値のあることがいくつかあるかもしれません。

28