Mastering Variability Challenges in Linux and Related Highly-Configurable System Software

Language
en
Document Type
Doctoral Thesis
Issue Date
2013-09-09
First published
2013-09-09
Issue Year
2013
Authors
Tartler, Reinhard
Editor
Abstract

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.

Abstract

Die von moderner Systemsoftware angebotenen Konfigurationsmechanismen erlauben die Anpassung an eine breite Auswahl von unterstützten Hardwarearchitekturen und Anwendungsdomänen. Linux ist hierbei ein sowohl prominentes als auch gutes Beispiel: In Version 3.2 bietet Linux mehr als 12.000 vom Benutzer steuerbare Konfigurationsschalter, mit stark steigender Tendenz. Dieses hohe Maß an Konfigurierbarkeit stellt Entwickler vor große Herausforderungen. Zum einen muss die in den Konfigurationswerkzeugen deklarierte, mit der im Programmtext umgesetzten Variabilität in Einklang gehalten werden. Bei händischer Durchführung stellt dies einen mühsamen und fehleranfälligen Arbeitsschritt dar. Zum anderen erschweren die im Programmtext programmierten Alternativen den Einsatz von statischen Analysewerkzeugen. Schließlich macht die überwältigende Anzahl an Konfigurationsoptionen es Systemintegratoren und Entwicklern schwer, die für einen gegebenen Anwendungsfall beste Belegung der Konfigurationsschalter zu finden. In dieser Arbeit analysiere ich die Variabilitätsmechanismen in Linux und verwandter Systemsoftware, bei der ich im ersten Schritt viele Inkonsistenzen zwischen der Deklaration und Umsetzung von Variabilität aufdecke. Viele dieser Inkonsistenzen sind dabei nachweislich tatsächliche Programmierfehler. Es stellt sich dabei heraus, dass das extrahierte Variabilitätsmodell auch für weitere Anwendungen nützlich ist. So hilft das formalisierte Modell Entwicklern bestehende statische Analysewerkzeuge effektiver einsetzen zu können. Dies erlaubt die systematische Aufdeckung von Programmfehlern, die in selten gewählten Konfigurationen verborgen sind. Darüber hinaus ermöglicht mein Ansatz die Konstruktion einer minimalen Konfiguration mit dem extrahierten Variabilitätsmodell und einer Laufzeitanalyse des Systems. Dies ermöglicht es Systemadministratoren einen Linux-Kern mit einer deutlich verkleinerten Angriffsfläche zu übersetzen und zu betreiben, was die Sicherheit des Gesamtsystems deutlich erhöht. Letztendlich erlaubt mein Ansatz die ganzheitliche Beherrschung der Variabilität in Linux zur Übersetzungszeit über die Sprachgrenzen der eingesetzten Werkzeuge Kconfig, make und CPP, hinweg.

DOI
Document's Licence
Faculties & Collections
Zugehörige ORCIDs