2022-04-27 22:17:44 +03:00
|
|
|
|
# Store
|
2022-04-22 08:39:30 +03:00
|
|
|
|
|
2022-04-24 22:34:33 +03:00
|
|
|
|
A Nix store is a collection of [store objects](objects.md) and associated operations.
|
2020-11-24 15:38:12 +02:00
|
|
|
|
|
2022-04-24 22:34:33 +03:00
|
|
|
|
These store objects can hold arbitrary data, and Nix makes no distinction if they are used as build inputs, build results, or build plans.
|
|
|
|
|
|
2022-04-28 02:15:27 +03:00
|
|
|
|
A Nix store allows to add and retrieve store objects.
|
|
|
|
|
It can perform builds, that is, transform build inputs using instructions from the build plans into build outputs.
|
|
|
|
|
It also keeps track of *references* between data and can therefore garbage-collect unused store objects.
|
2022-04-24 22:34:33 +03:00
|
|
|
|
|
2022-04-28 02:15:27 +03:00
|
|
|
|
There exist different types of stores, which all follow this model.
|
|
|
|
|
Examples:
|
|
|
|
|
- store on the local file system
|
|
|
|
|
- remote store accessible via SSH
|
|
|
|
|
- binary cache store accessible via HTTP
|
|
|
|
|
|
|
|
|
|
Every store with a file system representation has a *store directory*, which contains that store’s objects accessible through [store paths](paths.md).
|
|
|
|
|
The store directory defaults to `/nix/store`, but is in principle arbitrary.
|
2022-04-22 08:39:30 +03:00
|
|
|
|
|
|
|
|
|
## A Rosetta stone for the Nix store.
|
|
|
|
|
|
|
|
|
|
The design of Nix is comparable to other build systems, even programming languages in general.
|
|
|
|
|
Here is a rough [Rosetta stone](https://en.m.wikipedia.org/wiki/Rosetta_Stone) for build system terminology.
|
|
|
|
|
If you are familiar with one of these columns, this might help the following sections make more sense.
|
|
|
|
|
|
|
|
|
|
generic build system | Nix | Bazel | Build Systems à la Carte | lazy programming language
|
|
|
|
|
-- | -- | -- | -- | --
|
|
|
|
|
data (build input, build result) | component | file (source, target) | value | value
|
|
|
|
|
build plan | derivation graph | action graph | `Tasks` | thunk
|
|
|
|
|
build step | derivation | rule | `Task` | thunk
|
|
|
|
|
build instructions | builder | (depends on action type) | `Task` | function
|
|
|
|
|
build | build | build | `Build` applied to arguments | evaluation
|
|
|
|
|
persistence layer | store | file system | `Store` | heap
|
|
|
|
|
|
|
|
|
|
(n.b. Bazel terms gotten from https://docs.bazel.build/versions/main/glossary.html.)
|
|
|
|
|
|
|
|
|
|
Plenty more could be said elaborating these comparisons.
|
|
|
|
|
We will save that for the end of this chapter, in the [Related Work](./related-work.md) section.
|