В оригинале писалось мною для https://dis.4chan.org/prog/ посему преводить лень. Но вот что мне лично не понравилось в Linux
Linux's success may indeed be the single strongest argument for my thesis: The excitement generated by a clone of a decades-old operating system demonstrates the void that the systems software research community has failed to fill. — Rob Pike, original developer of Unix and author of The Unix Programming Environment
Everything in Linux sucks. For example, when I close «Nautilus» file manager window, it doesnt terminate program, but puts it in background. Why? To leak more CPU and memory! The xfce4-menu-plug already ate 140 megabytes of memory, and it's just a toolbar! When I try to `kill -s KILL gnome-screensaver`, it blanks whole screen and only reboot helps. Gedit (a simple notepad) takes whooping 60 megabytes to edit a few lines of text and it loads about 10 seconds! Opening a directory in file browser sometimes takes minutes, due to its file type detection feature (it scans and makes thumbnail of every file). Thousands of thumbnails stored inside ~/.thumbnails slow down image viewer startup by about 20 seconds. Invoking `cat` on a binary file damages terminal font and sometimes crashes bash.
Also, file type detection is extremely glitchy and detects unrelated files as PCX files. It also ignores file extension. So if it detects JPEG file as PCX, it will open it as PCX and crash viewer, despite that it has JPG extension.
Command Line interface is horrible at best! Sometimes a simple typo, like «cp *», can easily mess your files. The only way to be safe with Linux is to do backup every few hours.
Regarding bad design decisions in Linux: there is no sandbox and every program you run has access to all files inside you /home folder and can delete/steal them. Moreover every program gets internet access by default, making you machine a potential botnet node. That is a truly bad design decision, which could have been easily avoided by dropping unmanaged memory access or capability based security with array-bound checking protection, similar to one specified in http://www.cs.ucr.edu/~gupta/teaching/260-08/Papers/TR181.pdf
Super user rights can't be managed precisely and every program requiring them has to be given full super-user account (setuid/setgid). No on/off switches, so a program wanting direct access to SVGA frame buffer also gets access to network connection and whole hard drive content.
Unauthorized program should't be able to access filesystem or internet. Every program should be limited in access only to files and directories provided by the user, while internet access is given only to programs installed under apps.interned_allowed directory. There should be a way to reject privileges given to file/directory handles, so accessing them would produce exception. Users shouldn't see outside of their home directory and all file-sharing should be explicit. User password should be too kept under's home directory, so it could be changed without much fuzz with /etc/passwd.
POSIX API is horrible and includes a lot of undefined behavior. A change to memcpy implementation once broke tons of Linux code that depended on undefined behavior. But Worse is Better, of course (http://www.cygwin.com/ml/glibc-bugs/2011-02/msg00090.html). Production Linux code almost completely consists of ugly hack, like following:
__pid_t __cdecl sub_813C7B8()
{
__pid_t result; // eax@1
char command; // [sp+18h] [bp-200h]@2
result = fork();
if ( !result )
{
sprintf(&command, "/bin/bash -c \"sleep 5; kill -9 %d\" &> /dev/null &", PID);
system(&command);
sprintf(&command, "/bin/bash -c \"sleep 8; kill -9 %d\" &> /dev/null &", PID);
system(&command);
sprintf(&command, "/bin/bash -c \"sleep 10; kill -9 %d\" &> /dev/null &", PID);
result = system(&command);
}
return result;
}