Guix System Distribution


GNU Guix Systemдистрибутив Linux, созданный с менеджером пакетов GNU Guix[6][7]. Он использует ядро Linux-libre с поддержкой элементов GNU Hurd[8]. 3 февраля 2015 года дистрибутив был добавлен в список свободных дистрибутивов GNU/Linux Фонда свободного программного обеспечения[9].

GuixSD использует GNU Guix, функциональный пакетный менеджер, и диспетчер конфигурации системы, основанный на Nix package manager, с использованием GNU Guile, являющийся реализацией языка программирования Scheme. Все определения пакетов, а также вся конфигурация системы, написаны на предметно-ориентированном языке Guile Scheme[10].

GuixSD использует GNU Daemon Shepherd в качестве своей системы init, который разрабатывается в тандеме с Guix и также написан на Guile. Ранее он назывался «dmd», что означало «Daemon management Daemons» или «Daemons-management Daemon», но имя было изменено, чтобы избежать конфликта с компилятором Digital Mars D[11].

Shepherd предоставляет функциональные возможности пользовательского пространства асинхронно в виде сервисов, которые для Shepherd являются универсальными функциями и объектными типами данных. Их экспорт используется Shepherd для расширения базовой операционной системы определённым образом. В противоположность systemd, процесс пользовательского пространства shepherd запускается от имени пользователя. Ядром модели инициализации пользовательского пространства Shepherd является концепция расширения, формы компонуемости, при которой сервисы предназначены для наложения на другие сервисы, дополняя их более сложными или специализированными поведениями по желанию[12]. Это выражает основанные на создании экземпляров отношения зависимости, обнаруженные во многих современных системах инициализации[13], делая систему модульной, также позволяя сервисам вариативно взаимодействовать друг с другом произвольными способами.

Shepherd также предоставляет так называемые виртуальные службы, которые позволяют динамическую отправку по классу связанных объектов службы, таких как все те объекты, которые создают реализацию почтового сервера для системы[14]. Система, управляемая через демон Shepherd, может представлять своё пользовательское пространство, как направленный ациклический граф, а «системный сервис» — ответственный за ранние фазы загрузки и init — как его корень, так и все последующие инициализированные службы в качестве расширений для функциональности системного сервиса, либо напрямую, либо через другие сервисы[12][15].