Bell Labs was home to many technologies and inventions, but the C programming language developed there had one of the biggest impacts on embedded computing. Many people have worked on C to make it what it is today, the most used programming language around. Three stand out, though: Ken Thompson (Fig. 1) and Dennis Ritchie (Fig. 2), who created it, and Brian Kernighan (Fig. 3), who authored The C Programming Language with Ritchie
| Download this article in .PDF format |
This file type includes high resolution graphics and schematics when applicable.
Ritchie and Thompson both worked with BCPL (Basic Combined Programming Language), which was used on Multics. It was the basis for the B language developed by Thompson for UNIX on the 18-bit PDP-7 from the Digital Equipment Corporation (DEC). The PDP-7 had a 1.75-µs memory cycle time, and an add instruction took 4 µs to execute. The typical system had only 4 kwords.
Ritchie modified B, which eventually became the C programming language. One major difference was C’s handling of pointers. C also had a character type. It was designed to be adapted to new hardware like the 16-bit DEC PDP-11. Ritchie and Thompson received the ACM Turing Award in 1983 for their work on C as well as UNIX. Thompson wrote the first version of UNIX in assembler, followed by many iterations written in C.
“Our collaboration has been a thing of beauty. In the 10 years that we have worked together, I can recall only one case of miscoordination of work,” Thompson said about Ritchie in his ACM Turing Award Lecture: Reflections on Trusting Trust. “On that occasion, I discovered that we both had written the same 20-line assembly language program. I compared the sources and was astounded to find that they matched character for character. The result of our work together has been far greater than the work that we each contributed.”
Also in his Turing Award lecture, he described how he had incorporated a backdoor security hole in the original UNIX C compiler. To do this, the C compiler recognized when it was recompiling itself and the UNIX login program. When it recompiled itself, it modified the compiler so the compiler backdoor was included. When it recompiled the UNIX login program, the login program would allow Thompson to always be able to log in using a fixed set of credentials.
The initial C compiler source code included the hack. The source code for subsequent compilers had it removed, though. The binary would include the backdoor when compiled with a compiler that includes the backdoor code. After discussing the backdoor, Ken stated, “The moral is obvious. You can't trust code that you did not totally create yourself.”
Thompson has worked on a variety of projects, including the QED and ed editors. This included his construction algorithm for converting regular expression into nondeterministic finite automaton. The algorithm improves the performance of expression pattern matching. He also developed the widely used character encoding scheme, UTF-8, with Rob Pike and helped create the world champion Belle chess computer hardware and software with Joseph Condon.
Thompson currently works for Google as a Distinguished Engineer, where he helped design the Go programming language. He received a BS and MS in electrical engineering and computer science from the University of California, Berkeley.
Born in 1941, Ritchie and started work at Bell Labs in 1967 after graduating from Harvard University with degrees in physics and applied mathematics. He did part-time graduate work on the Massachusetts Institute of Technology’s Project MAC using the Multics system. While at Bell Labs, he earned his PhD, also from Harvard.
Ritchie met and worked with Thompson and Kernighan at Bell Labs, where he was a key developer for C and Unix and wrote The C Programming Language with Kernighan. He also was responsible for many Unix ports to new hardware. Additionally, he worked with Thompson, Rob Pike, Dave Presotto, and Phil Winterbottom at Bell Labs on the Plan 9 operating system and programming environment.
Plan 9 was designed to be a distributed, grid computing platform. It evolved into the Inferno operating system, which is now available from Vita Nuova(see “Inferno Operating System Burns Its Way Into Embedded Systems” at electronicdesign.com). Inferno ran on a virtual machine called Dis using a communication protocol called Styx. Applications were written in Limbo.
Dennis Ritchie passed away in 2011 a week after Steve Jobs passed away.
Kernighan received a bachelor’s degree in engineering physics from the University of Toronto and a PhD in computer science from Princeton Univerisity. He wrote a number of UNIX applications in C such as cron and ditroff, but he did not work on the C language development. He also wrote a tutorial for the B language developed by Thompson (see “Interview: Brian Kernighan Talks About Computers, Programming, And Writing” at electronicdesign.com). B turned into NB (New B) and then into C, so he wrote the first draft of The C Programming Language. Ritchie wrote the system programming sections as well as Appendix A.
Kernighan went on to many other programming projects like AWK with Al Aho and Peter Weinberger and EQN with Lorinda Cherry. He developed the Ratfor FORTRAN preprocessor, which essentially took a C-style program flow and generated FORTRAN source code. Ratfor was written up as part of the “Software Tools” series from Prentice Hall, where he was the software editor.
Also, Kernighan came up with the original name for UNIX, Unics (Uniplexed Information and Computing Service). It was a variation on Multics (Multiplexed Information and Computing Service), an early mainframe, time-sharing operating system used at Bell Labs.
Currently, Kernighan is a professor with the Computer Science Department of Princeton University, where he is the undergraduate department representative as well. He has continued to write with other software notables like P.J. Plauger for The Elements of Programming Style. His latest book, D is for Digital, is based on his Princeton course, “Computers in Our World.” It is designed to describe how computing works for a non-technical audience.