Search papers, labs, and topics across Lattice.
KernelScript is a domain-specific language (DSL) designed to address the fragmented programming model in eBPF applications by unifying type definitions across kernel code, userspace loaders, and shared maps. This approach allows for compile-time verification of cross-boundary relationships, significantly reducing the risk of silent state corruption due to mismatched types. Evaluation on 43 eBPF workloads shows that KernelScript can reject cross-boundary bugs that would otherwise pass through standard C/libbpf, while also reducing code diffs for changes by a factor of five.
KernelScript can catch cross-boundary bugs at compile time that traditional methods miss, enhancing the reliability of eBPF applications.
eBPF lets developers extend Linux with custom packet processing, tracing, and scheduling logic, and a verifier proves before execution that the code will not crash the kernel. The programming model, however, is fragmented: a single application spans kernel code, a userspace loader, and shared maps, yet the relationships among these pieces go unchecked. E.g. A map or event type defined differently on each side silently corrupts shared state. We observe that these cross-boundary relationships duplicate information that a type system can unify. We present KernelScript, a DSL that types maps, program handles, and execution domains in one source, then compiles to standard C through the original toolchain. We evaluate KernelScript on 43 eBPF workloads covering XDP, TC, kprobe, tracepoint, and struct_ops. KernelScript rejects cross-boundary bugs at compile time that standard C/libbpf still builds and loads, a unified source shrinks the diffs for cross-boundary changes by 5x, and generated code remains compatible with the existing toolchain.