Mastering Variability Challenges in Linux and Related Highly-Configurable System Software
Reinhard Tartler · OPUS FAU (Kooperativer Bibliotheksverbund Berlin-Brandenburg (KOBV), on behalf of the Universitätsbibliothek Erlangen-Nürnberg) · 2013
The compile-time configuration mechanisms of modern system software allow the adaptation to a broad range of supported hardware architectures and application domains. Linux is hereby a both prominent and good example: In version 3.2, Linux provides more than 12.000 user-configurable configuration options, growing rapidly. This high amount of configurability imposes big challenges for developers. First, the declared variability in the configuration tooling, and what is actually implemented in the code, have to be kept in sync. If performed manually, this is a tedious and error-prone task. Second, alternatives implemented in the code make the use of tools for static analysis challenging. Finally, the overwhelming amount of configuration options make finding the best configuration for a given use-case hard for system integrators and developers. In this thesis, I analyze the variability mechanisms in Linux and related system software, in which I reveal many inconsistencies between the variability declaration and implementation. Many of these inconsistencies are hereby provably actual programming errors. It turns out that the extracted variability model is useful for additional applications. The formalized model helps developers with employing existing tools for static analysis more effectively. This allows the systematic revelation of bugs that are hidden under seldom tested configurations. Moreover, my approach enables the construction of a minimal Linux configuration with the extracted variability model and a run-time analysis of the system. This enables system administrators to compile and operate a Linux kernel with significantly reduced attack-surface, which makes the system more secure. In the end, my approach allows the holistic mastering of compile-time variability across the language barriers of the employed tools Kconfig, make and CPP.