Nix 生態系統
Nix 核心生態系統是一組技術的集合,旨在以可復現的方式構建、聲明性地配置和管理軟件包、系統及其依賴項。它通過將函數式編程範式從程序領域擴展到系統領域來實現這一目標,並使用一種動態的、函數式的、惰性求值的領域特定語言(DSL),即 Nix 語言,來指定可復現的構建過程。
此外,還有許多由 Nix 社區開發的應用程序(Nix 擴展生態系統)利用並支持了這些核心技術。
官方生態系統
組件 | 手冊(Manual) | 描述 | 用途 | 協議 |
---|---|---|---|---|
NixOS | NixOS 手冊 | 一個由 Nix 構建所有組件的 Linux 發行版,因此支持可重現的、聲明式的全系統配置管理以及原子升級和回滾。 | 聲明式配置桌面、服務器和集群。 | MIT |
Nixpkgs | Nixpkgs 手冊 | 最大的社區維護的 Nix 軟件包和 NixOS 模塊倉庫,NixOS 的標準版本也託管在這裡。 | 分享 Nix 軟件包和 NixOS 模塊 | MIT |
Hydra | Hydra 手冊 | 基於 Nix 的持續構建系統 | 持續構建集群 | GPL-3.0 |
Nix | Nix 手冊 | 一款軟件包管理器,能解析指定可重現構建的 Nix 表達式,並將結果與依賴關係樹的哈希值一起放入存儲地址,從而避免依賴關係地獄,並支持多版本安裝和回滾。 | Linux 和 Darwin 中的可重現構建和軟件包管理 | LGPL-2.1 |
NixOS
一個用 Nixpkgs 構建的 Linux 發行版和配置系統 |
|
Nixpkgs
一個巨大的,社區維護的軟件倉庫 |
Hydra
一個基於 Nix 的持續構建系統 |
Nix
一個純函數式的構建系統 |
NixOS 的使用方式
用戶可以像安裝其他 Linux 發行版一樣,將 NixOS 發行版安裝到他們的電腦上。他們通過 https://search.nixos.org 和本維基查閱有關 Nixpkgs 中可安裝的軟件包和配置選項的信息。他們使用 Nix 語言以聲明式的方式,在一個文本文件中描述應該安裝哪些軟件包以及如何配置系統。然後,他們在終端中運行兩個命令行程序,將系統轉變為所描述的系統。此後,他們像使用任何其他 Linux 系統一樣使用該系統。
NixOS 的開發
NixOS 的開發者主要工作在 Nixpkgs 上。NixOS 本身的開發由三個主要領域組成,同時還有一些體量較小但同樣重要的其他領域。主要領域包括打包、模塊系統和文檔。打包工作在 Nixpkgs 中進行,並不僅限於 NixOS 或基於 Linux 的平台。那些不專屬於 NixOS 的軟件包(例如運行發行版本身所需的工具)的維護者通常會照顧多個平台,儘管這並非嚴格要求。
模塊系統是配置運行在 NixOS 上服務的主要方式。該領域涵蓋從「底層」配置(如 systemd 單元文件或提供自定義內核配置)到為特定服務生成配置文件的各個方面。模塊系統是用戶配置 NixOS 的主要途徑,並位於 Nixpkgs 的 nixos/
子目錄中。
文檔主要嵌入在打包和模塊系統的數據中,儘管獨立的 Markdown 文件也包含在 Nixpkgs 倉庫中。文檔還包括維護網站、維基以及更廣泛生態系統的其他方面。前兩個類別幾乎完全由 Nix 語言代碼組成,寫在文本文件中,而後者則是 Nix 代碼、Markdown 文件及其他各種格式的混合。
對 Nixpkgs 的所有貢獻,無論是否影響 NixOS,在被合併到 Nixpkgs 前都需經過同行評審。許多軟件包以及文檔和補充材料(如 ISO 或 tarball)會在 Hydra 上預先構建,以減少 NixOS 用戶的更新等待時間。
這三個類別按貢獻量來看是最大的,但許多維護者也參與圍繞 NixOS 基金會的活動,包括維護網站、Hydra 及其他工具運行所需的基礎設施,或開發 NixOS 所需的工具。
- Packaging is done in Nixpkgs and is not exclusive to NixOS or even Linux-based platforms. Maintainers of packages which are not exclusive to NixOS (such as tooling required to run the distribution itself) usually take care of multiple platforms although not strictly required.
- The module system is the way in which services running on NixOS are primarily configured. This area stretches from "low-level" configuration such as systemd unit files or providing custom kernel configuration up to configuration file generation for specific services. The module system is the primary way for users to configure NixOS, and lives in the
nixos/
subdirector of Nixpkgs.
- Documentation is largely embedded in packaging and module system data, although free-standing markdown files are also contained in the Nixpkgs repository. Documentation also includes maintaining the website, Wiki, and other aspects of the wider ecosystem. The first two categories are almost exclusively Nix language code written in text files, while the latter is a mix of Nix code, markdown files, and various other formats.
All contributions to Nixpkgs, regardless of whether they affect NixOS or not, are subject to peer review before being integrated into Nixpkgs. Many packages alongside documentation and supplementary materials such as ISOs or tarballs are pre built on Hydra to reduce the update time for NixOS users.
這三個類別按貢獻量來看是最大的,但許多維護者也參與圍繞 NixOS 基金會的活動,包括維護網站、Hydra 及其他工具運行所需的基礎設施,或開發 NixOS 所需的工具。
開發類型 | 開發位置 | 示例 |
---|---|---|
平台無關的打包 | Nixpkgs | coreutils 軟件包, stdenv 框架, Libreoffice 軟件包 |
平台無關的工具 | Nixpkgs 及其他多個倉庫 | 上游/默認 Nix 實現 (CppNix), Hydra 源代碼, Nixpkgs 合併機器人 |
NixOS 工具 | 主要是 Nixpkgs | nixos-rebuild-ng 源代碼, NixOS 安裝 ISO |
NixOS 模塊系統 | Nixpkgs | 顯示管理器配置, MySQL(及其衍生)數據庫配置 |
基礎設施 | 本維基的基礎設施, NixOS 基礎設施 | |
文檔 | 本維基, stdenv 文檔, NixOS IPv6 配置(可在 NixOS 手冊 IPv6 章節 中查看), Nixpkgs 貢獻指南 | |
技術組織 | NixOS RelEng, Nix 和 NixOS RFC | |
其他 | NixOS artwork, NixOS(及相關)討論區, NixOS 基金會 |
另請參見:Nix 組織倉庫