Codebase overview
The Lix system is constituted of two broad parts, the evaluator and the store daemon.
(fyi to anyone editing this, double click the image in the preview to edit it)
Evaluator
Known design flaws
- GC issues (FIXME add details)
- AST based evaluator design
- Funniness with attr ordering and equality that nixpkgs depends on, which is fragile
Lix team plans
- Rewrite parser (done, being ported for 2.91)
- Rewrite evaluator
Store protocol
The store protocol is a hand rolled binary protocol with monotonically increasing versioning.
Known design flaws
- We cannot extend the store protocol (not that it is Good) because of the monotonic version numbers: we must always be stuck at some released C++Nix version
Lix plans
- Replace protocol with capnproto, transport with websockets?
Store daemon
Known design flaws
- Sandbox is of dubious security
- Poor self-awareness: daemon doesn't know what it is building
- Substitutions are inherently a kind of build so they can't happen out of order or with better parallelism