GNU Emacs is Unix — Robin Wils's website
Last modified: Sat, Aug 29, 2020
GNU’s Not Unix, Emacs is Unix
This article is going to make some people angry, but please read it first before you complain.
GNU by design does not include Unix code, but what is Unix?
Unix systems are characterized by a modular design that is sometimes called the “Unix philosophy”.
This “philosophy” was made by AT&T, a closed source company. It was invented by Ken Thompson, Dennis Ritchie and others.
The Unix philosophy
The rules of this philosophy have changed over the years, but most definitions include that it only must do one thing well, and only that one thing.
Why is GNU Emacs, Unix then?
Well, I just want to make it clear that the Unix philosophy is very vague. What is “one thing”?
They sometimes say that it is one responsibility.
GNU Emacs can be looked at like it has one responsibility, interpreting elisp code. So you could call it Unix.
Damn, you could even call the Windows Operating System Unix. It does one thing. It does computing (in other words, it is an Operating System).
Systemd also has one responsibility, being the init system.
All these mentioned tools can do more things, but they can be seen as a part of that bigger responsibility.
The Unix philosophy does not exist
You might think that things can’t have such big responsibilities, only small ones like text editing.
Vim only does one thing, which is text editing right? Well what about highlighting the syntax of code? It does that too.
Shouldn’t it use a separate program that does that?
Let’s think a bit
You should have a separate program for every key on your keyboard if you think like that.
The “a” key is only responsible for one thing and that is showing “a” when you press it.
The “b” key is responsible for a different specific thing, which is showing “b” when you press it.
Do you get what I mean? The unix philosophy never really existed, because the definition is incomplete and vague.
I get the point, it is sometimes good that your program does not do too much and that it uses programs which already exist, but Unix is just vague and unclear.
I don’t hate that way of thinking, and believe that parts of it are good, but like everything. Don’t follow any vague principle like a religion.
Most if not all of these design principles are designed by business people. It are buzzwords and you can’t use them right or wrong. It are guidelines.
To make it more complicated
(This section was added after I received some comments on the Fediverse)
Unix is also a trademark. So what is Unix? You could say that it is just a trademark.
That is not what people mean when they say things like: “This program is Unix” or “This program is great because it is Unix”.
Anyway, this is about that thing. What makes a program Unix? What is the Unix philosophy?
There is this other thing that you sometimes hear. “It does not have to be POSIX to be Unix.”
There are many things which people call Unix, which are not POSIX. POSIX is just a standard which you could use.
Vim is not even completely POSIX compliant. It is mostly compliant, but people still call it Unix.
MacOS is mostly compliant according to some, but many people don’t like to call it Unix. Some call it Unix though.
Words which you can use instead
Some people like to say that a program is something. Saying that a program is Unix, does not really describe what you mean in my opinion.
Words like modular, minimal and composable sound less like meaningless buzzwords in my opinion. They actually describe what you mean.
Those words are not perfect either
They are not perfect, just like the word “good”. What is “good”? What is “minimal”?
These words have to do with what you think, but they at least sound less like a buzzword.
Buzzwords usually are just used to promote stuff and such. Many people don’t know what they actually mean, or if it even has meaning.
So what Unix is…, is just a buzzword, a design principle. It is also a trademark.
You can follow it, but there is no right or wrong way to apply it.
It means multiple things, but this was mostly written to prevent people from yelling that some program is Unix, and some other program is not.
Don’t hate a program because “it is not Unix”. Don’t call any program “Unix”. It is not some standard. It are guidelines.
Don’t follow any design principle like a religion. It are guidelines, not rules. There is no right or wrong way to do something in design principles.
People like to pretend that some design principles are holy, but they are not. It are guidelines, and it is not something which prevents mistakes and only creates “good” code.
Other interesting links
- Fast Food the UNIX way - Xah Lee (also check the "see also" link)
- The Collapse of the UNIX Philosophy - Askar Safin