NixNet: Reproducible Virtual Network Experiments
Abstract
In practice, network experiments are difficult to share and repeat due to undeclared dependencies, environment drift, and fragile imperative scripts. These problems cause experiments to silently diverge across machines and time, making results hard to verify and build upon. In this paper, we present NixNet, a framework that automates the complete experiment lifecycle—from dependency installation to resource cleanup. NixNet leverages the Nix package manager to enable reproducibility and preservation of network experiments through a virtual testbed. Testbeds are defined by a single declarative expression specifying network nodes, virtual links, link characteristics, and application scripts. By enforcing strict isolation using Linux namespaces, NixNet eliminates unintended side-effects and ensures reproducibility by pinning the entire dependency closure, including userspace binaries and input data. NixNet configures the Linux networking stack directly via syscalls, providing a lightweight yet strongly isolated testbed. We demonstrate NixNet's utility through scenarios in protocol research—including Media over QUIC streaming and LEO satellite link emulation—and provide a detailed comparison against Mininet and containerlab, showing superior scalability and isolation properties.