🤖 AI Summary
This study addresses the long-overlooked configurability of small-scale software, where tensions between lightweight design and high configurability are increasingly evident. Introducing the novel concept of “zero-variability software systems,” the work presents an empirical analysis of 108 programs from GNU coreutils, employing static code analysis, historical version comparison, and statistical correlation methods to systematically assess the extent and evolution of compile-time and runtime configurability. The findings reveal that individual small programs can contain up to 76 configuration options, that runtime variability strongly correlates with code size (r = 0.78), and that growth in configurability is primarily driven by an increase in compile-time options. These results demonstrate that even small-scale software exhibits substantial configurability, suggesting that judicious reduction of non-essential variability can enhance both lightweight design and maintainability.
📝 Abstract
Many small-scale software systems, that is, with limited codebase or binary size, are widely used in everyday tasks, yet their configurability remains largely unexplored. At the same time, studies on modern software systems show a trend toward increasing configurability, alongside growing interest in building immutable, specialized, and reproducible software. In this paper, we present the first empirical study on the extent of configurability in small-scale software systems. By analyzing 108 programs from GNU coreutils, we show that even small programs can exhibit significant compile-time and run-time variability, with up to 76 options per program. Then, there is a high correlation (0.78) between run-time variability and codebase size. Furthermore, an analysis of the 20 smallest programs across 85 releases reveals that variability tends to increase over time, primarily due to the added compile-time variability. This suggests that shifting options between run-time and compile-time, removing unnecessary run-time variability, or resolving compile-time variability early, can help reduce codebase complexity and size. We also introduce, for the first time, the concept of null-variable software system, one with no configurability beyond mandatory features. Our findings show that high configurability is not exclusive to large-scale systems and that reducing unnecessary variability can lead to lightweight, smaller, and more maintainable software. We hope this effort contributes to designing new software by understanding how to balance its configurability with codebase size.