** Ports ** Download sources or precompiled packages Mirrors should be fully configurable - number, order, transport, credentials, etc. Furthermore, any package specific mirrors should also be fully configurable. Configure & compile sources Any and all available compilation options should be available to the user. Compilation options should be remembered across recompilations. Compilation options should be specified in such a way that commonality can be found between packages. Each package should provide definitions of common compilations options where there is any difference to the global interpretation. During compilation and preparation for installation, no files on the live filesystem should be affected. ** General Package Management ** Querying available packages Queries should provide all information possible before a package is installed, including but not limited to: - full title - long description - package home page - size of minimally required source files or patches - what packages are required to compile - what packages are required to run - license(s) for the package or parts there-in - compilation flags known to fail Query installed packages Queries should cover all facets of installed packages, including but not limited to: - what package provides which file - the amount of disk space a package is occupying - the date and time at which a package was installed Install packages Packages should be installed by the same method whether using precompiled packages or compiled sources. On installation, files should be noted for later removal. Under no circumstances should files on the live filesystem be overwritten by the installation of a package unless the files were provided by a previous version of the same package. In the case where another package "absorbs" the functionality of a package, it should be noted in the (partially-) depracated package. Upgrade packages When packages are upgraded, existing files should be backed so that upgrades can be easily rolled back when necessary. Uninstalling installed packages Packages should be checked for reverse dependencies to ensure that removal does not affect system functionality. Uninstalling packages should remove all files except those in protected directories. Files in protected directories should be backed up and removed from the live filesystem. Updating available package database As with mirrors above, the method of updating the package database should be fully configurable - number, order, transport, credentials, etc. ** Enterprise/Cluster Management ** Create precompiled packages Provide package database mirror Provide package source mirror Provide precompiled package mirror