NixOS — это дистрибутив GNU/Linux, который призван улучшить нынешнюю ситуацию с управлением пакетами. Как известно, в нынешней системе слишком много внимания нужно уделять взаимозависимостям пакетов. В итоге, обычный апгрейд становится опаснее для целостности системы, чем установка с нуля. Апгрейд отдельного пакета может привести к нарушения работы других пакетов.
Дистрибутив NixOS с функциональным подходом к конфигурации системы и версионностью апгрейдов призван изменить такое положение вещей.
Декларативный подход в программировании (в отличие от императивного) означает, что процесс вычисления описывается не в виде потока команд, а в виде логических конструкций высокого уровня. Обычно имеется в виду использование функционального или логического языка программирования, такого как LISP (Scheme), Erlang, F#, Scala, Haskell.
В случае с ОС декларативным становится описание конфигурации. В дистрибутиве NixOS ядро, приложения, системные пакеты и конфигурационные файлы и так далее — все основано на пакетном менеджере Nix, который позволяет использовать функциональный язык программирования. Конфигурация системы осуществляется с помощью описания желаемой функциональности в файле /etc/nixos/configuration.nix. Например, вот как будет выглядеть минимальная конфигурация для машины, на которой хочется запустить SSH-демон.
{ boot.loader.grub.device = "/dev/sda"; fileSystems = [ { mountPoint = "/"; device = "/dev/sda1"; } ]; services.sshd.enable = true; }
После изменения файла можно активизировать новую конфигурацию командой.
$ nixos-rebuild switch
Эта команда делает все необходимое, включая скачивание и компиляцию Open SSH, генерацию конфигурационных файлов для SSH-сервера и так далее.
Апгрейд системы осуществляется надежным транзакционным образом с возможность отката на предыдущую версию. Это делается за счет использования возможностей ZFS, путем клонирования файловой системы.
Несколько лет назад новость о выходе NixOS посчитали первоапрельской шуткой. Но, «шутка» оказалась на удивление живучей: дистрибутив с декларативной конфигурацией менеджера пакетов продолжает развиваться, а 13 мая 2013 года вышла очередная версия Nix 1.5.2.