LinuxとかOSSのこととか

Linux (主にNixOS) や OSS に関する取り組みを記述するブログ。

NixOS を始める 準備編

はじまり

某カンファレンスで、とある外国人の方にNixOSを推された。ちょうどLinuxに対して中途半端な知識のままでいる自分に嫌気がしていたし、関数型プログラミング言語に対して少し素養があるため、これを機に初めてみることにした。

注意

伺った話を、知った風に書いたのがこの記事です。もしかしたら、この辺境に迷いこみ、かつ、この記事を鵜呑みにされる稀有な方がいらっしゃるかもしれません。あまり真に受けないようお願いします。公式サイトはこちらにあります。NixOS Linux

NixOSとは

Nixと呼ばれるパッケージマネージャーによって、ビルドされるOSのこと。Nixは設定ファイルを読み、ビルドを始める。設定ファイルには、パッケージとそのバージョンを記述できる。設定ファイルはバージョン管理されるため、例えば、あるバージョンでビルドしたところ、何か不具合があった場合、ロールバックし、元に戻すことができる。

…らしい。ビルドできるというとGentooが浮かぶ。パッケージをソースから取って来たり、バイナリを取得したりできるのだろうか。設定ファイルがバージョン管理されているため、パッケージのバージョンを手軽に切り替えられることができる。そのため、あるパッケージのバージョンでセキュリティの脆弱性が見つかった場合、別のバージョンに切り替えることができる。このことを現地では、Heartbleed(というかopenssl)を例に教えていただいた。あと、あるパッケージに依存したパッケージ同士が衝突しないと伺ったが、書いた今でもよく理解していない。

また、NixはHaskellのように純粋関数型プログラミング言語の考えをもとに作られたらしい。パッケージは一つの関数であり、他のパッケージやバージョンを引数に取ることができる。普通、パッケージは他のパッケージを使用して構成されることが多いが、そのパッケージの依存関係を関数の組み合わせにより表現している。純粋な関数は、何度評価しても同じ結果を返す。この類推として、何度パッケージをビルドしても同じバイナリが生成されるだそうだ。また、Haskellのように遅延評価であるため、パッケージの評価時に、そのパッケージに依存したパッケージのビルドは必要になるまでされない。正直この部分の話を聴いているときが、一番アツかった。

 

これから

兎にも角にも触ってみないことには何も始まらないので、実際に触ってみる。ちょうど家に空っぽのSSD256GBがあるので、それをシステムドライブにしてみよう。実践編に続く。