The b(ack)log

A nice picture of (dependency) hell

“Dependency hell” refers the difficulty that arise when installing a software package that requires a lot of other software packages to be installed. The required software packages (or dependencies) may themselves require other software packages to be installed.

To give a better idea of why this can be difficult, I created the following graph.

circle graph of software dependencies
63988 Dependencies between 14319 software packages

This graph shows the dependencies between software packages in the Gentoo Linux operating system. In total there are 14319 packages with 63988 dependencies between them!

Packages are drawn on the circumference of the circle and a dependency is indicated by a line draw from one package to another. The color of a package is randomly generated, while the color of a line is determined by the package that is required by the other packages.

Every package has a line starting on the rim of the circle drawn radially outwards. The length of the line is determined by the amount of other packages that depend on the package.

Here is a closeup of a small part of the graph:
circle graph of software dependenciesThe most common dependencies are development tools. This is a list of the 15 packages with the most reverse dependencies:

Package # of reverse dependencies
dev-lang/perl 1559
dev-util/pkgconfig 1195
dev-lang/python 1047
x11-libs/gtk+ 1042
sys-devel/libtool 950
app-arch/unzip 878
sys-devel/automake 818
sys-devel/autoconf 766
dev-libs/glib 652
x11-libs/qt-gui 612
virtual/jdk 588
sys-apps/sed 575
x11-libs/libX11 545
app-admin/eselect-python 496
dev-util/cmake 455

The graph was created with data obtained from the Gentoo Portage tree and drawn using the Python Image Libray (PIL).