Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
skip to main content
10.1145/2884781.2884799acmconferencesArticle/Chapter ViewAbstractPublication PagesicseConference Proceedingsconference-collections
research-article

The evolution of C programming practices: a study of the Unix operating system 1973--2015

Published: 14 May 2016 Publication History

Abstract

Tracking long-term progress in engineering and applied science allows us to take stock of things we have achieved, appreciate the factors that led to them, and set realistic goals for where we want to go. We formulate seven hypotheses associated with the long term evolution of C programming in the Unix operating system, and examine them by extracting, aggregating, and synthesising metrics from 66 snapshots obtained from a synthetic software configuration management repository covering a period of four decades. We found that over the years developers of the Unix operating system appear to have evolved their coding style in tandem with advancements in hardware technology, promoted modularity to tame rising complexity, adopted valuable new language features, allowed compilers to allocate registers on their behalf, and reached broad agreement regarding code formatting. The progress we have observed appears to be slowing or even reversing prompting the need for new sources of innovation to be discovered and followed.

References

[1]
S. Abebe, S. Haiduc, A. Marcus, P. Tonella, and G. Antoniol. Analyzing the evolution of the source code vocabulary. In CSMR '09: 13th European Conference on Software Maintenance and Reengineering, pages 189--198, March 2009.
[2]
American National Standard for Information Systems --- programming language --- C: ANSI X3.159--1989, Dec. 1989. (Also ISO/IEC 9899:1990).
[3]
O. Arafat and D. Riehle. The commenting practice of open source. In OOPSLA '09: 24th ACM SIGPLAN Conference Companion on Object Oriented Programming Systems Languages and Applications, pages 857--864, New York, NY, USA, 2009. ACM.
[4]
K. Arnold. Programmers are people, too. Queue, 3(5):54--59, June 2005.
[5]
A. Bacchelli and C. Bird. Expectations, outcomes, and challenges of modern code review. In ICSE '13: 35th International Conference on Software Engineering, pages 712--721, Piscataway, NJ, USA, 2013. IEEE Press.
[6]
K. H. Bennett and V. T. Rajlich. Software maintenance and evolution: A roadmap. In Conference on The Future of Software Engineering, pages 73--87, New York, NY, USA, 2000. ACM.
[7]
R. Buse and W. Weimer. Learning a metric for code readability. IEEE Transactions on Software Engineering, 36(4):546--558, July 2010.
[8]
S. Butler, M. Wermelinger, Y. Yu, and H. Sharp. Exploring the influence of identifier names on code quality: An empirical study. In CSMR '10: 14th European Conference on Software Maintenance and Reengineering, pages 156--165, March 2010.
[9]
L. W. Cannon, R. A. Elliott, L. W. Kirchhoff, J. H. Miller, J. M. Milner, R. W. Mitze, E. P. Schan, N. O. Whittington, H. Spencer, D. Keppel, and M. Brader. Recommended C style and coding standards. Available online http://sunland.gsfc.nasa.gov/info/cstyle.html (January 2006). Updated version of the Indian Hill C Style and Coding Standards paper.
[10]
A. Capiluppi. Models for the evolution of OS projects. In ICSM '03: International Conference on Software Maintenance, pages 65--74, 2003.
[11]
A. Capiluppi, P. Lago, and M. Morisio. Characteristics of open source projects. In 7th European Conference on Software Maintenance and Reengineering, pages 317--327, March 2003.
[12]
G. J. Chaitin. Register allocation & spilling via graph coloring. SIGPLAN Notices, 17(6):98--101, June 1982.
[13]
E. W. Dijkstra. Go to statement considered harmful. Communications of the ACM, 11(3):147--148, Mar. 1968.
[14]
S. G. Eick, T. L. Graves, A. F. Karr, J. S. Marron, and A. Mockus. Does code decay? Assessing the evidence from change management data. IEEE Transactions on Software Engineering, 27(1):1--12, Jan. 2001.
[15]
M. D. Ernst, G. J. Badros, and D. Notkin. An empirical analysis of C preprocessor use. IEEE Transactions on Software Engineering, 28(12):1146--1170, Dec. 2002.
[16]
B. Fluri, M. Wursch, and H. Gall. Do code and comments co-evolve? On the relation between source code and comment changes. In WCRE 2007: 14th Working Conference on Reverse Engineering, pages 70--79, Oct 2007.
[17]
The FreeBSD Project. Style---Kernel Source File Style Guide, Dec. 1995. FreeBSD Kernel Developer's Manual: style(9). Available online http://www.freebsd.org/docs.html (January 2006).
[18]
P. Gazzillo and R. Grimm. SuperC: Parsing all of C by taming the preprocessor. In PLDI '12: Programming Language Design and Implementation, pages 323--334, 2012.
[19]
M. Godfrey and Q. Tu. Evolution in open source software: A case study. In CSMR '00: International Conference on Software Maintenance, pages 131--142, 2000.
[20]
G. Gousios and D. Spinellis. Conducting quantitative software engineering studies with Alitheia Core. Empirical Software Engineering, 19(4):885--925, Aug. 2014.
[21]
I. Herraiz, D. Rodriguez, G. Robles, and J. M. González-Barahona. The evolution of the laws of software evolution: A discussion based on a systematic literature review. ACM Computing Surveys, 46(2), Nov. 2013.
[22]
G. Holzmann. The power of 10: rules for developing safety-critical code. Computer, 39(6):95--99, June 2006.
[23]
International Organization for Standardization. Programming Languages --- C. ISO, Geneva, Switzerland, 1999. ISO/IEC 9899:1999.
[24]
Z. M. Jiang and A. E. Hassan. Examining the evolution of code comments in PostgreSQL. In MSR '06: 2006 International Workshop on Mining Software Repositories, pages 179--180, New York, NY, USA, 2006. ACM.
[25]
S. H. Kan. Metrics and Models in Software Quality Engineering. Addison-Wesley, Boston, MA, second edition, 2002.
[26]
B. W. Kernighan and P. J. Plauger. The Elements of Programming Style. McGraw-Hill, New York, second edition, 1978.
[27]
M. Lehman. On understanding laws, evolution, and conservation in the large-program life cycle. Journal of Systems and Software, 1:213--221, 1979.
[28]
M. M. Lehman and L. A. Belady. Program Evolution: Processes of Software Change. Academic Press, 1985.
[29]
M. M. Lehman and J. F. Ramil. Rules and tools for software evolution planning and management. Annals of Software Engineering, 11(1):15--44, 2001.
[30]
M. M. Lehman, J. F. Ramil, P. D. Wernick, D. E. Perry, and W. M. Turski. Metrics and laws of software evolution --- the nineties view. In METRICS '97: 4th International Symposium on Software Metrics, pages 20--32, Washington, DC, USA, 1997. IEEE Computer Society.
[31]
F. Lehner. Software life cycle management based on a phase distinction method. Microprocessing and Microprogramming, 32(1OCo5):603--608, 1991. Euromicro symposium on microprocessing and microprogramming.
[32]
P. M. Leonardi. When flexible routines meet flexible technologies: Affordance, constraint, and the imbrication of human and material agencies. MIS Quarterly, 35(1):147--168, Mar. 2011.
[33]
J. Liebig, C. Kästner, and S. Apel. Analyzing the discipline of preprocessor annotations in 30 million lines of C code. In AOSD '11: 10th International Conference on Aspect-Oriented Software Development, pages 191--202, 2011.
[34]
P. E. Livadas and D. T. Small. Understanding code containing preprocessor constructs. In IEEE Third Workshop on Program Comprehension, pages 89--97, Nov. 1994.
[35]
C. Mack. Fifty years of Moore's law. IEEE Transactions on Semiconductor Manufacturing, 24(2):202--207, May 2011.
[36]
S. C. McConnell. Code Complete: A Practical Handbook of Software Construction. Microsoft Press, Redmond, WA, second edition, 2004.
[37]
R. J. Miara, J. A. Musselman, J. A. Navarro, and B. Shneiderman. Program indentation and comprehensibility. Communications of the ACM, 26(11):861--867, Nov. 1983.
[38]
T. Misfeldt, G. Bumgardner, and A. Gray. The Elements of C++ Style. Cambridge University Press, Cambridge, 2004.
[39]
A. Mockus. Amassing and indexing a large sample of version control systems: Towards the census of public source code history. In MSR '09: 6th IEEE International Working Conference on Mining Software Repositories, pages 11--20, Washington, DC, USA, 2009. IEEE Computer Society.
[40]
D. L. Parnas. Software aging. In ICSE '94: 16th International Conference on Software Engineering, pages 279--287, Washington, DC, May 1994. IEEE Computer Society.
[41]
C. Parnin, C. Bird, and E. Murphy-Hill. Java generics adoption: How new features are introduced, championed, or ignored. In MSR '11: 8th Working Conference on Mining Software Repositories, pages 3--12, New York, NY, USA, 2011. ACM.
[42]
D. Posnett, A. Hindle, and P. Devanbu. A simpler model of software readability. In MSR '11: 8th Working Conference on Mining Software Repositories, pages 73--82, New York, NY, USA, 2011. ACM.
[43]
E. S. Raymond. The Art of Unix Programming. Addison-Wesley, 2003.
[44]
D. M. Ritchie. noalias comments to X3J11. Usenet Newsgroup comp.lang.c, Mar. 1988. Message-ID: [email protected]. Available online https://groups.google.com/forum/message/raw?msg=comp.lang.c/K0Cz2s9il3E/YDyo_xaRG5kJ.
[45]
D. M. Ritchie. The development of the C language. ACM SIGPLAN Notices, 28(3):201--208, Mar. 1993. Preprints of the History of Programming Languages Conference (HOPL-II).
[46]
M. J. Rochkind. The source code control system. IEEE Transactions on Software Engineering, SE-1(4):255--265, 1975.
[47]
M. Smit, B. Gergel, H. Hoover, and E. Stroulia. Code convention adherence in evolving software. In ICSM '11: 27th IEEE International Conference on Software Maintenance, pages 504--507, Sept 2011.
[48]
H. Spencer and G. Collyer. #ifdef considered harmful or portability experience with C news. In R. Adams, editor, Proceedings of the Summer 1992 USENIX Conference, pages 185--198, Berkeley, CA, June 1992. USENIX Association.
[49]
D. Spinellis. Global analysis and transformations in preprocessed languages. IEEE Transactions on Software Engineering, 29(11):1019--1030, Nov. 2003.
[50]
D. Spinellis. Code Quality: The Open Source Perspective. Addison-Wesley, Boston, MA, 2006.
[51]
D. Spinellis. A tale of four kernels. In W. Schäfer, M. B. Dwyer, and V. Gruhn, editors, ICSE '08: 30th International Conference on Software Engineering, pages 381--390, New York, May 2008. Association for Computing Machinery.
[52]
D. Spinellis. A repository with 44 years of Unix evolution. In MSR '15: 12th Working Conference on Mining Software Repositories, pages 13--16. IEEE, 2015. Best Data Showcase Award.
[53]
D. Spinellis. Tools and techniques for analyzing product and process data. In T. Menzies, C. Bird, and T. Zimmermann, editors, The Art and Science of Analyzing Software Data, pages 161--212. Morgan-Kaufmann, 2015.
[54]
D. Spinellis, P. Louridas, and M. Kechagia. An exploratory study on the evolution of C programming in the Unix operating system. In Q. Wang and G. Ruhe, editors, ESEM '15: 9th International Symposium on Empirical Software Engineering and Measurement, pages 54--57. IEEE, Oct. 2015.
[55]
R. Stallman et al. GNU coding standards. Available online http://www.gnu.org/prep/standards/ (January 2006), Dec. 2005.
[56]
Sun Microsystems, Inc. Java code conventions. Available online http://java.sun.com/docs/codeconv/ (January 2006), Sept. 1997.
[57]
O. Tange. GNU parallel: The command-line power tool. ;login:, 36(1):42--47, Feb. 2011.
[58]
A. Terceiro, M. Mendonça, C. Chavez, and D. Cruzes. Understanding structural complexity evolution: A quantitative analysis. In CSMR '12: 16th European Conference on Software Maintenance and Reengineering, pages 85--94, March 2012.
[59]
M. van Genuchten and L. Hatton. Quantifying software's impact. Computer, 46(10):66--72, 2013.
[60]
M. L. V. D. Vanter. The documentary structure of source code. Information and Software Technology, 44(13):767--782, 2002. Special Issue on Source Code Analysis and Manipulation (SCAM).
[61]
A. Vermeulen, S. W. Ambler, G. Bumgardner, E. Metz, T. Misfeldt, J. Shur, and P. Thompson. The Elements of Java Style. Cambridge University Press, Cambridge, 2000.
[62]
S. Wood. Generalized Additive Models: An Introduction with R. Chapman and Hall/CRC, 2006.
[63]
S. N. Wood. Fast stable restricted maximum likelihood and marginal likelihood estimation of semiparametric generalized linear models. Journal of the Royal Statistical Society (B), 73(1):3--36, 2011.

Cited By

View all
  • (2024)Optimization Space Learning: A Lightweight, Noniterative Technique for Compiler AutotuningProceedings of the 28th ACM International Systems and Software Product Line Conference10.1145/3646548.3672588(36-46)Online publication date: 2-Sep-2024
  • (2021)Evolution of the Unix System Architecture: An Exploratory Case StudyIEEE Transactions on Software Engineering10.1109/TSE.2019.289214947:6(1134-1163)Online publication date: 1-Jun-2021
  • (2020)The Impact of a Major Security Event on an Open Source ProjectProceedings of the 17th International Conference on Mining Software Repositories10.1145/3379597.3387465(409-419)Online publication date: 29-Jun-2020
  • Show More Cited By

Recommendations

Comments

Information & Contributors

Information

Published In

cover image ACM Conferences
ICSE '16: Proceedings of the 38th International Conference on Software Engineering
May 2016
1235 pages
ISBN:9781450339001
DOI:10.1145/2884781
© 2016 Association for Computing Machinery. ACM acknowledges that this contribution was authored or co-authored by an employee, contractor or affiliate of a national government. As such, the Government retains a nonexclusive, royalty-free right to publish or reproduce this article, or to allow others to do so, for Government purposes only.

Sponsors

Publisher

Association for Computing Machinery

New York, NY, United States

Publication History

Published: 14 May 2016

Permissions

Request permissions for this article.

Check for updates

Author Tags

  1. BSD
  2. C
  3. FreeBSD
  4. Unix
  5. coding practices
  6. coding style

Qualifiers

  • Research-article

Funding Sources

  • European Union (European Social Fund - ESF)
  • Greek national funds

Conference

ICSE '16
Sponsor:

Acceptance Rates

Overall Acceptance Rate 276 of 1,856 submissions, 15%

Upcoming Conference

ICSE 2025

Contributors

Other Metrics

Bibliometrics & Citations

Bibliometrics

Article Metrics

  • Downloads (Last 12 months)28
  • Downloads (Last 6 weeks)3
Reflects downloads up to 05 Mar 2025

Other Metrics

Citations

Cited By

View all
  • (2024)Optimization Space Learning: A Lightweight, Noniterative Technique for Compiler AutotuningProceedings of the 28th ACM International Systems and Software Product Line Conference10.1145/3646548.3672588(36-46)Online publication date: 2-Sep-2024
  • (2021)Evolution of the Unix System Architecture: An Exploratory Case StudyIEEE Transactions on Software Engineering10.1109/TSE.2019.289214947:6(1134-1163)Online publication date: 1-Jun-2021
  • (2020)The Impact of a Major Security Event on an Open Source ProjectProceedings of the 17th International Conference on Mining Software Repositories10.1145/3379597.3387465(409-419)Online publication date: 29-Jun-2020
  • (2020)How does code readability change during software evolution?Empirical Software Engineering10.1007/s10664-020-09886-9Online publication date: 24-Sep-2020
  • (2020)Modeling Learners’ Programming Skills and Question Levels Through Machine LearningHCI International 2020 – Late Breaking Posters10.1007/978-3-030-60703-6_36(281-288)Online publication date: 8-Nov-2020
  • (2019)A Study on the Current Status of Functional Idioms in JavaIEICE Transactions on Information and Systems10.1587/transinf.2019MPP0002E102.D:12(2414-2422)Online publication date: 1-Dec-2019
  • (2018)Documented unix facilities over 48 yearsProceedings of the 15th International Conference on Mining Software Repositories10.1145/3196398.3196476(58-61)Online publication date: 28-May-2018
  • (2018)Bring your own coding style2018 IEEE 25th International Conference on Software Analysis, Evolution and Reengineering (SANER)10.1109/SANER.2018.8330253(527-531)Online publication date: Mar-2018
  • (2018)Lightweight Application Development Mechanisms for UNIX based Environments2018 Second International Conference on Green Computing and Internet of Things (ICGCIoT)10.1109/ICGCIoT.2018.8752986(124-128)Online publication date: Aug-2018
  • (2018)Analyzing a decade of Linux system callsEmpirical Software Engineering10.1007/s10664-017-9551-z23:3(1519-1551)Online publication date: 1-Jun-2018
  • Show More Cited By

View Options

Login options

View options

PDF

View or Download as a PDF file.

PDF

eReader

View online with eReader.

eReader

Figures

Tables

Media

Share

Share

Share this Publication link

Share on social media