Ten Things I Dislike About Linux
I've written about things that irritate me in Bill's platforms. Here, to show that I can be an equal-opportunity disparager/disdainer/curmudgeon, are 10 things I dislike about Linux.
First, some ground rules. I'm not impressed by the argument, "But that's how $PLATFORM does it" (where $PLATFORM is some other platform). And, if your friend Jeffrey jumped off a cliff would you follow him?
LG is about
...making Linux just a little more fun!
and I claim that the things I'm grumbling about diminish the fun I get out of Linux.
- I don't think I can get her to do it. - You mean it'll be difficult. - Very. - Well, this is not Mission Difficult, Mr. Hunt, it's Mission Impossible. Difficult should be a walk in the park for you. -- Mission: Impossible II
Sure, some of the things I grumble about will be difficult to change. But some wouldn't be so difficult. What did JFK say about that?
[We do these things], not because they are easy, but because they are hard, because that goal will serve to organize and measure the best of our energies and skills, ... -- John F. Kennedy, "We Choose to Go to the Moon" Delivered at Rice University in Houston, Texas on 12 September 1962.
Clearly, I subscribe to the notion that difficulty should not prevent us from attempting to make things better.
Please don't say the GNU software is not Linux. If that's your argument, then read the title of this article as Ten Things I Dislike About GNU/Linux.
So here, in no particular order are ten things I dislike about Linux.
1. Silly restrictions
mkdir /tmp/example cd /tmp/example rmdir . rmdir: .: Invalid argument
But "rmdir ../example" is OK. You know what I mean. Just do it.
Ben Okopnik reminded me of:
cp /tmp/foo # Isn't it bloody OBVIOUS? Copy it *here*!
ln -s /tmp/foo
does exactly the corresponding task.
2. Backward compatibility
There are countless examples. Here are a few:
The glibc fiasco. The C compiler disaster. Dynamic libraries in general. Every new version of emacs.
When you upgrade to Emacs 22 from a previous version, some older versions of external Lisp packages are known to behave badly. So in general, it is recommended that you upgrade to the latest versions of any external Lisp packages that you are using. The following input methods were removed in Emacs 22.2, but this was not advertised...
Compare that with FreeBSD:
In most cases a package created for an older version of FreeBSD can be installed and used on a newer system without difficulty since binary backward compatibility across major releases is enabled by default.
3. Multiple distros
Are they really necessary? Fedora is not Ubuntu's primary enemy. Surely that role ought to be reserved for Microsoft. In the meantime, Bill has an army of technical people all marching to the beat of a single drummer, while every 2 or 3 Open Source people are creating their own separate orchestra. There is one Microsoft, one Apple and countless flavours of Linux.
In my opinion, FreeBSD gets the balance just about right. Very little is forced upon the user. The range of packages is huge. There is a single (default) structure or framework with which all packages have to comply. But, within the framework there is ample opportunity to satisfy almost every conceivable whim.
FreeBSD is far from perfect; I might write about that one day, but this is a Linux forum.
4. Too many desktop producers trying to emulate the offerings from Bill
I don't do Windows. There are many reasons, but one of them is look and feel. The way Windows does many things messes with my head. I could go on at length - I have in the past. But this article is about Linux.
All I'm trying to suggest is that Linux does many (most) things really really well. Let's celebrate those things and let's celebrate the difference.
5. Uninterruptible commands
There are various examples, but I'll use network file systems.
You NFS-mount a disk on a remote system, e.g.
mount tsf2:/spare /p6/spare
For some reason, the remote machine is inaccessible; perhaps the network is down, perhaps the machine has halted.
You now issue a df command (because you weren't concentrating):
df -h Filesystem Size Used Avail Use% Mounted /dev/hdc9 4.6G 4.3G 67M 99% / /dev/hdc2 97M 16M 76M 17% /boot tmpfs 363M 0 363M 0% /dev/shm /dev/hdc7 20G 16G 3.4G 83% /home /dev/hdc8 7.4G 851M 6.2G 12% /opt
... and then the session just hangs. You can't use any key to regain control. In such situations, when I've SSHed into a machine, I often find it quicker to go
to abort the entire ssh session and SSH back in, rather than wait for the df command to return control to me.
You are supposed to be able to use one of
^\ but often both are powerless. Sometimes
works (followed by something like "
but that's unnecessarily obscure, and it doesn't always work.
Surely you can create a command that means "I understand the consequences, just do it." (Or even "hang the consequences, just do it.") In effect, I've shown that disconnecting the SSH session achieves the required result. Just give me a keystroke to do it.
Also, of course, shutting down the machine seems to make all sorts of magic possible. It's just that shutting down the machine is somewhat drastic.
6. Network file systems
This applies to both NFS and Samba.
# umount /mnt/tsf500/C umount: /mnt/tsf500/C: device is busy umount: /mnt/tsf500/C: device is busy
umount -f /mnt/tsf500/C umount2: Device or resource busy umount: /mnt/tsf500/C: device is busy umount2: Device or resource busy umount: /mnt/tsf500/C: device is busy
I'm the !@#$%^&* human.
However, I have learnt about the "-l" option:
-l Lazy unmount. Detach the filesystem from the filesystem hierarchy now, and cleanup all references to the filesystem as soon as it is not busy anymore.
It's not perfect, but it is better.
6. Memory handling
My example here is Firefox. I'm certain that Firefox leaks memory. And I understand that I am an extremely heavy user of Firefox. As I write, I have 7 Firefox windows running for a total of 40 tabs. And I am trying very hard to restrain myself. I'm annoyed at how often I lose my machine. I could easily be running 4 or 5 times as many Firefox sessions.
As Firefox consumes more and more resources, in particular memory, things start to go critical. Sometimes, if I'm quick, I can start deleting sessions and get control back. Other times, I'm left in a state where only a reboot can give me back control.
I surmise that what happens is that, after Firefox has used too much memory, Linux cannot recover. It doesn't have to be that way. On my FreeBSD system, I've gone through the same scenario, but the only thing that suffers is Firefox itself. I get a message telling me that Firefox has misbehaved and has been killed. The OS survives.
I miss ipfilter. Where is the equivalent of "ipf -F a"?
Part of the problem arise from the fact that iptables is incoherent. There is a set of commands to do various things ("iptables ..."), but a completely different syntax is used in iptables-save and iptables-restore.
Further, there is asymmetry. On a machine on which no iptables commands have been issued, iptables-save produces an empty answer (zero lines). But once iptables has been invoked, one cannot get back to this state with only iptables commands.
I have written a script to achieve what I want, but it just shouldn't be that difficult.
8. Dot files
Here's one of my directories:
------------------------------------------------------------------------ ls -la total 144 drwxr-xr-x 6 henryg henryg 4096 Jun 12 11:32 . drwxr-xr-x 15 henryg henryg 4096 Jul 20 09:54 .. drwxrwxr-x 3 henryg henryg 4096 May 9 14:35 .ENV. -r--r--r-- 1 henryg henryg 715 Feb 20 2005 .bash_profile -rw-r--r-- 1 henryg henryg 5347 May 1 13:11 .bashrc -r--r--r-- 1 henryg henryg 4692 Feb 20 2005 .bashrc.01 -rw-rw-r-- 1 henryg henryg 4529 Jan 14 2010 .bashrc.02 -rw-r--r-- 1 henryg henryg 18734 May 6 11:21 .emacs -rw-r--r-- 1 henryg henryg 20539 May 6 11:12 .emacs.give_up_for_the_moment -r--r--r-- 1 henryg henryg 18323 Jan 16 2007 .emacs.pre_FreeBSD -r--r--r-- 1 henryg henryg 40 Feb 4 1999 .less -rw------- 1 henryg henryg 760 Aug 4 18:22 .lesshst -r--r--r-- 1 henryg henryg 1242 Feb 4 1999 .lesskey -rw-r--r-- 1 henryg wheel 12039 Jun 12 10:13 .login_sh drwxr-xr-x 2 henryg henryg 4096 Jun 26 12:37 .ssh -r--r--r-- 1 henryg henryg 183 Jul 29 2007 .zile lrwxrwx--- 1 henryg henryg 6 Jan 19 2010 RCS -> ../RCS dr-xr-xr-x 2 henryg henryg 4096 Jan 14 2010 bash dr-xr-xr-x 4 henryg henryg 4096 Jan 14 2010 bin ------------------------------------------------------------------------
19 entries. In this case, most have dot (period) as the first character of their name.
With 'ls', I can select the entries which do not start with a dot:
------------------------------------------------------------------------ ls -l total 8 lrwxrwx--- 1 henryg henryg 6 Jan 19 2010 RCS -> ../RCS dr-xr-xr-x 2 henryg henryg 4096 Jan 14 2010 bash dr-xr-xr-x 4 henryg henryg 4096 Jan 14 2010 bin ------------------------------------------------------------------------
I can obviously select all entries (using the first command above).
I can select all entries except for . and .. using:
------------------------------------------------------------------------ $ ls -lA total 136 drwxrwxr-x 3 henryg henryg 4096 May 9 14:35 .ENV. -r--r--r-- 1 henryg henryg 715 Feb 20 2005 .bash_profile -rw-r--r-- 1 henryg henryg 5347 May 1 13:11 .bashrc -r--r--r-- 1 henryg henryg 4692 Feb 20 2005 .bashrc.01 -rw-rw-r-- 1 henryg henryg 4529 Jan 14 2010 .bashrc.02 -rw-r--r-- 1 henryg henryg 18734 May 6 11:21 .emacs -rw-r--r-- 1 henryg henryg 20539 May 6 11:12 .emacs.give_up_for_the_moment -r--r--r-- 1 henryg henryg 18323 Jan 16 2007 .emacs.pre_FreeBSD -r--r--r-- 1 henryg henryg 40 Feb 4 1999 .less -rw------- 1 henryg henryg 760 Aug 4 18:22 .lesshst -r--r--r-- 1 henryg henryg 1242 Feb 4 1999 .lesskey -rw-r--r-- 1 henryg wheel 12039 Jun 12 10:13 .login_sh drwxr-xr-x 2 henryg henryg 4096 Jun 26 12:37 .ssh -r--r--r-- 1 henryg henryg 183 Jul 29 2007 .zile lrwxrwx--- 1 henryg henryg 6 Jan 19 2010 RCS -> ../RCS dr-xr-xr-x 2 henryg henryg 4096 Jan 14 2010 bash dr-xr-xr-x 4 henryg henryg 4096 Jan 14 2010 bin ------------------------------------------------------------------------
How do I select just the ones which begin with a dot?
I can do it, but I have to use excruciating contortions. For 'ls', I can use the very unsatisfactory
ls -lA | fgrep ' .'
For many years I have used the close approximation
ls -d .??*
to refer to entries which begin with a dot but exclude . and .. with reasonable success.
Further, what if you want to do some form of treewalking? You want all entries (except . and ..) irrespective of whether their name begins with a dot or not.
Recently I discovered bash's
shopt -s dotglob
which does not help with ls, but does have the redeeming virtue that it "flattens out" the name space and treats all entries uniformly whether the entry starts with dot or not. Now the problem of selecting files that begin with a dot reduces to the problem of selecting any group of files with some commonality.
Further, because it excludes . and .. it allows simple constructs like
to behave nicely. See also nocaseglob.
9. Mouse Selection
I know that this applies to all platforms and most products. I'm complaining here because, in my mind, Linux is about freedom - and I would hope that means freedom from stupidity. This applies to Firefox and, from my experience, most GUIs.
Here's a bit of screen:
Line 1 Line 2 x Line 3 Line 4 Line 5
The "x" represents the cursor position. I press-and-hold the left button, and begin to swipe downwards and to the right. As the mouse hits one of the L's (say the first character in "Line 3"), all the text above this point is highlighted. I know that Microsoft does it that way, but why?
It's not as if I am able to select an area. If instead I start with my mouse over the "n" of "Line 3" and I swipe downwards and to the right, I won't only pick up text to the right of the "n" in the next line, I'll get all of the next line.
So it understands lines, but it behaves as if that understanding only applies sometimes. It seems to me that this violates the Principle of Least Surprise.
Where it's particularly galling is when the text I'm swiping is near the top of what I can see, because then I don't realise that the stuff above has been selected - until I paste what I believe is a couple of lines only to discover that I have pasted several hundred lines. Oops! Talk about Least Surprise; I'm astonished!
What I want is that, if I put my cursor somewhere on a line and select, I only pick up from the original point of my cursor to the right and down. Too difficult, you say? Well, maybe. But consider this. My workaround for this scenario is to select from the other end and swipe to the left and up to the beginning. So, if I want to select Lines 3 and 4, I place my mouse out to the right on line 4 (sometimes a long way out), like this:
Line 1 Line 2 Line 3 Line 4 x Line 5
And, guess what. First, it works! If I begin to swipe to the left and up, I do NOT get any of Line 5 in my selection. And, second, surprise, surprise, as I continue to swipe to the left, no matter how far left of the L in Line 3 I go, I never get anything ABOVE Line 3 - even if I go out of the window and off the screen to the left!
As far as I'm concerned, don't tell me it can't be done (that's virtually never true), or that it's too hard (that's just a matter of will) - just do it.
Why did Linux decide to do away with filetypes?
I think the various DEC operating systems had the best handle on
filetypes. Let's say I wrote a script,
pdfsplit.sh. I could have the
filetype "sh" to indicate that this script is intended for execution
by /bin/sh, but I could invoke it either by using the full name, or
simply by using the part of the name to the left of the dot,
in this case. It's just a little more elegant.
Then executables, e.g. 'ls', could be called something like ls.exe or ls.bin but still be invoked with "ls". When you list a directory, you would be able to tell what type most of the files were without having to run "file".
Magic numbers could still serve the purpose they have now.
So there you have them. I'm not even saying they are the 10 most annoying things. I'm sure other people would not be as irritated as I am with the items on the list. They might have a different list. I even suspect that, were I to start from scratch, I would produce a different list.
I am hoping to provoke some sort of response, preferably recommendations for mechanisms people have discovered to ameliorate the annoyance.
And, who knows? Perhaps in the long term, some people will agree with some of my grumbles and work towards improvement.
Henry has spent his days working with computers, mostly for computer manufacturers or software developers. His early computer experience includes relics such as punch cards, paper tape and mag tape. It is his darkest secret that he has been paid to do the sorts of things he would have paid money to be allowed to do. Just don't tell any of his employers.
He has used Linux as his personal home desktop since the family got its first PC in 1996. Back then, when the family shared the one PC, it was a dual-boot Windows/Slackware setup. Now that each member has his/her own computer, Henry somehow survives in a purely Linux world.
He lives in a suburb of Melbourne, Australia.