Skip to main content
Log in

Coevolution of variability models and related software artifacts

A fresh look at evolution patterns in the Linux kernel

  • Published:
Empirical Software Engineering Aims and scope Submit manuscript

Abstract

Variant-rich software systems offer a large degree of customization, allowing users to configure the target system according to their preferences and needs. Facing high degrees of variability, these systems often employ variability models to explicitly capture user-configurable features (e.g., systems options) and the constraints they impose. The explicit representation of features allows them to be referenced in different variation points across different artifacts, enabling the latter to vary according to specific feature selections. In such settings, the evolution of variability models interplays with the evolution of related artifacts, requiring the two to evolve together, or coevolve. Interestingly, little is known about how such coevolution occurs in real-world systems, as existing research has focused mostly on variability evolution as it happens in variability models only. Furthermore, existing techniques supporting variability evolution are usually validated with randomly-generated variability models or evolution scenarios that do not stem from practice. As the community lacks a deep understanding of how variability evolution occurs in real-world systems and how it relates to the evolution of different kinds of software artifacts, it is not surprising that industry reports existing tools and solutions ineffective, as they do not handle the complexity found in practice. Attempting to mitigate this overall lack of knowledge and to support tool builders with insights on how variability models coevolve with other artifact types, we study a large and complex real-world variant-rich software system: the Linux kernel. Specifically, we extract variability-coevolution patterns capturing changes in the variability model of the Linux kernel with subsequent changes in Makefiles and C source code. From the analysis of the patterns, we report on findings concerning evolution principles found in the kernel, and we reveal deficiencies in existing tools and theory when handling changes captured by our patterns.

This is a preview of subscription content, log in via an institution to check access.

Access this article

Price excludes VAT (USA)
Tax calculation will be finalised during checkout.

Instant access to the full article PDF.

Fig. 1
Fig. 2
Fig. 3
Fig. 4
Fig. 5
Fig. 6
Fig. 7
Fig. 8
Fig. 9
Fig. 10
Fig. 11
Fig. 12
Fig. 13
Fig. 14
Fig. 15
Fig. 16
Fig. 17
Fig. 18
Fig. 19
Fig. 20
Fig. 21
Fig. 22
Fig. 23

Similar content being viewed by others

Notes

  1. See http://splc.net/fame.html

  2. See also: http://c2.com/cgi/wiki?RuleOfThree

  3. See https://www.kernel.org/doc/Documentation/kbuild/kconfig-language.txt

  4. See https://www.kernel.org/doc/Documentation/fb/framebuffer.txt

  5. See https://www.kernel.org/doc/Documentation/kbuild/

  6. See http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=7c08c9ae

  7. See http://gsd.uwaterloo.ca/coevolution-patterns

  8. See git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git

  9. The numbers in the table do not account for commits that merge branches.

  10. See http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=89803d83

  11. V4L/DVB: Video for Linux/Digital Video Broadcasting

  12. See http://sethrobertson.github.io/GitBestPractices/

  13. These values are calculated as follows: for the additions sample, we sum the size of all its commit windows (502), and divide the result by the number of added primary features (268). Likewise, in the removals case, we sum the total number of commits in the commit windows in the corresponding sample (155), and divide it by the number of removed primary features (132).

  14. See http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=bbddff05

  15. When reviewing the original and extended samples, A 3 indicated five possible inconsistencies: three were minor comments, whereas for the remaining two, A 3 did not agree that they were instances of a particular pattern. Upon further clarification, A 3 agreed that the two instances were indeed related to the pattern in question. A 4, in turn, pointed out 7 % and 14 % inconsistencies in the classification of the primary features in the additions and removals samples, respectively. Almost all inconsistencies were confirmed, and the patterns’ frequencies were changed accordingly.

  16. Basically, a rename just updates all references to a given feature name f to a new name f N in all spaces where f appears. Note that renaming does not cause any behavioural change, nor does it change the set of cross-tree constraints.

  17. See https://raw.github.com/gregkh/kernel-history/master/scripts/genstat.pl

  18. See http://squashfs.sourceforge.net/

  19. See http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=85e09b40

  20. See http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=7657cacf

  21. See http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=72246da4

  22. See http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=24278d14

  23. In our previous catalog (Passos et al. 2013), we named the pattern as Featurize code (FTC).

  24. See http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=f1d7dbbe

  25. See http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=ff850c33

  26. See http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=3ebe1243

  27. See http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=2e9f3bdd

  28. See http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=4e9687d9

  29. See https://www.kernel.org/doc/Documentation/SubmittingPatches

  30. See https://www.kernel.org/doc/Documentation/development-process/4.Coding

  31. See http://yarchive.net/comp/linux/ifdefs.html

References

  • Alves V, Gheyi R, Massoni T, Kulesza U, Borba P, Lucena C (2006) Refactoring product lines. In: Proceedings of the international conference on generative programming and component engineering. ACM, pp 201–210

  • Apel S, Batory D, Kästner C, Saake G (2013) Feature-oriented software product lines: concepts and implementation. Springer

  • Babar MA, Chen L, Shull F (2010) Managing variability in software product lines. IEEE Softw 27(3):89–91, 94

    Article  Google Scholar 

  • Baresi L, Guinea S, Pasquale L (2012) Service-oriented dynamic software product lines. IEEE Comput 45(10):42–48

    Article  Google Scholar 

  • Batory DS, Barnett JR, Garza JF, Smith KP, Tsukuda K, Twichell BC, Wise TE (1988) GENESIS: an extensible database management system. IEEE Trans Softw Eng 14(11):1711–1730

    Article  Google Scholar 

  • Berger T, Nair D, Rublack R, Atlee JM, Czarnecki K, Wąsowski A (2014) Variability modeling in industry: practices, benefits, and challenges. In: Model-driven engineering languages and systems, lecture notes in computer science, vol 8767. Springer, pp 302–319

  • Berger T, She S, Lotufo R, Czarnecki K, Wąsowski A (2010) Feature-to-code mapping in two large product lines. Tech. rep., Department of Computer Science, University of Leipzig

  • Berger T, She S, Lotufo R, Wąsowski A, Czarnecki K (2010) Variability modeling in the real: a perspective from the operating systems domain. In: Proceedings of the international conference on automated software engineering. ACM, pp 73–82

  • Berger T, She S, Lotufo R, Wąsowski A, Czarnecki K (2013) A study of variability models and languages in the systems software domain. IEEE Trans Softw Eng 39(12):1611–1640

    Article  Google Scholar 

  • Borba P, Teixeira L, Gheyi R (2012) A theory of software product line refinement. Theor Comput Sci 455:2–30

    Article  MathSciNet  MATH  Google Scholar 

  • Bovet D, Cesati M (2005) Understanding the Linux kernel, 3rd edn. O’Reilly

  • Chen K, Rajlich V (2010) Case study of feature location using dependence graph, after 10 years. In: Proceedings of the international workshop on program comprehension. IEEE, pp 1–3

  • Corbet J, Kroah-Hartman G, McPherson A (2013) Linux kernel development: how fast it is going, who is doing it, what they are doing, and who is sponsoring it. Last seen: July 16th, 2014. http://www.linuxfoundation.org/publications/linux-foundation/who-writes-linux-2013

  • Corbet J, Rubini A, Kroah-Hartman G (2005) Linux device drivers, 3rd edn. O’Reilly

  • Deprez JC, Lakhotia A (2000) A formalism to automate mapping from program features to code. In: Proceedings of the international workshop on program comprehension. IEEE, pp 69–78

  • Dietrich C, Tartler R, Schröder-Preikschat W, Lohmann D (2012) A robust approach for variability extraction from the Linux build system. In: Proceedings of the international software product line conference. ACM, pp 21–30

  • Dintzner N, Van Deursen A, Pinzger M (2013) Extracting feature model changes from the Linux kernel using FMDiff. In: Proceedings of the international workshop on variability modelling of software-intensive systems. ACM, pp 22:1–22:8

  • Eisenbarth T, Koschke R, Simon D (2003) Locating features in source code. IEEE Trans Softw Eng 29(3):210–224

    Article  Google Scholar 

  • Ernst MD, Badros GJ, Notkin D (2002) An empirical analysis of C preprocessor use. IEEE Trans Softw Eng 28(12):1146–1170

    Article  Google Scholar 

  • Favre JM (1997) Understanding in the large. In: Proceedings of the international workshop on program comprehension. IEEE, pp 29–38

  • Feitelson DG (2012) Perpetual development: a model of the Linux kernel life cycle. J Syst Softw 85(4):859–875

    Article  Google Scholar 

  • Fowler M, Beck K, Brant J, Opdyke W, Roberts D (1999) Refactoring: improving the design of existing code. Addison Wesley

  • Godfrey MW, Tu Q (2000) Evolution in open source software: a case study. In: Proceedings of the international conference on software maintenance. IEEE, pp 131–142

  • Guo J, Wang Y, Trinidad P, Benavides D (2012) Consistency maintenance for evolving feature models. Expert Syst Appl 39(5):4987–4998

    Article  Google Scholar 

  • Gurp JV, Bosch J, Svahnberg M (2001) On the notion of variability in software product lines. In: Proceedings of the working conference on software architecture. IEEE, pp 45–54

  • Holdschick H (2012) Challenges in the evolution of model-based software product lines in the automotive domain. In: Proceedings of the international workshop on feature-oriented software development. ACM, pp 70–73

  • Hunsen C, Zhang B, Siegmund J, Kästner C, Lessenich O, Becker M, Apel S (2014) Preprocessor-based variability in open-source and industrial software systems: an empirical study. Empir Softw Eng. To appear

  • Izurieta C, Bieman J (2006) The evolution of FreeBSD and Linux. In: Proceedings of the international symposium on empirical software engineering. ACM, pp 204–211

  • Janota M, Kiniry J (2007) Reasoning about feature models in higher-order logic. In: Proceedings of the international software product line conference. IEEE, pp 13–22

  • Kang KC, Cohen SG, Hess JA, Novak WE, Peterson AS (1990) Feature-oriented domain analysis (FODA) feasibility study. Tech. rep. Carnegie-Mellon University Software Engineering Institute

  • Kästner C, Apel S (2009) Virtual separation of concerns – a second chance for preprocessors. J Object Technol 8(6):59–78

    Article  Google Scholar 

  • Kästner C, Apel S, Batory D (2007) A case study implementing features using AspectJ. In: Proceedings of the international software product line conference. IEEE, pp 223–232

  • Kästner C, Apel S, Kuhlemann M (2008) Granularity in software product lines. In: Proceedings of the international conference on software engineering. ACM, pp 311–320

  • Kästner C, Giarrusso PG, Rendel T, Erdweg S, Ostermann K, Berger T (2011) Variability-aware parsing in the presence of lexical macros and conditional compilation. In: Proceedings of the international conference on object-oriented programming, systems, languages, and applications. ACM, pp 805–824

  • Kiczales G, Lamping J, Mendhekar A, Maeda C, Lopes C, Loingtier JM, Irwin J (1997) Aspect-oriented programming. In: Proceedings of the European conference on object-oriented programming. Springer, pp 220–242

  • Kim M, Notkin D, Grossman D, Wilson Jr. G (2013) Identifying and summarizing systematic code changes via rule inference. IEEE Trans Softw Eng 39 (1):45–62

    Article  Google Scholar 

  • Kuchana P (2004) Software architecture design patterns in java. Auerbach Publications

  • Le D, Walkingshaw E, Erwig M (2011) #ifdef confirmed harmful: promoting understandable software variation. In: Proceedings of the symposium on visual languages and human-centric computing. IEEE, pp 143–150

  • Liebig J, Apel S, Lengauer C, Kästner C, Schulze M (2010) An analysis of the variability in forty preprocessor-based software product lines. In: Proceedings of the international conference on software engineering. ACM, pp 105–114

  • Liebig J, Kästner C, Apel S (2011) Analyzing the discipline of preprocessor annotations in 30 million lines of C code. In: Proceedings of the international conference on aspect-oriented software development. ACM, pp 191–202

  • Lotufo R, She S, Berger T, Czarnecki K, Wąsowski A (2010) Evolution of the Linux kernel variability model. In: Proceedings of the international conference on software product lines: going beyond. Springer, pp 136–150

  • Love R (2010) Linux kernel development, 3rd edn. Addison Wesley

  • Marcus A, Rajlich V, Buchta J, Petrenko M, Sergeyev A (2005) Static techniques for concept location in object-oriented code. In: Proceedings of the international workshop on program comprehension. IEEE, pp 33–42

  • Massa A (2002) Embedded software development with eCos. Prentice Hall

  • Nadi S, Berger T, Kästner C, Czarnecki K (2014) Mining configuration constraints: static analyses and empirical results. In: Proceedings of the international conference on software engineering . ACM, pp 140–151

  • Nadi S, Holt R (2012) Mining kbuild to detect variability anomalies in Linux. In: Proceedings of the European conference on software maintenance and reengineering. IEEE, pp 107–116

  • Nadi S, Holt R (2013) The Linux kernel: a case study of build system variability. J Softw: Evol Process

  • Neill CJ, Laplante PA (2005) Antipatterns: identification, refactoring, and management. CRC Press

  • Neves L, Teixeira L, Sena D, Alves V, Kulezsa U, Borba P (2011) Investigating the safe evolution of software product lines. In: Proceedings of the international conference on generative programming and component engineering. ACM, pp 33–42

  • Passos L, Czarnecki K (2014) A dataset of feature additions and feature removals from the Linux kernel. In: Proceedings of the working conference on mining software repositories. ACM, pp 376– 379

  • Passos L, Czarnecki K, Apel S, Wąsowski A, Kästner C, Guo J (2013) Feature-oriented software evolution. In: Proceedings of the international workshop on variability modelling of software-intensive systems. ACM, pp 17:1–17:8

  • Passos L, Czarnecki K, Wąsowski A (2012) Towards a catalog of variability evolution patterns: the Linux kernel case. In: Proceedings of the international workshop on feature-oriented software development. ACM, pp 62–69

  • Passos L, Guo J, Teixeira L, Czarnecki K, Wąsowski A, Borba P (2013) Coevolution of variability models and related artifacts: a case study from the Linux kernel. In: Proceedings of the international software product line conference. ACM, pp 91–100

  • Pleuss A, Botterweck G, Dhungana D, Polzer A, Kowalewski S (2012) Model-driven support for product line evolution on feature level. J Syst Softw 85(10):2261–2274

    Article  Google Scholar 

  • Rosenmüller M, Apel S, Leich T, Saake G (2009) Tailor-made data management for embedded systems: a case study on Berkeley DB. Data Knowl Eng 68(12):1493–1512

    Article  Google Scholar 

  • Rosenmüller M, Siegmund N, Schirmeier H, Sincero J, Apel S, Leich T, Spinczyk O, Saake G (2008) FAME-DBMS: tailor-made data management solutions for embedded systems. In: Proceedings of the EDBT workshop on software engineering for tailor-made data management. ACM, pp 1–6

  • Runeson P, Host M, Rainer A, Regnell B (2012) Case study research in software engineering: guidelines and examples, 1st edn. Wiley

  • Seidl C, Heidenreich F, Aßmann U (2012) Coevolution of models and feature mapping in software product lines. In: Proceedings of the international software product line conference . ACM, pp 76–85

  • She S, Lotufo R, Berger T, Wȧsowski A, Czarnecki K (2010) The variability model of the Linux kernel. In: Proceedings of the international workshop on variability modelling of software-intensive systems. Universität Duisburg-Essen, pp 45–51

  • She S, Lotufo R, Berger T, Wąsowski A, Czarnecki K (2011) Reverse engineering feature models. In: Proceedings of the international conference on software engineering. ACM, pp 461–470

  • Simmons S, Edwards D, Wilde N, Homan J, Groble M (2006) Industrial tools for the feature location problem: an exploratory study. J Softw Maintenance Evol 18(6):457–474

    Article  Google Scholar 

  • Spencer H, Collyer G (1992) #ifdef Considered harmful, or portability experience with C news. In: Proceedings of the USENIX security symposium. USENIX Association

  • Sun J, Zhang H, Wang H (2005) Formal semantics and verification for feature modeling. In: Proceedings of the international conference on engineering of complex computer systems. IEEE , pp 303–312

  • Tartler R, Sincero J, Dietrich C, Schröder-Preikschat W, Lohmann D (2012) Revealing and repairing configuration inconsistencies in large scale system software. Int J Softw Tools Technol Transfer 14(5):531–551

    Article  Google Scholar 

  • Thüm T, Batory D, Kästner C (2009) Reasoning about edits to feature models. In: Proceedings of the international conference on software engineering. IEEE, pp 254–264

  • Thüm T, Kästner C, Erdweg S, Siegmund N (2011) Abstract features in feature modeling. In: Proceedings of the international software product line conference. IEEE, pp 191–200

  • Valente MT, Borges V, Passos L (2012) A semi-automatic approach for extracting software product lines. IEEE Trans Softw Eng 38(4):737–754

    Article  Google Scholar 

  • Venkateswaran S (2008) Essential Linux device drivers, 1st edn. Prentice Hall

  • Wilde N, Scully MC (1995) Software reconnaissance: mapping program features to code. J Softw Maint 7(1):49–62

    Article  Google Scholar 

  • Wright C, Cowan C, Smalley S, Morris J, Kroah-Hartman G (2002) Linux security modules: general security support for the Linux kernel. In: Proceedings of the USENIX security symposium. USENIX Association, pp 17–31

Download references

Author information

Authors and Affiliations

Authors

Corresponding author

Correspondence to Leonardo Passos.

Additional information

Communicated by: Ebrahim Bagheri, David Benavides, Per Runeson and Klaus Schmid

This work was partially funded by CAPES (BEX 0459-10-0), NECSIS, CNPq (141909/2010-2 and 245311/2012-2), FACEPE (APQ-0570-1.03/14), the German Research Foundation (AP 206/4, AP 206/5, and AP 206/6), ARTEMIS JU (295397 VARIES), and the Danish Agency for Science, Technology and Innovation.

Rights and permissions

Reprints and permissions

About this article

Check for updates. Verify currency and authenticity via CrossMark

Cite this article

Passos, L., Teixeira, L., Dintzner, N. et al. Coevolution of variability models and related software artifacts. Empir Software Eng 21, 1744–1793 (2016). https://doi.org/10.1007/s10664-015-9364-x

Download citation

  • Published:

  • Issue Date:

  • DOI: https://doi.org/10.1007/s10664-015-9364-x

Keywords

Navigation