[[!meta copyright="Copyright © 2008, 2009 Free Software Foundation, Inc."]]

[[!meta license="""[[!toggle id="license" text="GFDL 1.2+"]][[!toggleable
id="license" text="Permission is granted to copy, distribute and/or modify this
document under the terms of the GNU Free Documentation License, Version 1.2 or
any later version published by the Free Software Foundation; with no Invariant
Sections, no Front-Cover Texts, and no Back-Cover Texts.  A copy of the license
is included in the section entitled
[[GNU Free Documentation License|/fdl]]."]]"""]]

[[!meta title="Hurdish Package Manager for the GNU System"]]

Most GNU/Linux systems use pretty sophisticated package managers, to ease the
management of installed software.  These keep track of all installed files, and
various kinds of other necessary information, in special databases.  On package
installation, deinstallation, and upgrade, scripts are used that make all kinds
of modifications to other parts of the system, making sure the packages get
properly integrated.

This approach creates various problems.  For one, *all* management has to be
done with the distribution package management tools, or otherwise they would
loose track of the system state.  This is reinforced by the fact that the state
information is stored in special databases, that only the special package
management tools can work with.

Also, as changes to various parts of the system are made on certain events
(installation/deinstallation/update), managing the various possible state
transitions becomes very complex and bug-prone.

For the official (Hurd-based) GNU system, a different approach is intended:
making use of Hurd [[translators|hurd/translator]] -- more specifically their
ability to present existing data in a different form -- the whole system state
will be created on the fly, directly from the information provided by the
individual packages.  The visible system state is always a reflection of the
sum of packages installed at a certain moment; it doesn't matter how this state
came about.  There are no global databases of any kind.  (Some things might
require caching for better performance, but this must happen transparently.)

The core of this approach is formed by [[hurd/translator/stowfs]], which
creates a traditional Unix directory structure from all the files in the
individual package directories.  But this only handles the lowest level of
package management.  Additional mechanisms are necessary to handle stuff like
dependencies on other packages.

The goal of this task is to create these mechanisms.

Possible mentors: Ben Asselstine (bing)

Exercise: Make some improvement to any of the existing Hurd translators.
Especially those in [hurdextras](http://www.nongnu.org/hurdextras/) are often
quite rudimentary, and it shouldn't be hard to find something to improve.