9. Unix philosophy
IT technology has been evolving every day. However, Unix is an exception; its philosophy and code continue to live on in Unix-based operating systems.
Today, when we use Android, we are using the Linux kernel. When we use our iPhones or MacBook, we are using the macOS. Both of these systems are based on Unix.
Minix and Linux did not use Unix code, but implemented the POSIX APIs natively.
Minix was developed by Professor Tanenbaum to teach students. Perhaps he referred to Lion’s commentary on Unix?
Linus Torvalds also created Linux by studying Professor Tannenbaum’s Minix book and source code.
To find the answer, we need to understand Unix philosophy. Of course, when Unix was first written, there was no such thing as a grand philosophy. If you ask me, “Keep it Simple, Stupid.”
The Unix philosophy is officially documented by Doug McIlroy in the Bell System Technical Journal from 1978:[1]
- Make each program do one thing well. To do a new job, build afresh rather than complicate old programs by adding new “features”.
- Expect the output of every program to become the input to another, as yet unknown, program. Don’t clutter output with extraneous information. Avoid stringently columnar or binary input formats. Don’t insist on interactive input.
- Design and build software, even operating systems, to be tried early, ideally within weeks. Don’t hesitate to throw away the clumsy parts and rebuild them.
- Use tools in preference to unskilled help to lighten a programming task, even if you have to detour to build the tools and expect to throw some of them out after you’ve finished using them.
It was later summarized by Peter H. Salus in A Quarter-Century of Unix (1994)[1]:
- Write programs that do one thing and do it well.
- Write programs to work together.
- Write programs to handle text streams, because that is a universal interface.
In this way, Unix allowed us to easily create new functionalities by connecting the inputs and outputs of programs together like Lego bricks. Above all, it was written in a high-level language like C rather than assembly language, making it easy to port to other computers.