Successful Reuse of Software Components: A Report from the Open Source Perspective

  • Andrea Capiluppi
  • Cornelia Boldyreff
  • Klaas-Jan Stol
Part of the IFIP Advances in Information and Communication Technology book series (IFIPAICT, volume 365)


A promising way of software reuse is Component-Based Software Development (CBSD). There is an increasing number of OSS products available that can be freely used in product development. However, OSS communities themselves have not yet taken full advantage of the “reuse mechanism”. Many OSS projects duplicate effort and code, even when sharing the same application domain and topic. One successful counter-example is the FFMpeg multimedia project, since several of its components are widely and consistently reused into other OSS projects. This paper documents the history of the libavcodec library of components from the FFMpeg project, which at present is reused in more than 140 OSS projects. Most of the recipients use it as a black-box component, although a number of OSS projects keep a copy of it in their repositories, and modify it as such. In both cases, we argue that libavcodec is a successful example of reusable OSS library of components.


Software reuse OSS components component-based software development 


  1. 1.
    Abi-Antoun, M., Aldrich, J., Coelho, W.: A case study in re-engineering to enforce architectural control flow and data sharing. Journal of Systems and Software 80(2), 240–264 (2007)CrossRefGoogle Scholar
  2. 2.
    Arief, B., Gacek, C., Lawrie, T.: Software architectures and open source software – Where can research leverage the most? In: Proceedings of Making Sense of the Bazaar: 1st Workshop on Open Source Software Engineering, Toronto, Canada (May 2001)Google Scholar
  3. 3.
    Arisholm, E., Briand, L.C., Foyen, A.: Dynamic coupling measurement for object-oriented software. IEEE Transactions on Software Engineering 30(8), 491–506 (2004)CrossRefGoogle Scholar
  4. 4.
    Avgeriou, P., Guelfi, N.: Resolving architectural mismatches of COTS through architectural reconciliation. In: Franch, X., Port, D. (eds.) ICCBSS 2005. LNCS, vol. 3412, pp. 248–257. Springer, Heidelberg (2005)CrossRefGoogle Scholar
  5. 5.
    Basili, V., Rombach, H.D.: Support for comprehensive reuse. IEEE Software Engineering Journal 6(5), 303–316 (1991)Google Scholar
  6. 6.
    Bowman, I.T., Holt, R.C., Brewster, N.V.: Linux as a case study: its extracted software architecture. In: Proceedings of the 21st International Conference on Software engineering (ICSE), pp. 555–563. IEEE Computer Society Press, Los Alamitos (1999)CrossRefGoogle Scholar
  7. 7.
    Capiluppi, A., Boldyreff, C.: Identifying and improving reusability based on coupling patterns. In: Mei, H. (ed.) ICSR 2008. LNCS, vol. 5030, pp. 282–293. Springer, Heidelberg (2008)CrossRefGoogle Scholar
  8. 8.
    Capiluppi, A., Knowles, T.: Software engineering in practice: Design and architectures of FLOSS systems. In: Boldyreff, C., Crowston, K., Lundell, B., Wasserman, A.I. (eds.) OSS 2009. IFIP AICT, vol. 299, pp. 34–46. Springer, Heidelberg (2009)CrossRefGoogle Scholar
  9. 9.
    Capiluppi, A., Morisio, M., Ramil, J.F.: The evolution of source folder structure in actively evolved open source systems. In: Proceedings of the 10th International Symposium on Software Metrics (METRICS), pp. 2–13. IEEE Computer Society, Washington, DC, USA (2004)CrossRefGoogle Scholar
  10. 10.
    de Jonge, M.: Source tree composition. In: Gacek, C. (ed.) ICSR 2002. LNCS, vol. 2319, pp. 17–32. Springer, Heidelberg (2002)CrossRefGoogle Scholar
  11. 11.
    de Jonge, M.: Build-level components. IEEE Transactions on Software Engineering 31(7), 588–600 (2005)CrossRefGoogle Scholar
  12. 12.
    Dueñas, J.C., de Oliveira, W.L., de la Puente, J.A.: Architecture recovery for software evolution. In: Proceedings of the 2nd Euromicro Conference On Software Maintenance And Reengineering (CSMR), pp. 113–120 (1998)Google Scholar
  13. 13.
    Eick, S.G., Graves, T.L., Karr, A.F., Marron, J.S., Mockus, A.: Does code decay? assessing the evidence from change management data. IEEE Transactions on Software Engineering 27, 1–12 (2001)CrossRefGoogle Scholar
  14. 14.
    Fenton, N.E., Pfleeger, S.L.: Software metrics: a practical and rigorous approach. Thomson (1996)Google Scholar
  15. 15.
    German, D.M., Gonzalez-Barahona, J.M., Robles, G.: A model to understand the building and running inter-dependencies of software. In: Proceedings of the 14th Working Conference on Reverse Engineering (WCRE), pp. 140–149. IEEE Computer Society, Washington, DC, USA (2007)CrossRefGoogle Scholar
  16. 16.
    German, D.M., Hassan, A.E.: License integration patterns: Addressing license mismatches in component-based development. In: Proceedings of the 2009 IEEE 31st International Conference on Software Engineering (ICSE), pp. 188–198. IEEE Computer Society, Washington, DC, USA (2009)CrossRefGoogle Scholar
  17. 17.
    Godfrey, M., Eric, H.: Secrets from the monster: Extracting mozilla’s software architecture. In: Proceedings of the 2nd Symposium on Constructing Software Engineering Tools, CoSET (2000)Google Scholar
  18. 18.
    Hauge, Ø., Østerlie, T., Sørensen, C.-F., Gerea, M.: An Empirical Study on Selection of Open Source Software - Preliminary Results. In: Capiluppi, A., Robles, G. (eds.) Proceedings of the 2009 ICSE Workshop on Emerging Trends in Free/Libre/Open Source Software Research and Development (FLOSS), Vancouver, Canada, May 18, pp. 42–47. IEEE Computer Society Press, Los Alamitos (2009)CrossRefGoogle Scholar
  19. 19.
    Hofmeister, C., Nord, R., Soni, D.: Applied Software Architecture. Addison-Wesley, Reading (2000)Google Scholar
  20. 20.
    Krikhaar, R., Postma, A., Sellink, A., Stroucken, M., Verhoef, C.: A two-phase process for software architecture improvement. In: Proceedings of the IEEE International Conference on Software Maintenance (ICSM), p. 371. IEEE Computer Society, Washington, DC, USA (1999)Google Scholar
  21. 21.
    Kruchten, P.: The 4+1 view model of architecture. IEEE Software 12(5), 88–93 (1995)Google Scholar
  22. 22.
    Lang, B., Abramatic, J.-F., González-Barahona, J.M., Gómez, P., Pedersen, M.K.: Free and Proprietary Software in COTS-Based Software Development. In: Franch, X., Port, D. (eds.) ICCBSS 2005. LNCS, vol. 3412, p. 2. Springer, Heidelberg (2005)CrossRefGoogle Scholar
  23. 23.
    Lehman, M.M.: Programs, cities, students, limits to growth? Programming Methodology, 42–62 (1978); Inaugural LectureGoogle Scholar
  24. 24.
    Lehman, M.M.: Programs, life cycles, and laws of software evolution. Proc. IEEE 68(9), 1060–1076 (1980)CrossRefGoogle Scholar
  25. 25.
    Li, J., Conradi, R., Bunse, C., Torchiano, M., Slyngstad, O.P.N., Morisio, M.: Development with off-the-shelf components: 10 facts. IEEE Software 26(2), 80–87 (2009)CrossRefGoogle Scholar
  26. 26.
    Li, W., Henry, S.: Object-oriented metrics that predict maintainability. J. Syst. Softw. 23(2), 111–122 (1993)CrossRefGoogle Scholar
  27. 27.
    Majchrowski, A., Deprez, J.-C.: An operational approach for selecting open source components in a software development project. In: O’Connor, R., Baddoo, N., Smolander, K., Messnarz, R. (eds.) EuroSPI. CCIS, vol. 16, pp. 176–188. Springer, Heidelberg (2008)Google Scholar
  28. 28.
    Mockus, A.: Large-scale code reuse in open source software. In: Proceedings of the First International Workshop on Emerging Trends in FLOSS Research and Development (FLOSS), p. 7. IEEE Computer Society, Washington, DC, USA (2007)CrossRefGoogle Scholar
  29. 29.
    Orsila, H., Geldenhuys, J., Ruokonen, A., Hammouda, I.: Update propagation practices in highly reusable open source components. In: Russo, B., Damiani, E., Hissam, S.A., Lundell, B., Succi, G. (eds.) Open Source Development, Communities and Quality. IFIP, vol. 275, pp. 159–170. Springer, Boston (2008)CrossRefGoogle Scholar
  30. 30.
    Parnas, D.L.: On the criteria to be used in decomposing systems into modules. Communications of the ACM 15(12), 1053–1058 (1972)CrossRefGoogle Scholar
  31. 31.
    Sametinger, J.: Software engineering with reusable components. Springer, New York (1997)MATHGoogle Scholar
  32. 32.
    Sartipi, K., Kontogiannis, K., Mavaddat, F.: A pattern matching framework for software architecture recovery and restructuring. In: Proceedings of the 8th International Workshop on Program Comprehension (IWPC), pp. 37–47 (2000)Google Scholar
  33. 33.
    Schmerl, B., Aldrich, J., Garlan, D., Kazman, R., Yan, H.: Discovering architectures from running systems. IEEE Transactions on Software Engineering 32(7), 454–466 (2006)CrossRefGoogle Scholar
  34. 34.
    Senyard, A., Michlmayr, M.: How to have a successful free software project. In: Proceedings of the 11th Asia-Pacific Software Engineering Conference, pp. 84–91. IEEE Computer Society, Busan (2004)CrossRefGoogle Scholar
  35. 35.
    Sommerville, I.: Software Engineering, 7th edn. International Computer Science Series. Addison Wesley, Reading (2004)Google Scholar
  36. 36.
    Torchiano, M., Morisio, M.: Overlooked aspects of cots-based development. IEEE Software 21(2), 88–93 (2004)CrossRefGoogle Scholar
  37. 37.
    Tran, J.B., Godfrey, M.W., Lee, E.H.S., Holt, R.C.: Architectural repair of open source software. In: Proceedings of the 8th International Workshop on Program Comprehension (IWPC), pp. 48–59. IEEE Computer Society, Washington, DC, USA (2000)CrossRefGoogle Scholar
  38. 38.
    Tu, Q., Godfrey, W.M.: The build-time software architecture view. In: Proceedings of 2001 International Conference on Software Maintenance, pp. 65–74. IEEE, Florence (2001)Google Scholar

Copyright information

© IFIP International Federation for Information Processing 2011

Authors and Affiliations

  • Andrea Capiluppi
    • 1
  • Cornelia Boldyreff
    • 1
  • Klaas-Jan Stol
    • 2
  1. 1.University of East LondonUnited Kingdom
  2. 2.Lero—the Irish Software Engineering Research CentreUniversity of LimerickIreland

Personalised recommendations