NixOSは、Nixパッケージマネージャーをベースとした、自由かつオープンソースの
Linuxディストリビューションです。その最大の特徴は、システムの更新をアトミックに行い、宣言的な環境構築を可能にすることで、高い再現性と移植性を保証している点です。
歴史
Nixは2003年、エルコ・ドルストラ氏率いる研究プロジェクトとしてスタートしました。信頼性の高いデプロイ手段を模索する中で生まれたこのプロジェクトは、ドルストラ氏の博士論文「The Purely Functional Software Deployment Model」に結実。この論文で、宣言的かつ純粋関数的にソフトウェアを扱うという斬新なアプローチが提示されました。ユトレヒト大学のエルコ・フィッセル氏が監修したこの研究が、Nixの理論的な基盤を築きました。
2006年には、アルミン・ヘメル氏がNixの思想を
Linuxディストリビューションに統合する試みを行い、NixOSのプロトタイプ実装が同氏の修士論文の一部として初めて公開されました。そして2015年、純粋関数的なソフトウェアデプロイモデルを実装するプロジェクトを支援し、NixOSとそのエコシステムの開発を継続的に支援するために、NixOS Foundationが
オランダで設立されました。
Wikiの沿革
コミュニティによって最初のNixOS wikiが立ち上げられたのは2010年から2011年頃のことでした。ドキュメントの一元化と共同での知見共有を目指したこのwikiでしたが、次第にコミュニティの関心が薄れ、情報が古く不正確になっていきました。
2015年11月、ロク・ガルバス氏が自身のトーク番組でwikiの現状を指摘したことをきっかけに、コミュニティ内で大きな議論が巻き起こりました。多くがNixパッケージマネージャーのドキュメントサイトとの統合を主張しましたが、これは実現しませんでした。
2016年中旬には、モデレーション不足によりwikiがスパムボットに溢れかえり、同年8月に編集がロックダウンされました。ロックダウン解除を議論する
GitHub issueが2017年2月に開かれましたが、議論は平行線を辿り、最終的に2017年5月にwikiは恒久的に運用停止となりました。現在は、アーカイブとしてArchive.orgで閲覧可能です。
wikiの代替として、Jörg Thalheim氏が2017年4月にnixos-users
GitHub Wikiを立ち上げました。しかし、検索機能や目次といった基本的な機能が欠如していたため、ユーザーエクスペリエンスは低下しました。そこで、Tristan Helmich氏がMediaWikiベースのwikiを立ち上げ、Felix Richter氏がnixos-users
GitHub Wikiのコンテンツを移行しました。そして2024年1月、新しい公式wikiを設立する運動が開始され、現在利用されているwikiが発足しました。この「復活」は、正確かつ統一されたドキュメントを維持するというコミュニティの強い意志の表れと言えるでしょう。
バージョン履歴
NixOSは、年に2回、5月末と11月末に安定版のリリースを行っています。
機能
宣言的な構成
NixOSでは、
カーネルからアプリケーション、システムパッケージ、設定ファイルに至るまで、Nix言語で記述された構成に基づき、Nixパッケージマネージャーによって管理されます。新しい構成の適用は、古いバージョンを上書きすることなく行われます。
システムは、通常`/etc/nixos`に存在するグローバルな設定ファイルに、希望する機能を記述することで構成されます。例えば、SSHデーモンを実行する最小構成の設定は以下のようになります。
nix
{
services.openssh.enable = true;
}
設定ファイルを変更した後、`nixos-rebuild`コマンドを実行することで、システム構成を更新できます。このコマンドは、パッケージのダウンロードやインストール、設定ファイルの生成など、新しい構成を反映するために必要なすべての操作を自動的に実行します。
アトミックで信頼性の高いアップデート
Nix言語の純粋関数的な特性により、システムの状態に関わらず、同じ設定ファイルの評価は常に同じ結果をもたらします。NixOSはシステム構成の管理にトランザクション的なアプローチを採用しており、アップグレードなどの構成変更をアトミックに行います。たとえシステムの更新中に電源が遮断された場合でも、システムは更新前か完全に更新された状態のどちらかに一貫して保たれます。
ロールバック
システム更新の結果が期待通りでなかった場合、`nixos-rebuild switch --rollback`コマンドを使用することで、古いバージョンの構成にロールバックできます。すべてのシステム構成バージョンはブートメニューに表示され、新しい構成バージョンのシステムが起動しない場合など、古い構成バージョンに切り替えて起動できます。
システム構成の再現性
NixOSの宣言的な構成方法により、システム設定を容易に別のマシンで再現できます。設定ファイルを別のマシンにコピーし、更新コマンドを実行するだけで、
カーネル、アプリケーション、システムサービスなどを含む全く同じシステム構成を再現できます(ユーザーデータなどNixパッケージマネージャーによって管理されていない部分は除く)。
ソースコードビルドとバイナリキャッシュの併用
NixOSにおけるパッケージのインストールは、ソースからパッケージをビルドする手順の記述を評価することで行われます。この設計はユーザーによる柔軟なカスタマイズを可能にしますが、パッケージを再ビルドする度に時間がかかるという問題があります。そこで、リモートパッケージ
リポジトリにあらかじめパッケージのビルド結果をキャッシュしておき、インストール時に利用可能なビルド結果があれば、それをダウンロードして利用できるようにしています。ビルド設定を変更した場合や、`--option substitute false` をインストール時の引数として指定した場合、パッケージはソースからビルドされます。これらの仕組みにより、Nixはソースベースの柔軟性とバイナリベースの効率性を両立させています。
一貫性
Nixパッケージマネージャーは、実行中のシステムがシステムの論理と一致していることを保証します。つまり、パッケージの操作が行われた場合、関連するすべてのパッケージも再構築されます。例えば、
カーネルを変更すると、関連する
カーネルモジュールがすべて再構築されます。同様に、ライブラリがアップグレードされると、そのライブラリに依存するすべてのパッケージが、新しいバージョンのライブラリを使うように再構築されます。
ユーザー間におけるパッケージ管理
NixOSでは、個々のユーザーがパッケージをインストールするのに特権を必要としません。システム共通のプロファイル以外に、ユーザーごとに独自のプロファイルが割り当てられるため、たとえ複数のユーザーが異なるバージョンの同じパッケージをインストールしていても、パッケージのバージョンはそれぞれ異なる状態で同時に存在できます。複数のユーザーが同じバージョンの同パッケージをインストールしようとすると、パッケージのダウンロードおよびビルドは一回だけ行われます。
Nixは、システムの構成によって明示的に信頼されたユーザーだけがビルドパラメータを制御できるため、この操作が安全であることを保証しています。これにより、信頼されていないSubstituterの利用やサンドボックス環境への不純物の混入を防ぎます。
実装
NixOSは、パッケージ管理にNix
パッケージ管理システムを利用しています。すべてのパッケージは、独立した状態でNixストアに保存されます。インストールされたパッケージには、ビルド過程で入力されたすべての情報に基づいた一意なハッシュ値が与えられます。ビルド手順を変更すると異なるハッシュ値が生成され、別のパッケージとしてNixストアにインストールされます。この仕組みは設定ファイルの管理にも使用され、設定の更新が過去の設定履歴を上書きしないための措置として導入されています。
この特異なパッケージ管理方式により、NixOSのディレクトリ構成は
Filesystem Hierarchy Standard(FHS)には準拠していません。唯一の例外は、`/bin/sh`がNixストアにインストールされたbashへのシンボリックリンクとなっていることです。システム全体の設定ファイルを保持する`/etc`ディレクトリも存在しますが、その内容のほとんどは`/nix/store`に存在するビルド生成物へのシンボリックリンクです。複数のバージョンのパッケージを共存させるため、`/bin`のようなグローバルディレクトリは使用されません。
反響
NixOSは、そのユニークなアプローチと優れた機能により、多くのユーザーから高い評価を得ています。
DistroWatch Weeklyのジェシー・スミス氏は、NixOS 15.09のレビューで「NixOSは、他のどのディストリビューションとも異なる、非常に興味深い存在だ」と述べています。
Full Circle誌のNixOS 21.11 "Porcupine"のレビューでは、「NixOSは、構成管理とソフトウェアの導入における新たな可能性を示している」と結論付けています。
The Registerのリーアム・プルーヴン氏によるNixOS 22.11「Raccoon」のレビューでは、「NixOSは、従来の
Linuxディストリビューションの概念を覆す、革新的なシステムだ」と評しています。
DistroWatchのジェシー・スミス氏は、NixOS 23.11 「Tapir」のレビューで、「NixOSは、複雑なシステム管理をシンプルにするための素晴らしいツールだ」と述べています。
関連項目
GNU Guix System:
GNU Guixをベースに構築された
オペレーティングシステム。Nixにインスパイアされています。
外部リンク
公式ウェブサイト
*
公式wiki