When we say that Linux is UNIX-like, what are we saying? At my college, we have a course that is named 'an introduction to UNIX using Linux'. All over I hear people use the phrase 'UNIX/Linux' when referring to UNIX-style systems. It is somewhat hilarious to me, as Linux and the surrounding community have, for the most part, left the UNIX philosophy behind. Any similarity to UNIX that Linux has is, at this point, completely superficial. The UNIX philosophy goes as follows:
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.
The above are all quotes of Doug McIlroy (this is the guy who invented UNIX pipes). He was later known to have said the following in summary:
This is the Unix philosophy: 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.
Another 17 rules for UNIX can be distilled by looking at the design of UNIX.
Linus Torvalds has admitted that the Linux kernel has gotten heavy, calling it 'bloated and huge'. Much of this bloat is due to necessity, but the size is getting to be unwieldy. The size is getting to kill two points in the above. Rule of Extensibility, and the rule of Parsimony. However, we have some other issues besides the kernel. All of the programs that people are so fond of, and willing to defend to their graves have been breakers of most of the above points.
In my last post, I spoke of us getting away from UNIX, and taking a path I dislike. People say that Linux was not a UNIX clone and thus the heritage is pointless. Well, Linux was designed as an open source Minix kernel initially. From there, we can say that Minix was an operating system designed to teach students about UNIX design and operating systems in general. We can also say the GNU was an open source UNIX implementation. If you would like to argue that, why is it that our modern UNIX (Macintosh OSX) uses GNU components?
We didn't have to jump on with X11, where bloat and complexity are present for no apparent reason whatsoever, and where nasty hacks have resulted in even more complexity. We didn't have to jump on with KDE where a lack of extensibility, parsimony, clarity, modularity, simplicity, and repair lead to the need for a rewrite from the ground up, and left many of us hating the new version. We didn't have to jump on with GNOME or XFCE that are facing similar growing pains. We didn't have to sign on with any of this, but we did. We are now paying the price as our systems get heavier and heavier, and like the guys on the other side of the fence (Windows and such), we are going to start upgrading our systems just because our OS demands a better machine.