NixOS
開発者 |
NixOS contributors NixOS Foundation[1][2] |
---|---|
プログラミング言語 | Nix言語[note 1] |
OSの系統 | Linux (Unix-like) |
開発状況 | 継続中 |
ソースモデル | オープンソース |
初版 | 0.1 / 2003年3日 |
最新安定版 | 24.11 / 30 11月 2024 |
リポジトリ | |
対象市場 | 汎用 |
パッケージ管理 | Nix |
プラットフォーム | i686, x86-64, AArch64 |
カーネル種別 | モノリシック Linuxカーネル |
ライセンス | MIT[3][note 2] |
ウェブサイト |
nixos |
NixOSは、Nixパッケージマネージャーをベースとしたフリー(自由)かつオープンソースのLinuxディストリビューションである。NixOS はシステムの更新をアトミックに行い[4] 、宣言的に環境構築を行えるシステムにより高い再現性と移植性を担保している。[5]
NixOSはNixパッケージマネージャーを通じてNixPkgsを主とした複数のパッケージリポジトリを利用できる。パッケージ構成および設定は特別に設計された遅延評価を行う関数型プログラミング言語であるNix言語を通じて定義される。
歴史
[編集]Nixは2003年、Eelco Dolstra氏率いる研究プロジェクトとして立ち上げられた。信頼性の高いデプロイ手段の探求を目的としたこの研究の成果は、Dolstra氏の博士論文 The Purely Functional Software Deployment Model にまとめられ、宣言的かつ純粋関数的に扱う、全く新しいソフトウェア構成へのアプローチを提示した。ユトレヒト大学のEelco Visser氏により監修されたDolstra氏の研究は、Nixの理論的基礎を築いた[6]。
2006年、Armijn Hemel氏はNixの思想をLinuxディストリビューションに統合する試みを行い、NixOSのプロトタイプ実装が同氏の修士論文の一部として初めて公開された。[7]
2015年、純粋関数的なソフトウェアデプロイモデルを実装するプロジェクトの支援、ならびにNixOSとそのエコシステムの開発への継続的な支援を提供する目的で、NixOS Foundation がオランダにて設立された。[8]
Wikiの沿革
[編集]コミュニティによる最初の NixOS wiki は2010年から2011年頃に立ち上げられた。ドキュメントの一元化および共同での知見の共有を目標としていたが、wikiの維持に対するコミュニティの関心が薄れていくにつれ、古く不正確な情報が多くを占めるようになった。
2015年11月、Rok Garbas氏は彼のトーク番組である Make Nix Friendlier for Beginners にてwikiの頽廃した現状を指摘し、コミュニティに大きな議論の波を引き起こした。この時多くの開発者がNixパッケージマネージャーのドキュメントサイトとの統合を主張したが、この対応が取られることはなかった。[9]
2016年中旬、モデレーション不足によってwikiはスパムボットで溢れかえった状態となり、同年8月に編集のロックダウンが行われた。ロックダウン解除を議論するためにGitHub issueが2017年2月に開かれたが、論争は解決に至らないまま終了した。最終的に、2017年5月にてwikiは恆久的に運用停止することとなり、Archive.orgに内容がアーカイブとして公開された。[10]
Wikiの不在を埋めるため、Jörg Thalheim (Mic92) 氏が2017年4月にnixos-users GitHub Wikiを立ち上げた。GitHub wiki プラットフォームの編集・加筆を迅速に行える特性によりコミュニティの参入は容易になったが、検索機能や目次といった基本的な機能に欠けていたことがユーザー体験の低下につながり、代替としてMediaWikiベースのwikiがTristan Helmich (fadenb) 氏によって立ち上げられた。nixos-users GitHub WikiのコンテンツはFelix Richter (makefu)氏によりMediaWiki側へと移行された。[11]
2024年1月、新しく公式wikiを樹立するための運動が開始され、現在使われているWikiが発足した。この「復活」は、NixOSユーザーのために正確かつ統一されたされたドキュメントを維持するというコミュニティの意志の表れであった。[12]
バージョン歴史
[編集]Name | Date |
---|---|
NixOS 13.10 "Aardvark" | 2013年10月 |
NixOS 14.04 "Baboon" | 2014年4月 |
NixOS 14.12 "Caterpillar" | 2014年12月 |
NixOS 15.09 "Dingo" | 2015年9月 |
NixOS 16.03 "Emu" | 2016年3月 |
NixOS 16.09 "Flounder" | 2016年9月 |
NixOS 17.03 "Gorilla" | 2017年3月 |
NixOS 17.09 "Hummingbird" | 2017年9月 |
NixOS 18.03 "Impala" | 2018年3月 |
NixOS 18.09 "Jellyfish" | 2018年9月 |
NixOS 19.03 "Koi" | 2019年3月 |
NixOS 19.09 "Loris" | 2019年9月 |
NixOS 20.03 "Markhor" | 2020年3月 |
NixOS 20.09 "Nightingale" | 2020年9月 |
NixOS 21.05 "Okapi" | 2021年5月 |
NixOS 21.11 "Porcupine" | 2021年11月 |
NixOS 22.05 "Quokka" | 2022年5月 |
NixOS 22.11 "Raccoon" | 2022年11月 |
NixOS 23.05 "Stoat" | 2023年5月 |
NixOS 23.11 "Tapir" | 2023年11月 |
NixOS 24.05 "Uakari" | 2024年5月 |
NixOS 24.11 "Vicuna" | 2024年11月 |
NixOS 25.05 "Warbler" | 2025年5月 |
NixOS は一年に二回、それぞれ5月末と11月末に安定版のリリースを行っている。[13][14][15]
機能
[編集]宣言的な構成
[編集]NixOSでは、カーネルからアプリケーション、システムパッケージ、設定ファイルに至るまで、Nix言語で書かれた記述に基づいてNixパッケージマネージャーによって管理される。新しい構成の反映は古いバージョンの上書きを伴わない。[16]
NixOSのシステムは、グローバルな設定ファイル(通常/etc/nixos
に存在する)に、 望む機能を記述することで構成できる。例として、下記はSSHデーモンを実行するミニマルなマシンの設定である。[17]
{
boot.loader.grub.device = "/dev/sda";
fileSystems."/".device = "/dev/sda1";
services.sshd.enable = true;
}
設定ファイルを変更した後、nixos-rebuild
コマンドを使用してシステム構成を(設定ファイルに基づいて)更新できる。コマンドの実行はパッケージのダウンロードとインストール、追加の設定ファイルの生成など、新しい構成を反映するために必要なすべての操作を自動的に行う。
アトミックで信頼性の高いアップデート
[編集]Nix言語の純粋関数的な特性により、システムの状態にかかわらず、同じ設定ファイルの評価は常に同じ結果をもたらす。
NixOSはシステム構成の管理にトランザクション的なアプローチを採用しており、アップグレードなどの構成変更をアトミックに行う。例として、システム構成の更新が停電などによって中断されたとしても、システムは変更する前、もしくは完全に更新された状態を一貫に保つ。[18]
ロールバック
[編集]システム更新の結果が望ましいものではなかった場合、nixos-rebuild switch --rollback
コマンドを利用して古いバージョンの構成にロールバックできる。すべてのシステム構成のバージョンはブート時のメニューに表示され、例えば新しい構成バージョンのシステムが起動できない場合、古い構成バージョンに切り替えて起動することができる。
NixOSの宣言的な構成方法により、システム設定を容易に別のマシンで再現することができる。設定ファイルを別のマシンにコピーし、更新コマンドを実行するだけで、(ユーザーデータなどNixパッケージマネージャによって管理されていない部分を除いて)全く同じシステム構成(カーネル、アプリケーション、システムサービスなどを含む)を再現できる。
ソースコードビルドとバイナリキャッシュの併用
[編集]NixOSにおけるパッケージのインストールは、ソースからパッケージをビルドする手順の記述を評価することで行われる。この設計はユーザーによる柔軟なカスタマイズを容易にするが、記述を更新するごとにパッケージを再ビルドする必要が生じ、多量の時間がかかってしまう。そこで、リモートパッケージリポジトリにあらかじめ全パッケージのビルド結果をキャッシュし、パッケージのインストール時に利用可能なビルド結果がある場合、それを直接ダウンロードして利用できる方法が導入されている。ビルド設定の変更、または--option substitute false
をインストール時の引数として指定した場合、パッケージはソースからビルドされる。これらの措置により、Nixはソースベースの柔軟性とバイナリベースの効率性を両立しているといえる。[20]
一貫性
[編集]Nixパッケージマネージャーは、実行中のシステムがシステムの論理と一致していることを保証する。言いかえれば、パッケージの操作が行われた際、関連するすべてのパッケージも再ビルドされる。例えばカーネルを変更したとすると、関連するカーネルモジュールがすべて再ビルドされる。同様に、ライブラリがアップグレードされると、そのライブラリに(静的にリンクされているパッケージをも含めて)関連する全てのパッケージが、新しいバージョンのライブラリを使うように再ビルドされる。
ユーザー間におけるパッケージ管理
[編集]NixOSでは、個別のユーザーがパッケージをインストールするのに特権を必要としない。全システム共通のプロファイル以外に、ユーザー別にそれぞれ独自のプロファイルが割り当てられているため、たとえ違ったバージョンの同じパッケージを複数のユーザーがインストールしていたとしても、パッケージのバージョンはそれぞれ違ったまま同時に存在できる。複数のユーザーが同じバージョンの同パッケージをインストールしようとすると、パッケージのダウンロードおよびビルドは一回だけ行われる。
Nixはこの操作が安全であることを保証している。なぜなら、システム設定によって明示的に信頼されたユーザーだけがderivationの生成結果を制御できるビルドパラメーター(サンドボックスに不純物を追加したり、信頼されていないSubstituter(=追加のNixストア)を利用するなど)の使用を許可されているからである。そのようなパラメーターが含まれていない場合、ユーザーはビルドにシステムより信頼されたsubstituter、もしくは暗黙的に信用されるローカルのサンドボックス化されたビルド環境のみを使用できる。
実装
[編集]NixOSはパッケージ管理にNix (パッケージ管理システム)を利用している。すべてのパッケージは独立した状態でNixストアに保存される。
インストールされたパッケージは、ビルド過程に入力されたすべての情報に基づいて一意なハッシュ値を与えられる。ビルド手順を変更すると異なるハッシュ値が生成され、異なったパッケージとしてNixストアにインストールされる。この仕組みは設定ファイルの管理にも使用され、設定の更新が過去の設定履歴を上書きしないための措置として導入されている。
この特異なパッケージ管理方法により、NixOSのディレクトリ設計はFilesystem Hierarchy Standardに準拠していない。唯一の例外は、/bin/sh
がNixストアにインストールされたbashへのシンボリックリンクとなっていることである(例:/nix/store/s/5rnfzla9kcx4mj5zdc7nlnv8na1najvg-bash-4.3.43/
)。システムワイドの設定ファイルを保持する/etc
ディレクトリは存在こそするが、その内容のほとんどは/nix/store
に存在するビルド生成物へのシンボリックリンクである(例:/nix/store/s2sjbl85xnrc18rl4fhn56irkxqxyk4p-sshd_config
)。複数のバージョンのパッケージが共存できるように、/bin
のようなグローバルディレクトリは使用されない。
反響
[編集]2015年にDistroWatch WeeklyでNixOS 15.09をレビューした Jesse Smith 氏はこう書いている:
NixOSは、システムの変更をいわば「世代」ごとに分けることで、パッケージアップグレードの際の心配をなくしているところがとても気に入っています。エンドユーザーからすると、NixOSの動作は他のLinuxディストリビューションとそう変わりません。NixOSは初心者向けではありませんし、汎用のオペレーティングシステムとして使われることも意図されていないと思いますが、Nixという非常に興味深い技術を検証するためのプレイグラウンドとしては充分に機能しています。この技術はさらなる探索とより多くのディストリビューションによる採用に値すると考えています。
2022年に書かれたFull Circle紙の NixOS 21.11 "Porcupine"レビュー記事はこう結んでいる:
NixOS Gnome 21.11からは、律儀かつ克明、エレガントな印象を受けた。あなたがGnomeデスクトップのファンなら、気に入るものがたくさん見つかるだろう。このディストリビューションの欠点は、アップデートなどを含むパッケージ管理の学習曲線が険しいことだ。どのディストリビューションから来たとしても、Nixをうまく扱えるようになるまでには、学ぶことがたくさんあるはずだ。[21]
The Register の Liam Proven 氏による NixOS 22.11「Raccoon」のレビュー:
ほんの2、3年前のNixOSの評価と比較すると、インストールして動作させるのは非常に簡単であることがわかった。このことは、ツールが順調に成熟し、特定の水準に達したことを示唆しているが、初めて使う立場からすると、比較できる事前の基準線がない。これは伝統的なディストリビューションでは決してなく、伝統的なUnixですらないが、うまく動作している上、独特の魅力を私たちは見出した。 [22]
DistroWatch の Jesse Smith 氏によるNixOS 23.11 「Tapir 」のレビュー:
NixOSは、私が使っている間にどんなエラーにも遭遇しなかったという点で、稀有な逸品と言えましょう。動作は安定しており、私のハードウェアとうまく動作し、実行中は一つたりとも問題に遭遇しませんでした。あなたがシステム管理者で、複数のマシンに同一のディストリビューション環境をデプロイ(またはメンテナンス)したいのであれば、NixOSは試してみるだけの価値があると思います。[23]
関連項目
[編集]- GNU Guix System – GNU Guixをベースに構築されたオペレーティングシステム。Nixにインスパイアされている。
脚注
[編集]注釈
[編集]出典
[編集]- ^ “Community - nixos.org”. 2022年9月23日時点のオリジナルよりアーカイブ。2022年9月23日閲覧。
- ^ “NixOS/nixos-foundation - Github”. GitHub. 2022年9月23日時点のオリジナルよりアーカイブ。2022年9月23日閲覧。
- ^ “nixpkgs/COPYING at master · NixOS/nixpkgs · GitHub”. Github.com. 2015年9月19日閲覧。
- ^ “What Is an Immutable Linux Distro, and Should You Use One?”. HowToGeek.com (6 December 2023). 2023年12月7日時点のオリジナルよりアーカイブ。2023年12月7日閲覧。
- ^ “DistroWatch.com: NixOS”. Distrowatch.com. 2015年9月19日閲覧。
- ^ 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時点におけるアーカイブ。
- ^ Dolstra. “Purely Functional System Configuration Management”. www.usenix.org. 2024年3月4日閲覧。
- ^ “Stichting NixOS Foundation”. Nixos.org. 2015年9月19日閲覧。
- ^ Garbas (2015年). “Make Nix Friendlier for Beginners”. media.ccc.de. 2024年12月31日閲覧。
- ^ “NixOS Wiki Archive”. 2024年1月1日閲覧。
- ^ Helmich. “MediaWiki for NixOS”. 2024年1月1日閲覧。
- ^ “NixOS Wiki: History”. NixOS Wiki. 2024年11月28日閲覧。
- ^ “Governance”. Nixos.org. 2020年8月16日時点のオリジナルよりアーカイブ。2020年8月28日閲覧。
- ^ “Nix RFCS (Request for Comments)”. GitHub (17 December 2021). 2024年12月31日閲覧。
- ^ “Release Announcements”. Nixos.org. 2023年12月9日閲覧。
- ^ Dolstra, Eelco; Hemel, Armijn (7 May 2007). Purely Functional System Configuration Management (PDF). 11th USENIX workshop on Hot topics in operating systems. San Diego, California, USA: USENIX Association. 2020年7月10日時点のオリジナル (PDF)よりアーカイブ。2023年7月19日閲覧。
- ^ “About NixOS”. Nixos.org. 2015年9月19日閲覧。
- ^ van der Burg, Sander; Dolstra, Eelco; de Jonge, Merijn (20 October 2008). Atomic Upgrading of Distributed Systems (PDF). 1st International Workshop on Hot Topics in Software Upgrades. Nashville, Tennessee, USA: Association for Computing Machinery. doi:10.1145/1490283.1490294. ISBN 978-1-60558-304-4. 2021年11月13日時点のオリジナル (PDF)よりアーカイブ。2023年7月19日閲覧。
- ^ NixOS Manual - Rolling Back Configuration Changes, Nixos.org
- ^ Dolstra, Eelco (7 November 2005). Secure Sharing Between Untrusted Users in a Transparent Source/Binary Deployment Model (PDF). 20th IEEE/ACM International Conference on Automated Software Engineering. Long Beach, California, USA: Association for Computing Machinery. doi:10.1145/1101908.1101933. ISBN 978-1-58113-993-8. 2021年11月13日時点のオリジナル (PDF)よりアーカイブ。2023年7月19日閲覧。
- ^ Hunt, Adam (28 October 2022). “Review - NixOS”. Full Circle Magazine(英語: Full Circle Magazine). 28 October 2022時点のオリジナルよりアーカイブ。28 October 2022閲覧。
- ^ Proven, Liam. “NixOS 22.11 'Raccoon': Like a proof of concept you can do things with OSes”. 2024年12月31日閲覧。
- ^ Smith, Jesse. “NixOS 23.11”. 2024年12月31日閲覧。