When a package has optional dependencies on packages that have hard dependencies on a package that is declared 'unwanted' with the USE variable that package is installed anyway. Example: emerging mod_php with USE="-X" This will install X anyway because mod_php has an optional dependency on qt which, in turn, has a hard dependency on X. In this case this is still pretty straightforward to find. But, if someone installs for example PEAR-XML_Tree, which depends on mod_php, this will pull in X too... unless the user explicitly puts -qt in the USE variable. This is less straightforward. As the number of packages and the depth of the dependency tree grows, it is going to become harder and harder to determine which optional dependency of which package exactly caused the unwanted package to be installed. This is a task for the dependency tracking system, not the user. I would suggest that portage does not install optional package dependencies that causes conflicts with the explicit configuration in the USE variable. Advantages: - reduces the number of necessary configuration parameters in the USE variable considerably and thus make it easier to administer. (as some would imply others: -X would imply -qt) - makes the dependency tree more transparant for the user. - causes a minimal amount of packages installed that conflict to chosen configuration (only those explicitly asked for by the user) - causes a maximum amount of packages to be installed that conforms to the configuration (in contrast to the current situation where a maximum amount of packages is installed unless explicitly denied at each dependency level) At the very least I would like to see portage report this to the user and suggest which extra configuration parameters should be provided to resolve the configuration conflict. Advantage: - minimal impact on existing behaviour The coding effort would be approximatly the same for the two options above. (As the hard part is dermining which optional dependency causes the conflict.) The easiest implementation would be to use internal trinary logic. A dependency can be configured as: disabled ( USE="-X" ), enabled ( USE="+X" or USE="X") or don't care ( USE=""). The system can then flag conflicting configuration and the user can assign freedom to the system to make decisions. This would only be internal to portage and would not show up in the ebuilds. (As the 'don't care' level is not relevant to the package.) If you have questions or remarks, please mail me soon as I will be offline for 4 weeks from monday 3 march.
USE="-*" is my recommendation for this issue.