Highly-configurable software, e.g., the Linux kernel, form our most critical infrastructure, underpinning everything from high-performance computing clusters to Internet-of-things devices. Keeping these systems secure and reliable with automated tools is essential. However, their high degree of configurability leaves most critical software without comprehensive tool support. The problem is that most software tools do not scale to the colossal number of configurations of large systems. With millions of configurations in complex systems like Linux, there are simply too many to analyze individually. Instead, my goal is to make tools that work on all configurations simultaneously. Previous work includes parsing both C proper and the C preprocessor together [PLDI 2012] and analyzing all configurations of the Kbuild build system [ESEC/FSE 2017].
Continuing work includes finding new programming language constructs to replace the preprocessor [ICSE-NIER 2019] and simulating variability-aware analysis [ESEC/FSE 2019] using configuration sampling tools developed with collaborators [TR 2018, TR 2019]. Ongoing work includes variability-aware analyses and bug finding, configuration sampling strategies, and preprocessor usage analysis and translation.
Funding: This work is supported by a grant from the NSF.