Skip to main content

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