The Linux kernel as a case study in software evolution
We use 810 versions of the Linux kernel, released over a period of 14years, to characterize the systems evolution, using Lehmans laws of software evolution as a basis. We investigate different possible interpretations of these laws, as reflected by different metrics that can be used to quantify them. For example, system growth has traditionally been quantified using lines of code or number of functions, but functional growth of an operating system like Linux can also be quantified using the number of system calls. In addition we use the availability of the source code to track metrics, such as McCabes cyclomatic complexity, that have not been tracked across so many versions previously. We find that the data supports several of Lehmans laws, mainly those concerned with growth and with the stability of the process. We also make some novel observations, e.g. that the average complexity of functions is decreasing with time, but this is mainly due to the addition of many small functions.
linux kernel software evolution lehmans laws