Backward compatibility of software interfaces: Steps towards automatic verification
- 180 Downloads
This paper discusses problems of ensuring backward compatibility between new and old versions of software components (e.g., libraries). The Linux environment is considered as the main example. Breach of the compatibility in a new version of a software component may result in crashing or incorrect behavior (at the binary level) or inability to build (at the source level) applications targeted at a previous version of the component when the applications are used with the new version of the component. The paper describes typical issues that cause backward compatibility problems at the binary level and presents a new method for automatic detection of such issues in the course of the component development, with the main attention being focused on changes in structure of interfaces. The C and C++ languages are used to exemplify the approach, although it can be applied to other languages, such as Java or C#, as well. Unlike the existing means, the suggested method can verify a broad spectrum of backward compatibility problems by comparing function signatures and type definitions obtained from the component’s header files in addition to analyzing symbols in the component’s binaries. This paper also describes an automated checker tool that implements the suggested method together with some results of its practical usage. In conclusion, further improvements of automatic means for backward compatibility verification are discussed.
KeywordsSoftware Component Software Interface System Library Head File Semantic Change
Unable to display preview. Download preview PDF.
- 1.Libstdc++ ABI break, http://gcc.gnu.org/ml/lib-stdc++/2007-10/msg00041.html. Link checked on 28.11.2011.
- 2.ABI breach in Freetype2 2.3.8, http://firstname.lastname@example.org/msg03192.html. Link checked on 28.11.2011.
- 3.ABI breach in libxml2-2.7.8, http://email@example.com/msg30810.html. Link checked on 28.11.2011.
- 4.Kuliamin, V., Petrenko, A., Kossatchev, A., and Bourdonov, I., UniTesK: Model Based Testing in Industrial Practice, Proc. of 1-st European Conference on Model-Driven Software Engineering, Nurnberg, Germany, December 2003, pp. 55–63.Google Scholar
- 5.Kuliamin, V., Model Based Testing of Large-scale Software: How Can Simple Models Help to Test Complex System, Proc. of 1st International Symposium on Leveraging Applications of Formal Methods, Cyprus, October 2004, pp. 311–316.Google Scholar
- 6.Kuliamin, V., Petrenko, A., and Pakoulin, N., Practical Approach to Specification and Conformance Testing of Distributed Network Applications, Service Availability, Malek, M., Nett, E., and Suri, N., Eds., Lecture Notes in Computer Science, 2005, vol. 3694, pp. 68–83.Google Scholar
- 7.Grinevich, A., Khoroshilov, A., Kuliamin, V., Markovtsev, D., Petrenko, A., and Rubanov, V., Formal Methods in Industrial Software Standards Enforcement, Perspectives of Systems Informatics: 6th International Andrei Ershov Memorial Conference, PSI 2006, Novosibirsk, Russia, 2006. Lecture Notes in Computer Science, 2007, vol. 4378, pp. 456–466. ISBN 978-3-540-70880-3.Google Scholar
- 9.Khoroshilov, A. Rubanov, V., and Shatokhin, E., Automated Formal Testing of C API Using T2C Framework, in Leveraging Applications of Formal Methods, Verification and Validation: Proceedings of 3rd Int. Symp., ISoLA 2008, Porto Sani, Greece, 2008.Google Scholar
- 10.Drepper, U., How to Write Shared Libraries. December 2010. http://www.akkadia.org/drepper/dsohowto.pdf. Link checked on 28.11.2011.
- 11.KDE TechBase. Policies/Binary Compatibility Issues With C++. http://techbase.kde.org/Policies/Binary-Compatibility-Issues-With-C++. Link checked on 28.11.2011.
- 12.Wheeler, D.A., Program Library HOWTO. V. 1.36, 15 May 2010. http://www.dwheeler.com/program-library/Program-Library-HOWTO.pdf. Link checked on 28.11.2011.
- 13.System V Application Binary Interface, Third Edition, Intel386 Architecture Processor Supplement ISBN 0-13-104670-5 UNIX Press, PTR Prentice Hall, 113 Sylvan Avenue, Englewood Cliffs, NJ 07632.Google Scholar
- 14.Matz, M., Hubicka, J., Jaeger, A., and Mitchell, M. (2010-01-13), System V Application Binary Interface AMD64 Architecture Processor Supplement. 0.99.4.Google Scholar
- 15.Zucker, S. and Kari Karhi, System V Application Binary Interface-PowerPc Processor Supplement, Mountain View, CA: SunSoft, 1995.Google Scholar
- 16.Itanium C++ ABI, http://www.codesourcery.com/public/cxx-abi/abi.html. Link checked on 28.11.2011.
- 17.Intel Itanium Processor-specific Application Binary Interface, May 2001, Document Number: 245370-003.Google Scholar
- 18.LINUX for S/390 ELF Application Binary Interface Supplement, IBM Document Number LNUX-1107-00 (2001).Google Scholar
- 19.Application Binary Interface (ABI) for the ARM Architecture, Document number: ARM IHI 0036B, current through ABI release 2.08, Date of Issue: 10th October 2008, reissued: 28 October 2009.Google Scholar
- 20.dpkg-gensymbols, http://man.he.net/man1/dpkg-gensymbols. Link checked on 28.11.2011.
- 21.chkshlib, http://osr507doc.sco.com/en/man/html.CP/chkshlib.CP.html. Link checked on 28.11.2011.
- 22.cmpdylib, http://developer.apple.com/documentation/Darwin/Reference/ManPages/man1/cmpdylib.1.html. Link checked on 28.11.2011.
- 23.cmpshlib, http://www.myths.com/pub/doc/oh-really/unix-bookshelf-3.0/mac/ch07-01.htm. Link checked on 28.11.2011.
- 24.Henkel, J. and Diwan, A. Catchup!: Capturing and Replaying Refactorings to Support api Evolution, ICSE’05: Proc. of the 27th Int. Conference on Software Engineering, New York, 2005, pp. 274–283.Google Scholar
- 25.Savga, I. and Rudolf, M., Refactoring-based Support for Binary Compatibility in Evolving Frameworks, GPCE’07: Proc. of Generative Programming and Component Engineering, 2007, pp. 175–184.Google Scholar
- 26.Savga, I., Rudolf, M., Sliwerski, J., Lehmann, J., and Wendel, H., API Changes — How FarWould You Go?, Proc. of 11th European Conference on Software Maintenance and Reengineering (CSMR’07), pp. 329–330.Google Scholar
- 27.Dig, D., Negara, S., Johnson, R., and Mohindra, V., ReBA: Refactoring-aware Binary Adaptation of Evolving Libraries, Proc. of the 30th Int. Conf. on Software Engineering, 2008, pp. 441–450.Google Scholar
- 28.readelf, http://linux.about.com/library/cmd/blcmdl1-readelf.htm. Link checked on 28.11.2011.
- 29.Options for Debugging Your Program or GCC, http://gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html. Link checked on 28.11.2011.
- 30.LSB Navigator, http://dev.linuxfoundation.org/navigator/browse/app-stats.phpLink checked on 15.02.2011.
- 31.Linux Standard Base, http://www.linuxbase.org. Link checked on 15.02.2011.
- 32.Linux Upstream Tracker Demo, http://upstreamtracker.org/. Link checked on 28.11.2011.
- 33.apt Home Page, http://wiki.debian.org/Apt. Link checked on 28.11.2011.
- 34.rpm5 Home Page, http://rpm5.org/.Link checked on 28.11.2011.
- 35.ABI Compliance Checker Home Page, http://ispras.linuxbase.org/index.php/ABI-Compliance-Checker. Link checked on 28.11.2011.
- 36.Ponomarenko, A. and Rubanov, V., Header-Driven Generation of Sanity API Tests for Shared Libraries, Proc. of the Sixth Int. Conf. on Software Engineering (CEE-SECR 2010), Moscow, 2010, pp. 92–95 (in Russian).Google Scholar
- 37.Java API Compliance Checker Home Page, http://ispras.linuxbase.org/index.php/Java-API-Compliance-Checker.Link checked on 28.11.2011.