Towards a Philosophy of Shells

Most modern operating systems include a “shell” of one form or another, sometimes text-based, sometimes graphical. The first shell was written by Louis Pouzin. It dates to 1963 or 1964. He even wrote a paper about it.

Pouzin wrote in page R-17 of his paper:

… there is still for a user who really does not like the system convention, the possibility of supplying his own SHELL.

Here in 2026, 60 years later, many, many shells are available.

Various Linux and *BSD shells in more-or-less common use:

Older, and more exotic shells still float around:

Further afield, some programming language interpreters get used as shells:

Less useful operating systems have adopted the idea of a shell:

Windows has cmd.exe and PowerShell. Apparently you can buy add-on shells for Windows, like Hamilton C Shell.

Digital Equipment Corporation had DCL. It’s still available with the pale ghost of VMS. It’s also a bit weirder than Unix-like shells - it’s not a process on its own, but rather part and parcel of a processes’ address space.

All kinds of information is available about shells.

Histories

Evolution and phylogenies

Comparisons and evaluations

Philosophy of Science

Noun

  1. The study of the assumptions, foundations, and implications of science, including such questions as what distinguishes science from non-science, what are the aims of science, or what is a successful scientific explanation of a phenomenon.
  2. A particular theory within the former.

That’s a nice, neat definition, courtesy of Wiktionary. Of course, other definitions exist. They’re quite similar.

Philosophy of Shells

Louis Pouzin, the author of the first shell, and the person who named them as a category, was correct. Computer use is a living organism in which any user, with various degrees of expertise, can create new things, test them, and make them available to others, without administrative control and hassle.

What the world needs is a “philosophy of shells”. The large number of shells, their varying forms and use patterns demand a study of the assumptions, foundations, and implications of shells, including such questions as what distinguishes a shell from a non-shell, what are the goals of shell use and experience. There might be many specific theories within this category.

Questions to be debated and answered include:

  1. The proper balance between interactive use and programming language.
  2. Which primitives should a shell deal with?
  3. The tar pit of appropriate syntax and notation.
  4. Where should the dividing line between operating system and shell be drawn?
  5. How much string processing should a shell include?
  6. Should shell variables be typed? If so, what types, and how strongly?
  7. How much should the structure of the underlying operating system effect a shell? Should shells be OS independent?

I will allow that it could be argued that the progression or evolution of shells, from Pouzin’s RUNCOM, to Thompson’s Unix V6 sh, through the Bourne shell, Korn shell and bash is a demonstration of a “philosophy of shells”. At each stage, a programmer or designer picks and chooses which style to exercise, which primitives and features to keep and which to add. The evolution of shells provides an ongoing, executing, philosophy of shells.