GNU Emacs is Unix — Robin Wils's website
Last modified: Sat, Jan 28, 2023
GNU’s Not Unix, Emacs is Unix
This article is going to make some people angry. 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. 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.
Every key has one responsibility showing the output of that key on your screen. The “a” key is only responsible for one thing and that is showing “a” when you press it. Do you get what I mean? The unix philosophy never really existed, because the definition is incomplete and vague.
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. You can’t use them right or wrong. It are guidelines.
To make it more complicated
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 are usually used to promote things. Many people don’t know what they actually mean, or if it even has meaning.
Unix 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. People like to pretend that some design principles are holy, but they are not. 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. Design principles are not something which prevents mistakes and only creates “good” code.