A better reason for extensive (careful) use of symlinks...
Symbolic links do for filesystems (a kind of hierarchical database) what foreign keys do for relational databases.
With judicious use of both "forward" and "backward" symlinks (though I've not heard them referred to that way before), a distro could be designed where most things in /etc, /bin, /lib, and /sbin are symlinks to /usr/etc, /usr/bin, /usr/lib, and /usr/sbin. There could then be multiple versions of the /usr directory mounted someplace like under /initrd (initialize ramdisk). The filesystem could then manage, through careful creation and deletion of symlinks, which version was being used for each file at any given time.
Puppy Linux and some other distros use the unionfs and aufs filesystems to implement a variation of this concept.
The original O/S, as distributed, is kept static (unaltered) in permanent storage as a "bottom layer". When one of the files, such as /etc/hosts for example, is edited and saved, instead of changing the original, the filesystem creates a new copy in the topmost "working layer" on ramdisk. The filesystem then presents this copy, instead of the original, to the user.
The ramdisk copies are periodically (root user configurable) flushed in the background to a third layer which is also on permanent storage. Altered, ramdisk copies effectively overlay their saved versions which in turn overlay the static originals. Only the topmost copy is visible (for an unaltered file, this would be the original) so the file system looks completely typical to the user and other software.
This technique improves system speed and reliability...
- User-initiated file reads and writes are very fast since they always use ramdisk.
- Since the ramdisk layer only contains files recently altered, it stays small and functions like another cache.
- Flush to slower permanent storage is deferred to background processing.
- Copies can be made periodically of the "savefile" third layer, thus providing an "undo" capability for when configs or installs go wrong or malicious programs are detected.
Symlinks are what make all of this possible.
Answers to Questions...
How "high speed" is your setup?
The more memory you can give it, the more program can be kept in the ramdisk and thus the more responsive it will be. Starting a program from ramdisk is a bit faster than starting it from flash-memory (flashdrive, SD, etc.) and only takes a tiny fraction of the time needed to start the same program from a hard drive.
On my 300MHz 1999 Toshiba 4030CDT laptop with 64MB RAM, Puppy Linux 5.2.2 Wary, mostly based on Slackware, there's no room for much ramdisk so programs load from hard drive. Still, the 2D-GUI is quite responsive. I use it as the "console" connected via Synergy to all the other hosts.
At the other end of the scale is what I'm using now (via the laptop)... a Compaq S6010V running a 2.6GHz Celeron processor and 1.3GB RAM. The ramdisk "PuppySpace" has been allotted 512MB of which less than 200MB is currently in use. Loaded are Zim (a Python note-taking app), Geany editor/IDE, a terminal client with 5 sessions open, and 2 copies of Chromium with a total of 12 tabs of web pages active including Gmail.
how long does it normally stay up?
Because I'm constantly developing and changing configs, planned reboots are common. The uptime output for the Compaq is currently...
16:21:10 up 4 days, 7:28, load average: 0.06, 0.24, 0.30
Is it easy for the user to compile their own kernel from kernel.org and boot with it?
I can't address that as I've never done it. Though the Puppy Linux community is full of people that compile their own kernels for breakfast.
Is it something you run servers from?
All my systems are running either JWM or Openbox window managers (GTK+ based) but some work has been done setting up Puppy as a server as with LEMP and the Simplified Music Server Jukebox (mpdPup).
aufs? ...what's it good for? (over xfs/ext.
Aufs is a complete rewrite of unionfs. They both implement a union mount where multiple filesystems like xfs, ext3/4, etc. are mounted to the same mountpoint so they overlay each other.