Unix philosophy essay

by Michael C. Dimopoulos - Main page

text file, other essays


The upcoming September will mark 50 years since the initial release of the UNIX operating system, so what better time to talk about the influence of UNIX in the digital & physical world than now. UNIX was designed and built by computer legends Ken Thompson, Dennis Ritchie, Brian Kernighan, Douglas McIlroy among others at Bell Labs. One of the most interesting concepts to arise along with it was its philosophy regarding software development, which was especially promoted by Kernighan and Rob Pike. The Unix philosophy is about minimalism and simplicity - anyone who's used a Un*x system understands that.


When discussing the Unix philosophy, it is important to talk about its predecessor, Multics. Despite being its main origin, Multics was different from UNIX. It was written in a high level language and it was sort of a bloated system for the time. In its effort to be general purpose, stable and user-friendly, Multics had become too big for the hardware of the time. Although it was eventually released open source, and by modern standards it would be considered a very lightweight system, it caused the reaction which led to Unix: the bare and absolute minimum, yet complete, system.

It is also important to take into consideration the limitations of computing systems when UNIX was first developed. The 1960s were a crucial decade in the development of the fields of electronic engineering, computer science and STEM as a whole - Many landmarks were marked, with C and Unix being among the greatest. However, computer memory, input/output devices, storage space, processing power etc. were extremely limited and primitive when compared to modern computers. That is the environment that Unix had to deal with, and not only that: Unix was a full operating system with permissions, multi user support etc.

The idea

The "philosophy" itself is based a few core principles They are the following:

Other core features that may or may not be considered part of the Unix philosophy are:


Back in the day when the Unix philosophy was first developed, it was almost necessary to abide by it, as a result of computing limitations. This isn't the case anymore. With such computer power increase, the Unix philosophy is something you need to stick with. It is hard to not add features. It is hard to not create an over-bloated feature-creeped monolith of an application. The ignorance and disregard of the Unix philosophy can be felt all around us. The modern web is a great example.

Many argue that it is obsolete. Computers are no longer as limited the way they used to be 50 years ago. It is [CURRENT_YEAR], when will you finally stop the Unix larping? Let's just be a wholesome egalitarian community where everyone can program without meritocracy and mean criticism. You don't understand - I don't have to run minimal programs, I have 16 gigs of RAM. Just get a newer computer.

Here are some hard pills to swallow: Computer power will not always keep increasing - it has already started to stagnate. On the other hand, software keeps getting more and more complicated, more and more bloated. How long do you think we can keep adding more to the bloat until we reach the limit of computing ability? For how long will we have to throw away fine machines to junkyards because they cannot keep up with with huge badly-written programs? How long until we run out of resources to create newer hardware? The reason your computer has 16 gigs of RAM and a great processor is because it has to keep up. It shouldn't need it! These are resources that could be used in much better ways than to fill up the consumerist mind. Not just for the hardware, but for electrical power too. Security is a whole issue different issue by itself. The number of bugs in a piece of software is directly related to its SLOC and its complexity. Complex, bloated software is by definition more vulnerable and a danger to our security and privacy. If we had abided by the Unix way, the world would be a better place.

Recommended reading: The UNIX programming environment by Brian Kernighan and Rob Pike

Main page