Evix: un motor de evaluación de Nix que convierte la evaluación en un problema de planificación

Fuentes: Nix Evaluation Is a Scheduling Problem

Evix es un motor asíncrono de evaluación para Nix, estructurado como biblioteca, que presenta la evaluación de expresiones Nix como un problema de planificación en lugar de una simple llamada a una herramienta. El proyecto nace de la frustración con nix-eval-jobs y con el propio caché de evaluación de Nix: cada nueva consulta (un push en CI, un cambio en una configuración NixOS, una escritura vigilada, una invocación repetida de un daemon) obliga a recomputar desde cero atributos, thunks perezosos y miles de nodos, cuando en realidad el programa ya construyó la estructura interna del grafo, la imprimió y murió.

La solución propuesta reorganiza el trabajo en torno a eventos tipados y una cola gestionada por un coordinador, en vez de un call stack recursivo dentro de un único worker. Cada worker evalúa una única ruta de atributo (por ejemplo, packages.x86_64-linux.hello) y devuelve un evento: derivación con su nombre, sistema, .drv y outputs; conjunto de atributos con los nombres hijos para seguir explorando; o error con su contexto, sin abortar la corrida completa. Los atributos hijos se reinsertan en la cola, así la recursión se reparte entre workers y los errores no fatales se acumulan en el flujo. Sobre esta base, Evix ofrece un objeto Session de larga vida que conserva el grafo, responde consultas, calcula diffs y observa cambios en entradas locales, además de un daemon tras un socket Unix para que varias invocaciones compartan la misma sesión caliente. Es útil para CI, herramientas de despliegue y watchers, y se apoya en los nix-bindings del autor para hablar con la API C estable de Nix.