トップQs
タイムライン
チャット
視点

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

パッケージ管理システム ウィキペディアから

Remove ads

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

概要 作者, 初版 ...
Remove ads

手法

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

実装

要約
視点

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

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

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

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

Nixpkgs

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

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

Remove ads

Nixを使用するプロジェクト

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

Nixは、欧州原子核研究機構(CERN)のLHCb検出器英語版でソフトウェアのパッケージングと配布に使用されている[17]

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

フォークと代替実装

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

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

脚注

関連項目

外部リンク

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads