GoboLinux is a distribution which sports a different file system structure than ‘ordinary’ Linux distributions. In order to remain compatible with the Filesystem Hierarchy Standard, symbolic links are used to map the GoboLinux tree to standard UNIX directories. A post in the GoboLinux forums suggested that it might be better to turn the concept around: retain the FHS, and then use symbolic links to map the GoboLinux tree on top of it. This sparked some interesting discussion. Read on for more details.
As the poster explains: “Gobolinux tries to replace the legacy layout, instead of going the way of stacked layouts, giving us yet another standard layout, as if its underlying reasons were superior than FHS’. I think they’re not.” The reasons behind supporting the FHS is that it makes it easier for programs to find libraries and other files in standard locations. “FHS’s goal is to allow apps to find their files and other apps’ files and libraries in a portable way among Unix systems. It’s a _functional_ layout aimed at portability and interoperability.”
Several people chimed in to explain that the FHS does not, in fact, provide the confidence of finding files in expected locations. As user Shevegen explains:
There is no real confidence. Why do some programs have directories under
/etcand others do not? It makes no sense. Why did the FHS make an exception for X11R6 in
/usr? Why does there even exist any
/usr/localdebate WHILE keeping the
/optdistinction? Why am I forced to keep the distinction of
/sbin? Do I need to use the FHS suggested way for
/boot? What If i choose to use only one partition anyway and if I am the sole user of my system where in an extreme case I would not even need ANY new user at all?
It is a layer of ugliness upon ugliness.
Shevegen notes several other problems with FSH, such as the inability to run different versions of the same program side-by-side. “One huge problem of the FHS is that it does not easily allow one to have multiple versions of a program installed. This is what has lead to the whole .so.1.2.3 mess as well,” he explains, “It is a reason why on a typical Debian system one finds a NEW symlink called ruby under
/usr/bin which points to a ruby1.8 symlink (or vice versa). If one compiles ruby from source, he does not get any such arbitrary symlinks.”
Personally, I have invested time in coming up with more elegant ways to organise file systems too, but seeing I’m not a programmer, my work is of the theoretical and conceptual nature. The reason I have issues with the FHS has to do with the fact that is simply unclear. One directory is supposed to be for files of type xyz, but exceptions are made all over the place, and to make it even more fun, different distributions have different exceptions, but in the end, all still comply with the FHS. It is a god-awful mess.
The three letter directory names in UNIX-like operating systems are a relic of the past that should have died out and rotten away a long time ago. Us Linux, BSD, and (yes) Mac OS X users are still stuck with a system that predates the coming of Christ, and the only reason we still have it is because people are too afraid to make the big step and come up with something that is – in every possible way – better than the FHS, but still compatible. In a very brave and commendable effort, GoboLinux has done just that, but instead of being praised for bringing the filesystem structure of Linux systems to an acceptable, modern level, they get ridiculed and frowned upon as if they are some sort of heretics. To me, it is absolutely mind-boggling that distributions like openSUSE, Fedora, and Ubuntu call themselves “user-friendly” while still maintaining a directory structure that requires a degree in computer history to even remotely understand – including all its exceptions and quirks.
In many ways, the FHS resembles my native language, Dutch. Dutch in and of itself isn’t a particularly difficult language – it has a lot in common with both English and German, yet foreigners from both these countries have extreme difficulties in learning Dutch. Those difficulties stem from a very simple fact: Dutch is so difficult because it contains more exceptions than rules. Sure, Dutch has a set of clear rules, but each of those rules has dozens of exceptions, and those exceptions have exceptions, and then those have exceptions that in fact make them look conforming to the original rule, but in fact don’t. There’s a reason why I write more comfortably in English (almost) than I do in Dutch.
Getting back to the original discussion, the idea of using symbolic links to ‘cover up’ the original FHS is a clear-cut case of band-aid fever: it more or less admits the FHS is not very user friendly, but instead of actually fixing it, it just hides it for a while. In many cheesy movies and TV shows, you see cheating husbands flip over any photographs they might have of their wives. While this may postpone the feelings of guilt for a short while, it doesn’t actually make them go away for ever. Using symlinks to hide the FSH is like flipping over that picture of your wife. Or, as Shevegen illustrates:
I simply think the whole Linux world as such is like digging a tunnel in a mountain. One day you realize the tunnel is in the wrong direction, and water breaks into the tunnel, but making a change to the direction of the tunnel requires too much effort so you dig and dig and dig and use cheaper materials to stabilize the tunnel quicker, in order to grow it faster. You make more mistakes this way, but you cant change anymore, you dig faster and faster and faster.