Debian Dependency Graph Analysis Results

# Table of Contents

- Source Graph
  - Type 1 Self-Cycles
  - Type 2 Self-Cycles
  - Type 3 Self-Cycles
- Build Graph
  - Amount of Cycles through Edges
  - Amount of Missing Build Dependencies
  - Cycles
  - Feedback Arc Set
  - Only Weak Build Dependencies Missing
  - Ratio Binary Heuristic
  - Ratio Source Heuristic
  - Strong Articulation Points
  - Strong Bridges
  - Vertex Statistics

# Global Options

- Hide Source Graph
- Hide Build Graph

# Toggle Stats

- Source Graph
  - Show Type 1 Self-Cycles
  - Show Type 2 Self-Cycles
  - Show Type 3 Self-Cycles
- Build Graph
  - Show Amount of Cycles through Edges
  - Show Amount of Missing Build Dependencies
  - Show Cycles
  - Show Feedback Arc Set
  - Show Only Weak Build Dependencies Missing
  - Show Ratio Binary Heuristic
  - Show Ratio Source Heuristic
  - Show Strong Articulation Points
  - Show Strong Bridges
  - Show Vertex Statistics

# Toggle SCCs

Click on the table headers to sort by that column. Shift+Click allows to sort by multiple columns.

Hover over a package name for architecture and version information.

# Source Graph

The source graph only contains source package vertices and is therefore the natural choice for calculating a build order. But it is also the graph type that can be used to identify strong dependency relationships between source packages. It can therefore be used to identify strong cycles which cannot be broken by choosing a different installation set. The smallest possible cycle is the self-cycle of a source package with itself.

amount of vertices: 0

amount of edges: 0

## Type 1 Self-Cycles

A source package directly Build-Depends on a binary package it itself builds

first prev next last
per page (0 rows in total)

source package | strongly depends on | because of the source package build depending on
--- | --- | ---
empty

## Type 2 Self-Cycles

A source indirectly strongly Build-Depends on a binary package it itself builds through one of its direct build dependencies.

first prev next last
per page (0 rows in total)

source package | strongly depends on | because of the source package build depending on
--- | --- | ---
empty

## Type 3 Self-Cycles

Not-strong self-cycles which can probably be solved by choosing a different installationset

first prev next last
per page (0 rows in total)

source package | in non-strong cycle with
--- | ---
empty

# Build Graph

The build graph is most important for finding build dependencies to remove to make the graph acyclic.

If you use JavaScript, then by default only statistics of the biggest strongly connected component will be displayed to avoid clutter. You can activate or deactivate the displaying of statistics for individual strongly components by using the respective checkboxes in the "Toggle SCCs" menu on the top.

Just as you can make a selection of the strongly connected components you want statistics to be displayed for, you can also make a selection of displayed statistic types in the "Toggle Stats" menu on the top.

amount of vertices: 1

amount of edges: 0

## Amount of Cycles through Edges

After enumerating all cycles in the graph up to a certain maximum length, the first column indicates the amount of cycles that the edge in the second column is part of. Removing an edge with many cycles through it, immediately breaks all those cycles.

## Amount of Missing Build Dependencies

Source packages which only lack very few build dependencies.

## Cycles

Small dependency cycles. The second column shows the packages involved in the cycle.

## Feedback Arc Set

A feedback arc set which would make the dependency graph acyclic.

## Only Weak Build Dependencies Missing

Source packages that only lack "weak" build dependencies as classified as such by this list.

## Ratio Binary Heuristic

Find binary packages that are only needed by few source package but need many other source packages to be built to satisfy their runtime dependencies. Maybe the source package that needs this binary package can be built without it?

In other words: The binary package in the second column draws in many source packages (amount in the third column) because of its installation set. If the source package in the fourth column could be built without the binary package in the second column, then the binary package in the second column would not be needed anymore and would therefor not draw in the amount of source packages in the third column.

The value of the first column is the result of dividing the value in the third column by the amount of packages in the fourth column

## Ratio Source Heuristic

Find source packages that build-depend on many others but are only needed by few binary packages which are in turn only needed buy a few source packages. Maybe the source packages that need those few binary packages can be built without them?

In other words: The source package in the second column draws in many binary packages as build dependencies (amount in the third column). But that source package must only be built because of few binary packages (fourth column) which in turn are only needed by few other source packages as build dependencies (fifth column). If the source packages in the fifth column could be built without the binary packages in the fourth column, then the source package of the second column would not be needed anymore and would therefor not draw in the amount of binary packages in the third column.

The value of the first column is the result of dividing the value in the third column by the amount of packages in the fifth column

## Strong Articulation Points

If the vertex shown in the second column could be removed from the dependency graph, then this strongly connected component would be broken into as many strongly connected components as shown in the first column.

## Strong Bridges

If the edge shown in the second column could be removed from the dependency graph, then this strongly connected component would be broken into as many strongly connected components as shown in the first column.

## Vertex Statistics

Several vertex degree based statistics. The first column shows the source vertex or installation set vertex name. The second column shows the amount of ingoing edges and the third column the amount of outgoing edges. The fourth column shows the ratio and the fifth column the sum of those two.