State of the art component-based software collections - such as FOSS
distributions - are made of up to dozens of thousands components, with complex
inter-dependencies and conflicts. Given a particular installation of such a
system, each request to alter the set of installed components has potentially
(too) many satisfying answers. We present an architecture that allows to
express advanced user preferences about package selection in FOSS
distributions. The architecture is composed by a distribution-independent
format for describing available and installed packages called CUDF (Common
Upgradeability Description Format), and a foundational language called MooML to
specify optimization criteria. We present the syntax and semantics of CUDF and
MooML, and discuss the partial evaluation mechanism of MooML which allows to
gain efficiency in package dependency solvers