[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: Richard Kreuter
Subject: Re: Hurd FS hierarchy (was Re: LD_LIBRARY_PATH troubles)
Date: Sun, 24 Mar 2002 18:35:29 -0500
User-agent: Mutt/1.3.27i

On Sun, Mar 24, 2002 at 10:16:06PM +0100, Jeroen Dekkers wrote:
> I recently saw another proposal on the FHS mailinglist:
> /srv - data generated by users for the services the system offers
> It seemed that they agreed that is was right. Isn't this just a
> special case of /com and should they add /com instead?

  Maybe...according to the GNU standards, /com is for files that
programs modify, rather than users.


  I've begun to integrate the agreed-upon <?> parts of the discussion
into Mr. Dekkers's inital proposed GNU annex.  Every paragraph I've
added is prefixed with '+++', and editorial notes are enclosed in <>.

  I've made one change not already discussed on the list: the root of
the info system is mandated by the GNU standards to be $(prefix)/info.
So far, the proposed solution to conflicts between FHS and the GNU
Coding Standards has been to follow GNU, and permit symlinks in place
of FHS-mandated files, for compatibility with things that hard-code
filenames (pathnames).

The following things need to change in the FHS itself:

3.5.1 Grub needs its config in /boot and that should be allowed.
  <All commentors agreed.>

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.
  <All commentors agreed.>

4.11.3 /usr/share/info should be required in the GNU specific annex,
 <The GNU standards mandate /info; I (RK) have added it below.>

5.6.1 says "it not supported under Linux", what is too OS-specific IMHO.
  <No comments yet, I think.>

6.2  GNU

This is the annex for the GNU operating system. 

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.

+++ 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.

6.2.x  / : The Root Filesystem

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

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.>

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 placed in /bin:

devprobe <or is this useful only to sysadmins?>

+++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 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 should 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.

<Should networking daemons go here?>

<If things ought to be moved to /libexec from /sbin or /wherever, then
maybe there should be a stupid note about compatibility and symlinks.>


+++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 : 

Add parted.

+++Distributors wishing to maintain compatibilty with
non-GNU 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/exec      The node where the exec sever translates.
/servers/password  The node where the password server translates.
/servers/socket/1  The node where the pflocal server translates.
/servers/socket/2  The node where the pfinet server translates.

6.2.x  /usr : Secondary Hierarchy

In the GNU system the current practice is to have /usr a symbolic link
to /. The / and /usr directory have thus the namesame and names of
files and directories within must not conflict. It's recommended to
have the symbolink link.


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/info

This directory required as the primary GNU Info system directory.
+++This is an exception to the use of /usr/share for shareable, static
data files.

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

6.2.x  /usr/share/info

+++If this file exists, it should be a symbolic link to /usr/info.

+++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 /usr.

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

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

+++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

reply via email to

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