Open a terminal on Linux, type a command, and you are talking to a piece of software with more than fifty years of history behind it: the shell. It is the interpreter that turns your instructions into something the operating system understands, and its evolution tells a big chunk of the Unix and free software story. Let’s walk that path here, from the very first command interpreter all the way to Bash, the shell that runs the Linux world today.
The Thompson Shell: The First Interpreter (1971)
The story begins at Bell Labs. In 1971 Ken Thompson wrote the first Unix shell, known today as the Thompson shell (sh). It shipped with versions 1 through 6 of Unix, between 1971 and 1975. It was a simple command interpreter, built to run programs interactively rather than to write full programs.
Simple as it was, it brought ideas we still rely on every day: input and output redirection with < and >, and above all the pipes that let you chain the output of one program into the input of another. That philosophy of “small tools that do one thing well and combine cleanly” is still the soul of Unix-like systems, including the Linux kernel.
The Bourne Shell: The UNIX Standard (1979)
The big leap came in 1979, when Stephen Bourne, also at Bell Labs, introduced the Bourne shell alongside UNIX Version 7. That interpreter inherited the name sh and defined nearly every feature we now treat as essential in any shell: variables, complete control structures (if, for, while), command substitution, and the famous here documents.
The Bourne shell turned the shell into a real programming language. From then on, writing scripts stopped being a trick for power users and became the standard way to automate tasks. Its syntax proved so influential that it still defines the POSIX standard modern shells honor, which is why old scripts keep running on veteran distributions like Slackware.
C Shell and KornShell: The Competition
The Bourne shell did not stay alone for long. Also around 1979, Bill Joy, then a graduate student at Berkeley, created the C shell (csh), whose syntax drew on the C programming language. It shipped widely with BSD Unix and brought conveniences such as command history and aliases. Its legacy lives on in systems like FreeBSD, where csh variants played a prominent role for many years.
In 1983 David Korn introduced the KornShell (ksh), an effort to improve the Bourne shell while staying compatible with it. It added job control, associative arrays, and command-line editing in vi or Emacs style. For years, ksh was the commercial shell of choice across many corporate Unix systems.
Bash: The Shell Reborn (1989)
In the late 1980s, Richard Stallman’s GNU Project needed a fully free shell that could replace the Bourne shell without any licensing strings attached. The job fell to Brian Fox, who started coding it in 1988 and released the first beta version in 1989.
The name says it all: Bash, the Bourne Again Shell, is both a pun and a mission statement. The Bourne shell “born again” for a world that wanted freedom and functionality. Bash took the best of its predecessors: it kept compatibility with Bourne shell syntax while adding the history, line editing, and other comforts of csh and ksh. Chet Ramey joined the project in 1989 too, eventually becoming its primary maintainer, a role he still holds decades later.
Bash as the Default Shell of Linux
When Linux started taking off in the early 1990s, Bash was already a mature, free shell. It fit the GNU/Linux philosophy perfectly and became the default shell for the overwhelming majority of distributions. Today you will find it ready to use on Ubuntu, Debian, and practically any system you install.
Its real power lies in scripting. With pipes, redirections, variables, and functions, Bash lets you automate everything from a backup routine to the full deployment of a server. That versatility explains why it remains the daily tool of system administrators and developers around the world.
Modern Alternatives: zsh and fish
Bash is not the end of the story. In recent years, alternatives that improve the interactive experience have gained ground. Zsh (Z shell) offers smarter completion, spelling correction, and a hugely popular theming system thanks to frameworks like Oh My Zsh. Fish (the friendly interactive shell) bets on simplicity and usability from the very first launch, with automatic suggestions based on your history.
The most talked-about change came in 2019: for licensing reasons (Bash moved to GPLv3), Apple replaced Bash with zsh as the default shell in macOS Catalina, and it has stayed that way ever since. Even so, Bash keeps its crown in the Linux world: five decades after that first Thompson shell, the shell remains the heart of the command line, and Bash is its most universal ambassador.
