| you can provide constrains like what packages you are interested in and (optionally) their version numbers, compiler flags, etc.
then there is a sat solver (they call it concretizer) that provides a solution to the constrains. This solution is saved as a *.lock file. From a lock file you can reproduce the environment.
packages can also provide their own constraints. as in: "version x of this package needs gcc >= 9"
|