Nixは、 UnixおよびUnixライクなシステム向けのクロスプラットフォームパッケージマネージャであり、それらのシステムを構成するための関数型プログラミング言語で、2003年にEelco Dolstraによって発明されました[ 7 ] 。
Nix パッケージマネージャは、ソフトウェア パッケージがそれぞれ変更不可能な内容を持つ固有のディレクトリにインストールされるモデルを採用しています。これらのディレクトリ名は、 Nix によって管理される他のパッケージを含む、パッケージのすべての依存関係を考慮した暗号化ハッシュに対応しています。その結果、Nix パッケージ名は内容を識別するものとなり、同じ名前のパッケージは同じ入力とビルド プラットフォームを持ち、したがって同じビルド結果になります。[ 8 ]
Nix のパッケージレシピは、宣言型で純粋関数型、遅延評価、動的型付けのプログラミング言語である、専用に構築された「Nix 言語」で記述されます。 [ 9 ] Nix 言語の特徴は、「コンテキスト」を持つ文字列、文字列補間、第一級のファイルシステムパス、および「インデントされた文字列」であり、これらを組み合わせることで、新しいファイルの内容を指定する際にファイルシステムデータ間の依存関係を簡潔に表現できます。
Nix 言語で宣言されたファイル間の依存関係は自動的に追跡され、「Nix ストア」に永続化されます。[ 10 ] Nix ストア内の新しいファイルは「派生」によって作成されます。派生は、実行可能ファイル、その呼び出しのための引数と環境変数 ( を参照execve)、および Nix ストアから読み取られる他のファイルを指定する永続的なデータ構造です。実行可能ファイルは、明示的に指定された入力ファイル以外へのアクセスを禁止し、指定された出力パスへの書き込みのみを許可するサンドボックスで実行されます。Nix は、パッケージ ディレクトリ名に使用される固有のハッシュをスキャンすることによって、出力ファイル内の依存関係情報を保持します。[ 8 ]
自動参照追跡により、パッケージがマシン間で転送された場合でもパッケージの整合性が確保されます。また、他のパッケージが依存していない未使用パッケージのガベージコレクションも可能になります。ストレージ要件の増加という代償を伴いますが、Nix のすべてのアップグレードはアトミックであり、効率的なロールバックが可能であることが保証されています。一意のディレクトリ名により、共有ライブラリの異なるバージョンを持つ多数のパッケージをインストールでき、いわゆる依存関係地獄を解消するとされています。[ 11 ]これにより、複数のユーザーが管理者権限なしで同じシステムにソフトウェアを安全にインストールすることもできます。結果として、Nix のパッケージ管理およびデプロイメント モデルは、より信頼性が高く、再現性があり、移植性の高いパッケージを宣伝しています。[ 8 ] [ 12 ]
NixはLinux、macOS、WSLを完全にサポートしており、他のパッケージマネージャーと安全に並行してインストールできます。
nixpkgsは、 Nixパッケージマネージャーをベースに構築されたパッケージリポジトリです。Repologyによると、2025年1月現在 Nixpkgsには122,000を超えるパッケージが含まれており[ 13 ]、他のどのパッケージリポジトリよりも最新のパッケージ数が多い[ 14 ] 。Nixpkgsがサポートするオペレーティングシステムは主にLinuxとDarwinで、WindowsとBSDの派生版も一部サポートしている。サポートされているCPUアーキテクチャには、 64ビットx86とARMがある。これらのアーキテクチャ用のパッケージは、 Hydraと呼ばれる継続的インテグレーションサービス[ 15 ]を使用して定期的にビルドされ、これらのビルドの結果は公開バイナリキャッシュにアップロードされる[ 16 ] 。Nixがパッケージをインストールすると、このキャッシュをチェックし、バイナリパッケージをダウンロードしてローカルでのビルドを回避する。
nixpkgsはGitHub上の単一のGitリポジトリで開発されています。 [ 17 ]パッケージに加えて、 NixOSのソースコードも含まれています。
NixOS [ 18 ]は、Nix を使用してLinux カーネルを含むシステム全体を、わずか 1 つのファイルから宣言的に構成および管理するLinux ディストリビューションです。 [ 19 ]その結果、再現性を重視して設計されています。ユーザーは、あるマシンの構成ファイルから、元のマシンの任意の側面を他のマシンに再構築して、まったく同じ設定、パラメータ、ソフトウェア、プラグイン、カスタマイズなどを備えた新しいシステムを作成できます。同様に、NixOS はユーザーが望むだけ構成の再構築をリポジトリに保存し、ユーザーがシステムを以前の世代(つまり、システムが安定していたとき) にアトミックにロールバックできるようにします。その場合、すべてのパッケージは、その世代の構成が宣言されたときにインストールおよび/または指定されていたそれぞれのバージョンに復元されます。
NixはCERNのLHCb実験におけるソフトウェアのパッケージングと配布に使用されています。[ 20 ] Nixは分散ソフトウェア開発プラットフォームReplit [ 21 ]とFirebase Studio [ 22 ]の基盤となっています。
2021年に、Tvixという名前のベータ版の再実装が発表されました[ 23 ]。その目標は、モジュール性、Nixpkgsとの完全な互換性、および評価器のパフォーマンスの向上です。2024年現在、Tvixには評価器[ 24 ]とストア実装[ 25 ]がありますが、開発者らはこのプロジェクトがまだ安定している、または本番環境で使用できる状態にあるとは考えていません[ 26 ] 。Tvixは主にRustで書かれています[ 27 ]。
2025年3月、TvixのフォークであるSnixが作成された。[ 28 ]
2024年、ボランティアチームがLixの最初のバージョンをリリースしました[ 29 ]。これは、Nixの互換性を向上させ、Nixの設計上の欠陥と思われる点を修正することに焦点を当てた、コミュニティが作成したNixのフォークです。LixはMesonビルド自動化システムを使用しており、コードの一部をRustで徐々に書き直しています[ 29 ] 。Lixはまた、民間企業Determinate Softwareが2022年に企業向けに作成したNixの独自フォークであるDeterminate Nixに代わる、透明でコミュニティ管理された代替手段を提供するために作られました[ 30 ]。たとえば、LixインストーラーはDeterminate Nixからフォークされています[ 31 ] 。LixはAssociation Française Nix(フランスNix協会/AFNix)によって運営されています[ 32 ] 。