One of the main differences between setup packages and normal packages is that setup packages actually have two sets of names and versions. The first name/version uniquely identifies the package. The second name/version is used to match the package with a setup dependency. This allows multiple different setup packages to fulfill the same setup dependency. A real world example of this is for a site such as a university to designate a specific configuration for its systems. This configuration could be implemented by a set of setup packages that would replace the set that came with the software.