[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Hurd FS hierarchy (was Re: LD_LIBRARY_PATH troubles)

From: B. Douglas Hilton
Subject: Re: Hurd FS hierarchy (was Re: LD_LIBRARY_PATH troubles)
Date: Mon, 25 Mar 2002 23:12:15 -0500
User-agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:0.9.9) Gecko/20020310

Hi! Yeah, you are on the right track, I can exemplify a
few of your comments.

Richard Kreuter wrote:

On Mon, Mar 25, 2002 at 06:08:49PM +0100, Jeroen Dekkers wrote:

I think it would be nice to post the GNU things to the mailinglist
before they'll release the next version, which will be soon.

I've merged what I've understood from Thomas Bushnell's and Jeroen
Dekkers's latest comments.  I also added a line about sometimes
calling GNU GNU/Hurd when a distinction must be drawn between GNU/Hurd
and GNU/Linux.

Same punctuation: +++ is stuff I added, <> for editorial remarks.


The following things need to change in the FHS itself:

3.5.1 Grub may place its configuration file under /boot.

This is easy. Suppose you have hurd on hdb2 and boot from hda,

grub> install (hd1,1)/boot/stage1 (hda) (hd1,1)/boot/stage2 -p (hd1,1)/boot/menu.lst

All you need are stage1, stage2, and menu.lst in /boot

3.9.3 I'm not sure /lib/modules is the right place for kernel
modules. I think we should move it to the GNU/Linux specific annex.

Since when did Hurd have modules? Its a microkernel... all "modules"
are handled in user-land by translators. /hurd is like /lib/modules.

5.6.1 says "it not supported under Linux", which is too OS-specific.

Makes no sense. Hurd / gnuOS is not Linux, and never was.

6.2  GNU

This is the annex for the GNU operating system.  +++We sometimes refer
to this as the GNU/Hurd system, in cases where it is necessary to
distinguish the GNU system from other systems that use large amounts
of GNU software.
 <A chicken's locution for GNU/Linux.  :)  >

In fact, the os itself is "gnu" OS... "Hurd" is somewhat archaic, yet
greatly beloved, and is a "strong indication" that there is no Linux
kernel to be found.

The GNU system is special compared to other UNIX-like operating
systems in the way it treats the filesystem namespace. The filesystem
namespace is very flexible, you can do anything with it what you
want. That's why it is reasonable to specify where you should find
directories and files, but not the way those directories and files
should get there.

No, this is a case where the underlying structure is really not important
to the "user" because of the powerful nature of the translator mechanisms.
Do not confuse actual system layout with apparent layout. Because Hurd
is so immature right now, most users are in fact the administrator, but
there will come a day when the administrator can set up a completely
pseudo-filesystem which obscures the "real" underlying system. This will
probably be a GUI oriented type thing, similar to a MACish style with
folders and such from the home directory and the *NIXy aspect hidden
and somewhat unimportant.

As a rule, distributors who wish to maintain compatibility between
their distributions of GNU, GNU/Linux, or other systems may maintain
symbolic links to files whose locations on GNU systems differ from
their locations on other systems.  This accomodates programs with
"hard-coded" filenames.

But Debian is the juggernaut. To remain compatible with itself is a
major challenge. Debian sets the standard from necessity, not because
it tries to remain compatible. Debian does not need to be compatible
with other distributions, it only needs to be coherent. Debian is System V.

6.2.x  / : The Root Filesystem

It's allowed to create a new subdirectory of the root filesystem by
the distribution creator or user.

As long as you are root you can do whatever the hell you want.

6.2.x  /boot : Static files of the bootloader

<If no exception for grub's configuration file is made for the FHS in
general, then we should allow it here.>

I have my own grub partiton which boots to FreeDOS, and the files are
in /boot. You can set it up however you want. Nothing says that grub
needs to be an integral part of the root filesystem.

As for the rest, you seem to have the general idea. Read any
book on the origins of Unix and it will explain the tree structure.
Hurd has some exceptions, but they are not particularly notable.


6.2.x  /bin : Essential user command binaries (for use by all users)

The following utilites used for system boot and recovery must be
located in /bin:


The following utilities may be omitted from /bin:


The GNU system has been designed with a goal of providing users with
more power than they have traditionally been afforded on Unix and
Unix-compatible systems.  As a result, several system binaries are
useful to normal users and should be found in /bin:

<...what else?>

Distributors wishing to maintain compatibility with non-GNU/Hurd
systems may create symbolic links in the /sbin directory to these
binaries (for use, e.g., by scripts with hard-coded filenames).

6.2.x  /com : Shareable, variable data.

The /com hierarchy contains files architecture-independent data files
which the programs modify while they run.  Some of these files have
been placed in /var or /usr in the past; in case a distributor wishes
to maintain compatibility with systems that expect to find these files
in /var or /usr, symbolic links to files in /com may be used.


Having recognized the distinction between shareable and non-shareable
mutable data files, the authors of the GNU Coding Standards intend
that all shareable mutable data files be found under a single
directory, to simplify management of shared file hierarchies among


The /com hierarchy should contain the following directories:

<...what else?>

6.2.x  /hurd : The Hurd servers

/hurd contains the Hurd server binaries. Servers with .static appended
to their name must be statically linked servers, servers without
.static appended may be dynamically linked servers.

The following servers, or symbolic links to servers, are required in

auth[.static]  The standard authentication server.
exec[.static]  The standard execution server.
init[.static]  The standard initialization and state maintaining server.
proc[.static]  The standard process server.

6.2.x  /libexec : Executables only run by other programs

The directory for installing executable programs to be run by other
programs rather than by users.

+++The following are example programs that should be found in /libexec,
if they exist on a system:

<...and so on...?>

+++Note that some programs that are normally run only by other
programs may occasionaly be run by users under certain circumstances,
such as debugging.  Nevertheless, such programs are to be placed in

Distributors wishing to maintain compatibility with non-GNU/Hurd
systems may create symbolic links to files in /libexec under /bin,
/sbin, /lib, or other locations as needed.


A number of programs are intended to be run only by other programs.
These programs therefore don't belong in directories containing
commands for users.


6.2.x /sbin :
The following utilities may be placed in /bin:

Distributors wishing to maintain compatibilty with non-GNU/Hurd
distributions may create symbolic links in /sbin to files located in
other locations on GNU systems.

6.2.x  /servers : Standard location where Hurd servers translate

This is the directory Hurd servers translate rendezvous filesystem
nodes in standard locations, so that other programs can easily find
them and use server-specific interfaces.

+++/servers/crash          The node where the crash server translates.
/servers/exec      The node where the exec sever translates.
/servers/password  The node where the password server translates.
+++/servers/proc           The node where the process server translates.
+++/servers/startup        <What's this do?>

+++In addition, all files with names of the form /servers/socket/N,
where N is a string of digits, are reserved for <somebody who knows
the score to finish this sentence>.  Symbolic links to these files are
also permitted in the /servers/socket directory, as shown in the
example below.

/servers/socket/1  The node where the pflocal server translates.
/servers/socket/2  The node where the pfinet server translates.
/servers/socket/pflocal  A symbolic link to /servers/socket/1
/servers/socket/pfinet   A symbolic link to /servers/socket/2.

6.2.x  /usr : Secondary Hierarchy

In the GNU system, /usr is a symbolic link to /. The / and /usr
directory have thus the same name and names of files and directories
within them must not conflict.


The GNU Hurd has a special filesystem, called shadowfs, which can
"merge" directories. Thus everything from different sources can be
merged (both static and variable data) and /usr isn't really needed.d
/usr, everything will be found under /.


6.2.x  /usr/share/info

This directory required as the primary GNU Info system directory.

<We also might add a subsection describing the info dir layout.>

6.2.x  /usr/share/man  This directory is optional on a GNU system.

6.2.x  /usr/X11R6 : X Window System, Version 11 Release 6

This directory should not be used. Instead the X Window System should
be placed in /.

6.2.x  /var : Mutable, machine-specific data files

The /var hierarchy should normally not contain files that can be
shared among host systems.  These files should instead be found in

Distributors wishing to maintain compatibility with non-GNU/Hurd
systems may create symbolic links under /var to files in /com.


Having recognized the distinction between shareable and
non-shareable mutable data files, the authors of the GNU Coding
Standards intend that all unshareable mutable data files be found
under a single directory, to simplify management of shareable file
hierarchies among host systems.


6.2.x  /var/spool/cron : cron and at jobs

This directory contains the variable data for the cron and at

Help-hurd mailing list

reply via email to

[Prev in Thread] Current Thread [Next in Thread]