Havoc Pennington wrote:
On Sat, 2005-01-22 at 22:16 -0600, Chris Adams wrote:
nautilus has an explicit dependency in the spec file on gnome-vfs2-smb.
It does not have any apparent dependency on libsmb.so that is provided
by gnome-vfs2-smb (nothing seems to have such a dependency). If I don't
have any need to browse Windows networks, why do I need the software
installed?
libsmb.so is dlopen'd, so no ldd dependency.
And so the problem really is too many dependencies, or -- alternatively expressed -- too few sonames.
Perhaps Requires: libsmbclient.so.0 is perhaps a more obvious statement of the dependency.
Not that the mode of expression really matters, nautilus has way way too many dependencies.
Features are great; _required_ features are not.
The reason for a Requires here (and in similar cases) is to suck in gnome-vfs2-smb when anaconda upgrades a system.
Yep.
<scarcasm> Or anaconda might, perhaps, someday, wish to actually run nautilus at install/erase time, and so the dependency is added as a place holder, reserving a bloat slot for future development. </scarcasm>
Seriously, dependencies have a context, and it's highly unlikely that the dependency is actually needed by anaconda to install or remove nautilus. The hint to depsolvers like anaconda necessary with current implementations to discover an additional edge in the dependency tree graph could be handled in other ways, if nautilus were prepared to deal with the dlopen failure at run-time.
Comes up with some package in most releases, and there
are a fair number of Requires: that exist purely for that reason.
Yep. Existence of other examples does not imply that dlopen'd module dependencies
necessarily have to be expressed as a Requires: however.
The current practice of using a manual Requires: to hint of an edge on a dependency graph has the side affect of forcing packages to be installed whose contents may never be used.
A "missingok" (or "dlopen") context marker on a Requires: would provide the hint of an
edge in the dependency graph to existing depsolvers, and yet mark the context of the
dependency as "optional" in the sense that an application like nautilus was prepared to
deal with a dlopen failure from libsmbclient.so.0 at run-time, rather than during install/erase.
The net effect of a "missingok" (or "dlopen") context marker would be that nautilus could
be installed without dragging in the samba sub-tree, with similar effect for other dlopen'd
modules.
73 de Jeff