Abstract
In a modern operating system (OS), device drivers can make up over 70% of the source code. Driver code is also heavily dependent on the rest of the OS, for functions and data structures defined in the kernel and driver support libraries. These properties pose a significant problem for OS evolution, as any changes in the interfaces exported by the kernel and driver support libraries can trigger a large number of adjustments in dependent drivers. These adjustments, which we refer to as collateral evolutions, may be complex, entailing substantial code reorganizations. As to our knowledge there exist no tools to help in this process, collateral evolution is thus time consuming and error prone.In this paper, we present a qualitative and quantitative assessment of collateral evolution in Linux device driver code. We provide a taxonomy of evolutions and collateral evolutions, and use an automated patch-analysis tool that we have developed to measure the number of evolutions and collateral evolutions that affect device drivers between Linux versions 2.2 and 2.6. In particular, we find that from one version of Linux to the next, collateral evolutions can account for up to 35% of the lines modified in such code.
References
- J. Appavoo, M. Auslander, M. Burtico, D. D. Silva, O. Krieger, M. Mergen, M. Ostrowski, B. Rosenburg, R. W. Wisniewski, and J. Xenidis. K42: an open-source Linux-compatible scalable operating system kernel. IBM Systems Journal, 44(2):427--440, 2005.]] Google Scholar
Digital Library
- T. Ball, E. Bounimova, B. Cook, V. Levin, J. Lichtenberg, C. McGarvey, B. Ondrusek, S. K. Rajamani, and A. Ustuner. Thorough static analysis of device drivers. In The first ACM SIGOPS EuroSys conference (EuroSys 2006), Leuven, Belgium, Apr. 2006. To appear.]] Google Scholar
Digital Library
- A. Chou, J. Yang, B. Chelf, S. Hallem, and D. Engler. An empirical study of operating systems errors. In SOSP'01 {21}, pages 73--88.]] Google Scholar
Digital Library
- A. C. de Melo, D. Jones, and J. Garzik, 2001. http://umeet.uninet.edu/umeet2001/talk/15--12--2001/arnaldo-talk.html.]]Google Scholar
- D. R. Engler, B. Chelf, A. Chou, and S. Hallem. Checking system rules using system-specific, programmer-written compiler extensions. In Proceedings of the Fourth USENIX Symposium on Operating Systems Design and Implementation (OSDI), pages 1--16, San Diego, CA, Oct. 2000.]] Google Scholar
Digital Library
- D. R. Engler, D. Y. Chen, A. Chou, and B. Chelf. Bugs as deviant behavior: A general approach to inferring errors in systems code. In SOSP'01 {21}, pages 57--72.]] Google Scholar
Digital Library
- J.-P. Fassino, J.-B. Stefani, J. Lawall, and G. Muller. THINK: A software framework for component-based operating system kernels. In 2000 USENIX Annual Technical Conference, pages 73--86, Monterey, CA, June 2002.]] Google Scholar
Digital Library
- B. Ford, G. Back, G. Benson, J. Lepreau, A. Lin, and O. Shivers. The Flux OSKit: A substrate for kernel and language research. In Proceedings of the 16th ACM Symposium on Operating Systems Principles (SOSP'97), pages 38--51, Saint-Malo, France, Oct. 1997.]] Google Scholar
Digital Library
- J. S. Foster, T. Terauchi, and A. Aiken. Flow-sensitive type qualifiers. In Proceedings of the 2002 ACM SIGPLAN conference on Programming Language Design and Implementation, pages 38--51, Berlin, Germany, June 2002.]] Google Scholar
Digital Library
- M. Fowler, K. Beck, J. Brant, W. Opdyke, and D. Roberts. Refactoring: Improving the Design of Existing Code. Addison-Wesley Professional, 1999.]] Google Scholar
Digital Library
- M. W. Godfrey and Q. Tu. Evolution in open source software: A case study. In International Conference on Software Maintenance (ICSM'00), pages 131--142, San Jose, CA, 2000. IEEE.]] Google Scholar
Digital Library
- A. E. Hassan. Mining Software Repositories to Assist Developers and Support Managers. PhD thesis, School of Computer Science, Faculty of Mathematics, University of Waterloo, Ontario, Canada, 2004.]] Google Scholar
Digital Library
- C. Hellwig, 2003. http://www.cs.helsinki.fi/linux/linux- kernel/2003--20/1120.html.]]Google Scholar
- P. Koellner, Feb. 2002. http://www.uwsg.iu.edu/hypermail/linux/kernel/0202.2/0106.html.]]Google Scholar
- J. LeVasseur, V. Uhlig, J. Stoess, and S. Götz. Unmodified device driver reuse and improved system dependability via virtual machines. In OSDI'04 {19}, pages 17--30.]] Google Scholar
Digital Library
- Z. Li, S. Lu, S. Myagmar, and Y. Zhou. CP-Miner: A tool for finding copy-paste and related bugs in operating system code. In OSDI'04 {19}, pages 289--302.]] Google Scholar
Digital Library
- LWN. API changes in the 2.6 kernel series, Oct. 2005. http://lwn.net/Articles/2.6-kernel-api/.]]Google Scholar
- D. S. Miller, Feb. 2002. http://www.ussg.iu.edu/hypermail/linux/kernel/0202.1/0855.html.]]Google Scholar
- Proceedings of the Sixth USENIX Symposium on Operating Systems Design and Implementation (OSDI), San Fransisco, CA, Dec. 2004.]]Google Scholar
- A. Rubini and J. Corbet. Linux Device Drivers, 2nd Edition. O'Reilly, June 2001.]] Google Scholar
Digital Library
- Proceedings of the 18th ACM Symposium on Operating System Principles, Banff, Canada, Oct. 2001.]]Google Scholar
- M. M. Swift, M. Annamalai, B. N. Bershad, and H. M. Levy. Recovering device drivers. In OSDI'04 {19}, pages 1--16.]] Google Scholar
Digital Library
- M. M. Swift, B. N. Bershad, and H. M. Levy. Improving the reliability of commodity operating systems. ACM Transactions on Computer Systems, 23(1):77--110, Feb. 2005.]] Google Scholar
Digital Library
- D. Wambolt, Dec. 2001. http://seclists.org/lists/linux-kernel/2001/Dec/2027.html.]]Google Scholar
- J. Weber, Feb. 2002. http://www.ussg.iu.edu/hypermail/linux/kernel/0202.1/0697.html.]]Google Scholar
Index Terms
Understanding collateral evolution in Linux device drivers





Comments