By Charles Joseph | Cybersecurity Advocate
Every time you use a computer, you can thank British computer scientist Steve Bourne.
As the creator of the Bourne shell in 1979, he elevated programming to a new level, making it easier than ever to create functional, complex computer programs. And though his creation is rarely used today, it provided the foundation for virtually all modern programming.
But when Steve Bourne began his ambitious project, he had no idea just how much it would change the world.
Steve Bourne at a Glance
- Steve Bourne learned computer science on some of the earliest machines, using them to study astronomical mathematics at Cambridge in the 1960s.
- While working on his Ph.D. at Cambridge, Bourne helped mathematician John Conway create his iconic Game of Life, and developed a compiler for the complicated ALGOL 68 secure programming language.
- In 1975, Bourne moved to the US to work at Bell Labs, where a team of programmers was developing the Unix operating system.
- Bourne’s contribution was the Bourne shell, a Unix tool that transformed a simple command-line interpreter into a full-fledged programming language.
- The Bourne shell made it possible to create complex programs easily and efficiently, making Unix arguably the most powerful operating system yet seen.
- After leaving Bell Labs in the 1980s, Bourne was a senior engineer at several other major tech companies, including Cisco and Sun Microsystems.
- The Bourne shell served as the foundation for Bash, today’s most prominent Unix shell, as well as numerous others.
The Life of Steve Bourne
The Cambridge Days
Born in the UK in 1944, Stephen “Steve” Bourne always had a knack for math and science.
His talents earned him the opportunity to study at some of the UK’s most prestigious institutions. He earned his bachelor’s degree in mathematics from King’s College in London, then went on to earn a diploma (the equivalent of a master’s degree) in computer science from Trinity College at the University of Cambridge.
After finishing his degrees in the late ’60s, Bourne remained at Cambridge to pursue his Ph.D. in mathematics at the school’s famed Computer Lab.
The Lab had already been host to many major computing innovations. It was the home of the world’s first postgraduate computer science degree and the birthplace of EDSAC, the world’s first fully functional and usable computer that could store programs in memory.
And now it was home to Bourne, whose new project was the Cambridge Algebra System, or CAMAL. This complex system allowed computers to perform calculations relating to lunar theory, celestial mechanics, relativity, and other astronomical topics.
To create CAMAL, Bourne and his colleagues had to create their own programming language, which they called Z.
One day, famed mathematician John Conway stopped by the Computer Lab and was shown a visualization of Bourne’s Z language. At the time, Conway was working on a cellular automaton — a computational model used in physics, biology, and other scientific simulations — and found Z’s capabilities inspirational.
In 1970, Conway’s discussions with Bourne led to his creation of the Game of Life, a highly influential, Turing-complete simulation that’s still used today in everything from philosophy to astrophysics to epigenetics.
That year, Bourne began a new project: a compiler for the ALGOL 68 programming language, which was used by various European militaries, communications agencies, and intelligence agencies. ALGOL 68 was regarded as one of the most secure programming languages, but was also dense and difficult to compile, making Bourne’s ALGOL 68C compiler all the more impressive.
ALGOL 68C also formed an integral part of the revolutionary Cambridge CAP computer. CAP was the first computer to successfully use both hardware and software security capabilities, and its full-featured OS was written almost entirely in ALGOL 68C.
Bourne Heads to Bell Labs
In 1973, while working on ALGOL 68C, Bourne traveled to New York to visit IBM’s T.J. Watson Research Center and explore the latest developments in compilers. While there, he befriended several people who worked at Bell Labs in Murray Hill, New Jersey, where the nascent Unix operating system was being developed.
Unix represented a new frontier in computing: an OS that could support multiple users performing multiple tasks simultaneously using the same system resources. This would allow for greater collaboration between programmers and reduce computing costs, as institutions with multiple programmers could purchase a single computer rather than many individual ones.
At the time of Bourne’s visit, the Unix kernel was being rewritten from assembly language to C. C was a relatively new language that was much more compact and readable than assembly — it took fewer lines of simpler code to perform more powerful tasks.
The rewrite epitomized the new direction of the Unix project: a more accessible, universal OS. And as the Unix team got to know Bourne, they realized what a valuable asset he could be in their quest to bring the OS to the masses.
In 1975, Bourne accepted a job with the Unix team at Bell Labs and relocated to New Jersey. Almost immediately, he began creating the tool that would eventually make him famous: the Bourne shell.
The Bourne Shell Is Born
When Bourne arrived at Bell Labs, Unix allowed users to interact with the OS via the Thompson shell, a simple command-line interpreter that could process single commands.
Performing any complex tasks through the Thompson shell was tedious and time-consuming, requiring each individual command to be issued manually.
And though programmers could enter all of their commands into a script file and have the shell run the script, actual programming was still not possible. The Thompson shell didn’t support functions or variables, nor did it support control flow — commands couldn’t be automatically run in different configurations depending on data input and output, only in a predefined, linear order.
Bourne knew that Unix, especially with its new C-based construction, was capable of so much more. Other team members did as well — they’d been envisioning a shell with programming capabilities for years — but writing such a shell from the ground up was a massive undertaking that few could handle.
In early 1976, Bourne rose to the challenge and began working on a new shell, simply called sh. Written in ALGOL 68-inspired C, it functioned not just as a command-line interpreter but as a programming language in and of itself.
Rather than reading commands linearly, Bourne’s new shell read them as a tree with many branches. With this control flow, it could navigate from branch to branch depending on the output of each preceding command, allowing the program to “make decisions” for itself as it ran.
These complex new capabilities required a good deal more memory and processing power than before, so Bourne also had to design a sophisticated memory management system for the shell.
Within six months, Bourne’s shell was fully functional and ready to use, but he initially struggled to get people to convert to it. Another replacement for the Thompson shell, the Mashey shell, was already in use around Bell Labs, and few were willing to rewrite their scripts to be compatible with sh.
It took another year for sh to become widely adopted throughout the company, during which time it became known unofficially as the Bourne shell.
Eventually, a committee was formed to determine which shell would become the company standard, and Bourne made his case successfully. The Bourne shell became the shell of choice at Bell Labs, and in 1979, it made its public debut as part of Version 7 Unix.
The Bourne Shell Evolves
Bourne continued working on his shell through 1983, at which point he decided that the project had reached its reasonable limits. Any further features, he reasoned, would undermine the simplicity and elegance of the shell, thus defeating its original purpose.
His final addition to the shell was functions, a feature he says he regrets not adding earlier in the project.
The following year, Bourne left Bell Labs to work in senior engineering management at Silicon Graphics. He went on to take similar positions at other companies, including Digital Equipment Corporation, Sun Microsystems, and Cisco Systems.
But meanwhile, the Bourne shell continued to evolve as the next generation of programmers, working on more advanced equipment, created their own versions.
One, the Korn shell (ksh), combined the syntax of the Bourne shell with the job control features and interactivity of the competing C shell. Its modern open-source variants, ksh93, and pdksh, are still in use in various Linux and BSD distributions today.
The Bourne shell also provided the basis for Bash, also known as the Bourne-again shell, developed in 1989 by the GNU project. Bash combines the Bourne shell, the C shell, and the Korn shell and is now the default shell for most Linux distributions.
Today, the original Bourne shell isn’t widely used, having been superseded by more powerful, up-to-date shells. But in many ways, it’s still the backbone of modern computing: over 80% of all websites run on Unix, with a majority of those utilizing Bash or a similar Bourne shell derivative.
And though these new shells all have their own names and paths, you can still find “sh” in the Unix file system: a symbolic link between the powerful contemporary shell and its legendary progenitor.
Join Our Community
Steve Bourne: Father of the Shell
Hundreds of times a day, we press a key or click a mouse and interact, however indirectly, with Steve Bourne’s incredible Bourne shell.
With one creation, he paved the way for accessible yet complex programming that could unite both coders and lay users across all devices.
And in an industry where software becomes obsolete in the blink of an eye, the Bourne shell still persists over 4 decades later — a testament to both its importance in computing and its creator’s extraordinary vision.
Early Days of Unix by Stephen R. Bourne (Video)
"Amateurs hack systems, professionals hack people."
-- Bruce Schneier, a renown computer security professional