Nix (パッケージ管理システム)
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2025/04/15 09:50 UTC 版)
作者 | イールコ・ドルストラ |
---|---|
初版 | 2003年6月15日 |
最新版 | |
リポジトリ | |
プログラミング 言語 |
C++,[2] Perl,[2] シェルスクリプト,[2] Autoconf,[2] Rust,[2] C,[2] 拡張可能なマーク付け言語,[2] make[2] ![]() |
プラットフォーム |
Linux, Darwin, FreeBSD,[3] OpenBSD[4] ![]() |
種別 |
純粋関数型パッケージマネージャ, FOSS, プログラミング言語の実装, リファレンス実装, インタプリタ ![]() |
ライセンス |
LGPL 2.1[5] ![]() |
公式サイト |
nixos |
Nixは、Unix系システム用のクロスプラットフォームのパッケージ管理システムである。Nixを使用することで、システムをインスタンス化して管理することができる。2003年にイールコ・ドルストラによって発明された[6]。
手法
Nixは、ソフトウェアパッケージがそれぞれ不変の内容を持つ固有のディレクトリにインストールされるモデルを採用している。これらのディレクトリ名は、Nixによって管理される他の依存パッケージを含むすべての依存関係を考慮した暗号学的ハッシュに対応している。その結果、同じ名前のパッケージは同じ入力と同じビルドプラットフォームを持ち、したがって同じビルド結果になるため、パッケージ名からその内容を一意に識別することができる[7]。
実装
Nixのパッケージレシピは、専用のプログラミング言語であるNix言語で記述されている。この言語は、宣言型、純粋関数型、遅延評価、動的型付けを特徴としている[8]。また、コンテキスト(context)付きの文字列、文字列補間、ファーストクラスのファイルシステムパス、インデントされた文字列をサポートしている。これらを組み合わせることで、新しいファイルの内容を指定するときにファイルシステムデータ間の依存関係を簡潔に表現できる。
Nix言語で宣言されたファイル間の依存関係は自動的に追跡され、「Nixストア(Nix store)」に保持される[9]。Nixストアの新しいファイルは、「derivation」によって作成される。derivationは、実行ファイル、その呼び出しの引数と環境変数(execve
を参照)、Nixストアから読み取るその他のファイルを指定する永続的なデータ構造である。次に、実行ファイルは、明示的に指定された入力ファイル以外へのアクセスを禁止し、指定された出力パスへの書き込みのみを許可するサンドボックスで実行される。Nixは、パッケージディレクトリ名に使用される固有のハッシュをスキャンすることで、出力ファイルに依存関係情報を保存する[7]。
自動で参照を追跡するため、パッケージがマシン間で転送される場合でもパッケージの整合性が確保される。また、他のパッケージが依存していない場合は、未使用のパッケージとしてガベージコレクションも可能になる。代償としてストレージ要件は大きくなるが、Nixのすべてのアップグレードはアトミックであり、効率的なロールバックが可能であることが保証されている。一意なディレクトリ名により、異なるバージョンの共有ライブラリを含む多くのパッケージをインストールでき、いわゆる依存関係地獄を排除できるとされている[10]。これにより、複数のユーザーが管理者権限のない状態でで同じシステムにソフトウェアを安全にインストールすることもできる。そのため、Nixのパッケージ管理およびデプロイモデルは、より信頼性や再現性、移植性が高いと宣伝されている[7][11]。
NixはLinux、macOS、WSLを完全にサポートしており、他のパッケージマネージャーと並行して安全にインストールできる。
Nixpkgs
Nixpkgsは、Nixパッケージ管理システム上に構築されたパッケージリポジトリである。Repologyによると、Nixpkgsには2025年1月の時点で122,000個以上のパッケージが含まれており[12]、他のパッケージリポジトリよりも多くの最新のパッケージが含まれている[13]。Nixpkgsでサポートされているオペレーティングシステムは主にLinuxとDarwinだが、WindowsとBSD系OSも一部サポートされている。Nixpkgsが対応しているアーキテクチャには、x86_64、ARMが含まれる。これらのアーキテクチャ向けのパッケージは、Hydraと呼ばれる継続的インテグレーションサービスを使用して定期的にビルドされ[14]、これらのビルドの結果は公開バイナリキャッシュにアップロードされる[15]。Nixがパッケージをインストールする場合、このキャッシュがチェックされ、バイナリパッケージがローカルでビルドする手間を省くことができる。
NixpkgsはGitHub上の単一のGitリポジトリで開発されている[16]。このリポジトリにはパッケージの他に、NixOSのソースコードも含まれている。
Nixを使用するプロジェクト
NixOS[17]は、Linuxカーネルを含むシステムのソフトウェアの管理にNixを使用するLinuxディストリビューションである[18]。
Nixは、欧州原子核研究機構(CERN)のLHCb検出器でソフトウェアのパッケージングと配布に使用されている[19]。
Nixは、分散ソフトウェア開発プラットフォームReplit[20]とGoogle IDX[21]の基盤となっている。
フォークと代替実装
2021年には、モジュール性、Nixpkgsとの完全な互換性、および評価機能の向上を目標としたTvixという名前での再実装が発表された[22]。2024年現在、Tvixには評価機能[23]とストア実装[24]があるが、作者はプロジェクトがまだ安定しておらず、本番環境で使用できる状態ではないと考えている[25][要非一次資料]。Tvixは主にRustで書かれている[26]。
2024年に、ボランティアのチームはLixの最初のバージョンをリリースした[27][要非一次資料]。これは、Mesonビルド自動化システムを使用する正確性と互換性に重点を置いたNixのフォークである。このプロジェクトでは、コードの一部を徐々にRustで書き直す予定である[27]。
脚注
- ^ "Release 2.26.3"; 閲覧日: 2025年3月14日; 出版日: 2025年3月6日.
- ^ a b c d e f g h "The Nix Open Source Project on Open Hub: Languages Page"; Ohloh; 閲覧日: 2024年5月18日.
- ^ "NixBSD"; 閲覧日: 2025年3月15日.
- ^ "OpenBSD Ports Readme: port sysutils/nix"; 閲覧日: 2025年3月15日.
- ^ "nix/COPYING at master"; 閲覧日: 2024年5月18日; 出版日: 2006年4月26日.
- ^ Dolstra, Eelco (2003). “Integrating Software Construction and Software Deployment”. Software Configuration Management. Lecture Notes in Computer Science. 2649. pp. 102–117. doi:10.1007/3-540-39195-9_8. ISBN 978-3-540-14036-8. オリジナルの2019-04-21時点におけるアーカイブ。
- ^ a b c Dolstra, Eelco; de Jonge, Merijn; Visser, Eelco (November 2004). "Nix: A Safe and Policy-Free System for Software Deployment" (PDF). LISA '04: Proceedings of the 18th USENIX Conference on System Administration. pp. 79–92. 2023年7月11日閲覧。
- ^ “Nix Reference Manual: Nix Language”. 2024年3月4日閲覧。
- ^ “Nix Reference Manual: Nix Store” (2024年3月4日). 2025年3月15日閲覧。
- ^ “Nix fixes dependency hell on all Linux distributions”. Linux.com (2008年12月22日). 2023年7月11日閲覧。
- ^ Dolstra, Eelco (2006). The Purely Functional Software Deployment Model (PDF) (Ph.D.). Utrecht University. 2023年7月11日閲覧。
- ^ “Nixpkgs unstable repository information - Repology”. 2025年1月15日時点のオリジナルよりアーカイブ。2025年3月15日閲覧。
- ^ “Repository statistics - Repology”. 2023年12月1日閲覧。
- ^ “RFC 0046 - Platform Support Tiers”. 2023年12月1日閲覧。
- ^ “NixOS official binary cache”. 2023年12月1日閲覧。
- ^ “Nixpkgs github repository”. 2023年12月1日閲覧。
- ^ “Nix & NixOS | Reproducible builds and deployments”. nixos.org. 2023年12月1日閲覧。
- ^ Dolstra, Eelco; Löh, Andres; Pierron, Nicolas (September 2008). NixOS: A Purely Functional Linux Distribution (PDF). ICFP 2008: 13th ACM SIGPLAN International Conference on Functional Programming. pp. 367–378.
- ^ Burr, Chris (2018年). “Software packaging and distribution for LHCb using Nix”. 2023年12月1日閲覧。
- ^ Replit (2023年5月25日). “Replit — Super Colliding Nix Stores: Nix Flakes for Millions of Developers”. Replit Blog. 2024年3月5日閲覧。
- ^ “Customize your IDX workspace | Project IDX” (英語). Google for Developers. 2024年3月5日閲覧。
- ^ “TVL's blog: Tvix: We are rewriting Nix”. tvl.fyi. 2024年5月19日閲覧。
- ^ “TVL's blog: Tvix Status - September '22”. tvl.fyi. 2024年5月19日閲覧。
- ^ “TVL's blog: Tvix Status - February '24”. tvl.fyi. 2024年5月19日閲覧。
- ^ tvlfyi/tvix, The Virus Lounge, (2024-05-18) 2024年5月19日閲覧。
- ^ “tvix - depot - Sourcegraph”. cs.tvl.fyi. 2024年5月19日閲覧。
- ^ a b “Lix | About Lix”. lix.systems. 2024年5月19日閲覧。
関連項目
- GNU Guix - 設定とカスタマイズにGNU Guileを使用する別の宣言的なパッケージ管理システム
- Maak - 複雑なソフトウェアシステムを構築するために設計されているmakeのようなビルド自動化ユーティリティ
- ランブック・オートメーション
外部リンク
- Nix_(パッケージ管理システム)のページへのリンク