The UNIX Philosophy

“Write programs that do one thing and do it well. Write programs to work together.” (Doug McIlroy)

Doug summarized the UNIX Philosophy in the 1970s and it has remained the core strength of UNIX and Linux that has propelled it far ahead of every other operating system on the planet.

The second part is often left off, which is a huge problem for many UNIX systems. I like to summarize that as “create clean seems” where the two parts of system architecture come together nicely and don’t particularly care how each part does what it does.

Revised to “commands”

“Write programs with commands that do one thing and do it well. Write them to work together.” (Mr. Rob)

The original UNIX philosophy was written when memory was very hard to come by and fat programs like EMACS came under fire for using memory that — by today’s standards — was laughably small. This is the reason dynamically linked libraries were so important. All the programs on the system could use the same library that was already loaded into memory. These days static linking is the norm because memory is much more abundant.

This abundance of memory has led to a lot of abuses by developers as well as a slight change to the UNIX philosophy itself. The git command, for example would not have been made as a single executable with different command actions, the verbs that come after git. It might have looked something like this:

git-add -A .
git-commit -m "my message"
git-push

It is rather common to see this design today. A monolithic main program with multiple command actions represented by verbs.

This calls for revising the wording of the original UNIX philosophy.

💎 To this end I created the go-commander.