This summer, I'm working on DebGraph
(for Debian, as part of GSoC) with Robert Lemmen. Below is a
brief description of where we're headed.
DebGraph is a tool that provides a simple, intuitive
interface to the Debian package graph. The package graph
contains information about packages (name, version,
description, etc), their dependencies, and other useful
details. By providing an easy way to interact with this
graph, DebGraph enables useful analyses that can identify
interesting or problematic constellations.
As an example, it is helpful for the Debian QA team to track
cyclic dependencies (that is, packages that [in]directly
depend on themselves). Such dependency cycles can be
symptoms of package problems, and therefore it is important
that there is tool support for locating and
tracking them.
To date, many tools have been written to perform various
tasks that involve analyzing Debian packages. The `lintian'
tool performs tests on packages to ensure that they are
complete. `Britney', another package
analysis tool, assists the release and quality assurance
teams by verifying package dependencies before promoting
packages from the `unstable' distribution to `testing'.
As the number of packages in Debian has grown, the
complexity of the package dependency graph has become
difficult to manage. Development of new scripts that
interact with package information involves addressing
that complexity. This involves writing code that can
represent the graph in memory and manipulate it, and such
work is typically delicate and error-prone. It would be
helpful to separate this functionality into a library that
could provide generic graph infrastructure to anyone who
needs to query or manipulate the Debian package dependency
graph.
DebGraph aims to provide this generic infrastructure through
a set of graph operators (e.g., union, intersection,
find-cycles, and so on) that can be composed in complex ways
to facilitate powerful analysis of
the graph. In addition, the development of a functional
query language will enable graph queries from
domain-specific languages, thus removing the constraint of
using C++ code to perform queries.
This work relieves developers of the burden of duplicating
graph-specific code when developing new tools (or extending
existing ones) that need access to the package dependency
graph. By providing a generic infrastructure to support
such tools, DebGraph enables tool developers (and others in
the community) to focus on the issue at hand without
becoming swamped with low-level details.