The Filesystem Hierarchy Standard is probably something you’ve never heard of, but if you spend a lot of time on Linux or Mac systems (especially in a command line) you’ve probably run across it now and then. The FHS establishes a general directory structure for operating systems, largely based on ancient UNIX ideas. Read about it at the Wikipedia link above and see if you, as a normal human being, can make any sense of it.

Ultimately, the FHS is far more confusing than it is useful. I can navigate around it pretty well simply because I understand it after years of using it, but most user-facing operating systems avoid exposing their users to it lest they get lost (details below).

The folks over as OSNews have an interesting piece about the FHS and its problems, and GoboLinux which is the only somewhat-major Linux distribution to deviate drastically from the FHS. Personally I have very limited experience with GoboLinux, since I’m very comfortable with Ubuntu as my distro of choice, but I absolutely applaud the effort to move to a better Linux filesystem structure.

As I mentioned, most operating systems try to make the file system structure digestible for the user. Even those that adhere to the FHS structure with and its antiquated three-letter directory names generally hide it from the user or, at minimum, discourage messing with it.

  • Mac OS X, which generally follows the FHS, has hidden it from users almost entirely. Users see a simple hierarchy of ‘Applications’ (where the programs are), ‘Library’ (where the config files are), ‘System’ (where the OS lives), and ‘Users’ (with sub-folders for each user, within which are all your files and user-specific settings). Virtually all normal interaction with your computer involves only this simplified structure.
  • Windows, which does not follow the FHS at all, has a somewhat logical structure of ‘Documents and Settings’ (with sub-folders for each user), ‘Program Files’ (where the programs are), and ‘Windows’ (where the OS lives). This does have serious flaws though—most settings are stored in an indecipherable registry system, and ‘Program Files’ is a chaotic pile of gibberish rendered understandable only by separate shortcuts in your Start Menu.
  • Mainstream Linux distributions like Ubuntu don’t hide the FHS from the user, but the user rarely has to interact with it directly. Most of your interaction is in the FHS-defined ‘home’ directory (which, like equivalents on Mac and Linux, has sub-folders for each user account), though even the home directory includes system and application configuration files that are hidden completed from the user. Generally software installation is through a package manager like Synaptic, which is a pretty cool system. While this works well, once you deviate from simple usage you find yourself in a world of hurt. Linux software installation of applications that aren’t available through your package manager is usually a nightmare, since most Linux software doesn’t have a Windows-style installer, and you can’t just plop it somewhere on your system and have it work like on Mac OS X.

GoboLinux’s structure somewhat resembles that of Mac OS X. ‘Programs’ is where your programs are, ‘Users’ is where your user files are (in sub-directories), and ‘System’ is where core OS files are. Nice! It’s time that w put the FHS to a well-needed rest and move to something more user-centric, and GoboLinux seems to be on the right track.

Personally, I am partial to the Mac system (though it does have flaws). I’d love to see software installation on Windows and Linux be as easy as dragging an application to the Programs/Applications/Software folder. It needs to be smarter though—some Mac apps, especially those more complicated apps, still require an installer. Boo! Removing an application is often as easy as dragging the application to the trash, though the system should be smart enough to clean up files left by that application elsewhere on your system automatically. I also love the Mac ‘bundles’, where you see an object in your Applications menu called ‘TextEdit’, which is actually a folder (though it doesn’t look like one) with all the necessary TextEdit application files within. This means that you don’t need to have Start Menu shortcuts or anything like that, since your Applications folder itself is clean and simple to navigate directly.

Having said all that, there’s something to be said for Linux package management systems. Since essentially all of my software on my Linux machines is directly from the Ubuntu software repositories, I’m automatically notified when updates are available—whether it’s for a core operating system component or a random application I installed later—through a unified update system.

So it turns out I want everything: a file system that is easy and logical to navigate with drag-and-drop software install and removal, where configuration files are accessible and removable (like on Mac OS X where deleting a config file is a quick, easy way to restore an application’s settings to default), but where the OS is smart enough to monitor what I’ve been doing in the file system and let me know about updates and clean up after itself.

We’re moving slowly-but-surely in the right direction (well, in the Mac and Linux worlds anyway), but at a glacial pace and usually through fringe and third-party projects like GoboLinux and the Sparkle Framework (which allows seamless [though not centralized] software updates for Mac applications that take advantage of it). No operating system that I’m aware of has yet captured each of my above desires, though Mac OS X (especially if it were a bit more self-aware and had a user-friendly software repository system) would come very, very close.