Nix (パッケージ管理システム)

Nixは、Unix系システム用のクロスプラットフォームのパッケージ管理システムである。Nixを使用することで、システムをインスタンス化して管理することができる。2003年にイールコ・ドルストラによって発明された。

 手法 
Nixは、ソフトウェアパッケージがそれぞれ不変の内容を持つ固有のディレクトリにインストールされるモデルを採用している。これらのディレクトリ名は、Nixによって管理される他の依存パッケージを含むすべての依存関係を考慮した暗号学的ハッシュに対応している。その結果、同じ名前のパッケージは同じ入力と同じビルドプラットフォームを持ち、したがって同じビルド結果になるため、パッケージ名からその内容を一意に識別することができる。

 実装 
Nixのパッケージレシピは、専用のプログラミング言語であるNix言語で記述されている。この言語は、宣言型、、遅延評価、動的型付けを特徴としている。また、コンテキスト（context）付きの文字列、文字列補間、ファーストクラスのファイルシステムパス、インデントされた文字列をサポートしている。これらを組み合わせることで、新しいファイルの内容を指定するときにファイルシステムデータ間の依存関係を簡潔に表現できる。

Nix言語で宣言されたファイル間の依存関係は自動的に追跡され、「Nixストア（Nix store）」に保持される。Nixストアの新しいファイルは、「derivation」によって作成される。derivationは、実行ファイル、その呼び出しの引数と環境変数（execveを参照）、Nixストアから読み取るその他のファイルを指定する永続的なデータ構造である。次に、実行ファイルは、明示的に指定された入力ファイル以外へのアクセスを禁止し、指定された出力パスへの書き込みのみを許可するサンドボックスで実行される。Nixは、パッケージディレクトリ名に使用される固有のハッシュをスキャンすることで、出力ファイルに依存関係情報を保存する。

自動で参照を追跡するため、パッケージがマシン間で転送される場合でもパッケージの整合性が確保される。また、他のパッケージが依存していない場合は、未使用のパッケージとしてガベージコレクションも可能になる。代償としてストレージ要件は大きくなるが、Nixのすべてのアップグレードはアトミックであり、効率的なロールバックが可能であることが保証されている。一意なディレクトリ名により、異なるバージョンの共有ライブラリを含む多くのパッケージをインストールでき、いわゆる依存関係地獄を排除できるとされている。これにより、複数のユーザーが管理者権限のない状態でで同じシステムにソフトウェアを安全にインストールすることもできる。そのため、Nixのパッケージ管理およびデプロイモデルは、より信頼性や再現性、移植性が高いと宣伝されている。

NixはLinux、macOS、WSLを完全にサポートしており、他のパッケージマネージャーと並行して安全にインストールできる。  

 Nixpkgs 
Nixpkgsは、Nixパッケージ管理システム上に構築されたパッケージリポジトリである。Repologyによると、Nixpkgsには2025年1月の時点で122,000個以上のパッケージが含まれており、他のパッケージリポジトリよりも多くの最新のパッケージが含まれている。Nixpkgsでサポートされているオペレーティングシステムは主にLinuxとDarwinだが、WindowsとBSD系OSも一部サポートされている。Nixpkgsが対応しているアーキテクチャには、x86_64、ARMが含まれる。これらのアーキテクチャ向けのパッケージは、Hydraと呼ばれる継続的インテグレーションサービスを使用して定期的にビルドされ、これらのビルドの結果は公開バイナリキャッシュにアップロードされる。Nixがパッケージをインストールする場合、このキャッシュがチェックされ、バイナリパッケージがローカルでビルドする手間を省くことができる。

NixpkgsはGitHub上の単一のGitリポジトリで開発されている。このリポジトリにはパッケージの他に、NixOSのソースコードも含まれている。

 Nixを使用するプロジェクト 
NixOSは、Linuxカーネルを含むシステムのソフトウェアの管理にNixを使用するLinuxディストリビューションである。

Nixは、欧州原子核研究機構（CERN）のでソフトウェアのパッケージングと配布に使用されている。

Nixは、分散ソフトウェア開発プラットフォームReplitとGoogle IDXの基盤となっている。 

 フォークと代替実装 
2021年には、モジュール性、Nixpkgsとの完全な互換性、および評価機能の向上を目標としたTvixという名前での再実装が発表された。2024年現在、Tvixには評価機能とストア実装があるが、作者はプロジェクトがまだ安定しておらず、本番環境で使用できる状態ではないと考えている。Tvixは主にRustで書かれている。

2024年に、ボランティアのチームはLixの最初のバージョンをリリースした。これは、Mesonビルド自動化システムを使用する正確性と互換性に重点を置いたNixのフォークである。このプロジェクトでは、コードの一部を徐々にRustで書き直す予定である。  

 脚注 

 関連項目 

 GNU Guix - 設定とカスタマイズにGNU Guileを使用する別の宣言的なパッケージ管理システム
  - 複雑なソフトウェアシステムを構築するために設計されているmakeのようなビルド自動化ユーティリティ
 ランブック・オートメーション

 外部リンク 



Category:2012年のソフトウェア
Category:フリープログラミングツール
Category:フリーパッケージ管理システム
Category:関数型プログラミング
Category:UNIXのソフトウェア
Category:構成管理
Category:GNU Lesser General Public Licenseを利用するソフトウェア
Category:C++でプログラムされた自由ソフトウェア