[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Getting rid of circular dependencies

Dear Debian developers,

Following a post to Debian-Devel-Announce, I would like to
discuss getting rid of circular dependencies.

Why ?
1) The semantic of Depends specified by Debian policy 7.2. does not allow
packages with circular dependencies to be installed at all:

      This declares an absolute dependency.  A package will not be
      configured unless all of the packages listed in its `Depends'
      field have been correctly configured.

This mean that dpkg have to go out of its way to install them, and doing
that break the expectation of packages expecting Depended package to be
configured before them.

2) There have been lots of evidence that circular dependencies create
problems during upgrade.  See bugs #310490 in particular

3) Circular dependencies make the job of the testing scripts harder.

4) Circular dependencies make bootstrapping a new plateform harder.

5) There is an urban legend that circular dependencies between packages
build from the same source are harmless. This is false of course. Being
part of the same source package has no effect of the Packages.gz file

Which ?

Preferably all of them.

Robert Lemmen was kind enough to set up a summary of current circular
dependencies: <http://debian.semistable.com/debgraph.out>
See the list for yourself.

The circular dependencies involving the largest number of packages are:

* libxtst6 libxtrap6 libxrandr2 libxp6 libxt6 libxmu6 libxi6 libxrender1
libxft1 libsm6 xlibs

* libgnorba27 libgnomeui32 libgnomesupport0 gnome-bin gnome-libs-data libgnome32

* xemacs21-gnome-nomule xemacs21-gnome-mule-canna-wnn xemacs21-gnome-mule 
xemacs21-nomule xemacs21-mule-canna-wnn xemacs21-bin xemacs21-support
xemacs21-mule xemacs21

* gnome-panel-data gnome-panel nautilus gnome-control-center capplets

* phpgroupware-preferences phpgroupware-admin phpgroupware-setup
phpgroupware-phpgwapi phpgroupware

* wesnoth-tdh wesnoth-ei wesnoth-sotbe wesnoth-trow wesnoth-httt
wesnoth-data wesnoth

How ?

I see two easy case:

1) foo and foo-data. There is usualy no reason for foo-data to depend on
foo. foo-data does not provide user-visible interface, only data, so it
does not need to depend on foo.

2) libfoo and foo-bin, where foo-bin include binaries linked with
libfoo. Usually libfoo only need to Depends on configuration data
in foo-bin and not on any binaries linked with libfoo (to avoid infinite
recursion). In that case it should be possible to split foo-bin in
foo-bin and foo-common, and change libfoo to depend on foo-common

Other options ?

Bill. <ballombe@debian.org>

Imagine a large red swirl here. 

Reply to: