GoboLinux at a glance
What is GoboLinux?
GoboLinux is a modular Linux distribution: it organizes the programs in your system in a new, logical way. Instead of having parts of a program thrown at /usr/bin, other parts at /etc and yet more parts thrown at /usr/share/something/or/another, each program gets its own directory tree, keeping them all neatly separated and allowing you to see everything that's installed in the system and which files belong to which programs in a simple and obvious way.
This is what you see in the root of a GoboLinux system:
~] cd / /] ls Programs Users System Files Mount Depot
/Programs is where all programs reside. No exceptions. You can explore what is installed in the system by looking inside it:
Each program entry contains all files for that program, stored in a versioned subdirectory.
/] cd /Programs /Programs] ls AfterStep E2FSProgs Htop NTP Subversion ALSA-Driver Ed HTTPD OpenOffice Sudo ALSA-Lib Eject Hydrogen OpenSSH Swfdec ALSA-OSS Elinks IBM-Java2 OpenSSL Synaptics ALSA-Utils Ethereal ID3Lib Pango SysFSUtils Ardour Expat IEEE80211 Patch Sysklogd Audacity File IMLib2 Perl TCL Aumix Firefox InetUtils Pkgconfig TeTeX Autoconf Flac Intltool PodXTPro Texinfo Automake Flex IpodSlave Popt TIFF Bash Fontconfig Iptables PPP TiMidity++ ... ... ... ... ...
Multiple versions of a program can be maintained simultaneously, so you can alternate between them as you desire, or even use both at the same time when necessary.
/Programs] find Bash Bash Bash/3.0 Bash/3.0/bin Bash/3.0/bin/sh Bash/3.0/bin/bash Bash/3.0/bin/bashbug Bash/3.0/info Bash/3.0/info/bash.info Bash/3.0/man Bash/3.0/man/man1 Bash/3.0/man/man1/bash.1 ...
/Programs] ls -l OpenOffice total 8 drwxr-xr-x 9 root root 4096 2005-09-22 01:07 1.1.4 drwxr-xr-x 3 root root 4096 2005-09-23 04:36 2.0 lrwxrwxrwx 1 root root 5 2005-09-23 04:36 -> 2.0 /Programs] ls -l GTK+ total 12 drwxr-xr-x 10 root root 4096 2005-10-02 01:39 1.2.10 drwxr-xr-x 9 root root 4096 2005-08-21 05:48 2.6.7 lrwxrwxrwx 1 root root 6 2005-10-02 01:39 -> 2.6.7 drwxr-xr-x 4 root root 4096 2005-10-02 01:39 Settings
How can this possibly work?Just like we use the filesystem to store the programs in an organized way, we also use it to index the files by category so that the system can find a needed file without scanning hundreds of program entries. In GoboLinux, this is done with a series of directories containing symbolic links pointing to the actual files. Notice also how this gives you a handy view of "what package does file XYZ belong to".
The system is then configured to use these indices when looking for files:
/System/Index/lib] ls -l | cut -b 49- ... -> /Programs/GTK+/1.2.10/lib/libgtk-1.2.so.0.9.1 -> /Programs/GTK+/1.2.10/lib/libgtk-1.2.so.0.9.1 -> /Programs/GTK+/1.2.10/lib/libgtk.a -> /Programs/GTK+/1.2.10/lib/libgtk.la -> /Programs/GTK+/1.2.10/lib/libgtk-1.2.so.0.9.1 -> /Programs/GTK+/2.6.7/lib/libgtk-x11-2.0.la -> /Programs/GTK+/2.6.7/lib/libgtk-x11-2.0.so.0.600.7 -> /Programs/GTK+/2.6.7/lib/libgtk-x11-2.0.so.0.600.7 -> /Programs/CDRTools/2.01/lib/libhfs.a -> /Programs/Readline/5.0/lib/libhistory.a -> /Programs/Readline/5.0/lib/libhistory.so.5.0 -> /Programs/Readline/5.0/lib/libhistory.so.5.0 ...
~] cat /etc/ld.so.conf /System/Index/lib ~] echo $PATH /System/Index/bin ...
You will find indices for all main categories of files in the system: executables, libraries, headers, shared data files, manuals, and so on. Indexing is recursive, so if a series of programs share a directory definition to store a certain type of file, they automatically get their own index too (/System/Index/share/aclocal is an example).
Another important property of link-based indexing is that any references to non-existing files automatically become broken links, and therefore inactive. This makes it easy to spot and fix problems and, most importantly, ensures that the the index is always in sync with the actual functional state of the system. Say goodbye to the old problem of having the package manager complain that libXYZ is not installed even though you can see that it is there. If it's live in the links index, it's live in the system, and vice-versa.
But what about Unix compatibility?
The GoboLinux system layout seems to be a major departure from the Unix tradition. Does this mean all programs need to adjusted so that they work with the new layout? Fortunately, the answer is no. Through a mapping of traditional paths into their GoboLinux counterparts, we transparently retain compatibility with the Unix legacy.
~] ls -l /dev/null | cut -b 45- /dev/null ~] ls -l /bin/sh | cut -b 45- -> /Programs/Bash/3.0/bin/bash ~] ls -l /usr/include/stdio.h | cut -b 45- -> /Programs/Glibc/2.3.6/include/stdio.h
There is no rocket science to this: /bin is a link to /System/Index/bin. And as a matter of fact, so is /usr/bin. And /usr/sbin... all "binaries" directories map to the same place. Amusingly, this makes us even more compatible than some more standard-looking distributions. In GoboLinux, all standard paths work for all files, while other distros may struggle with incompatibilites such as scripts breaking when they refer to /usr/bin/foo when the file is actually in /usr/local/bin/foo.
You may have noticed that the Unix paths did not show up in the system root listing in the very first example. They are actually there, but they are concealed from view using the GoboHide kernel extension. This is for aesthetic purposes only and purely optional, though: GoboLinux does not require modifications in the kernel or any other system components. But our users seem to like it a lot. :-)
An online tour can only take you so far. There is no substitute to giving it a try yourself: GoboLinux is conveniently distributed as a Live CD, so you can explore the ins and outs of the system running it straight from the disc, even before installing it to your hard drive. Download a disc image and have fun -- if you're a newcomer, you'll probably find the more organized structure to be more comfortable as well; if you're a seasoned user, you'll certainly enjoy the finer control that a more modular, transparent system will give you.