In UNIX systems, traditionally most software is installed in a common directory
hierarchy, where files from various packages live beside each other, grouped by
function: user-invokable executables in /bin
, system-wide configuration files
in /etc
, architecture specific static files in /lib
, variable data in
/var
, and so on. To allow clean installation, deinstallation, and upgrade of
software packages, GNU/Linux distributions usually come with a package manager,
which keeps track of all files upon installation/removal in some kind of
central database.
An alternative approach is the one implemented by GNU Stow and GNU
Guix: each package is
actually installed in a private directory tree. The actual standard directory
structure is then created by collecting the individual files from all the
packages, and presenting them in the common /bin
, /lib
, etc. locations.
While the normal Stow or Guix package (for traditional UNIX systems) uses symlinks to the actual files, updated on installation/deinstallation events, the Hurd translator mechanism allows a much more elegant solution: stowfs (which is actually a special mode of unionfs) creates virtual directories on the fly, composed of all the files from the individual package directories.
The problem with this approach is that unionfs presently can be launched only once the system is booted up, meaning the virtual directories are not available at boot time. But the boot process itself already needs access to files from various packages. So to make this design actually usable, it is necessary to come up with a way to launch unionfs very early at boot time, along with the root filesystem.
Completing this task will require gaining a very good understanding of the Hurd boot process and other parts of the design. It requires some design skills also to come up with a working mechanism.
Possible mentors: Carl Fredrik Hammar (cfhammar)