xpkg project's goal is to create a package and package management system for the DarwinPorts ports collection.
Packages consist of a name, version and revision. It also has a major and a minor build number and a collection of so called items (see dependencies for details). Every package installed must have a unique name, so only one package with name postgresql may be installed at one moment. The version and revision numbers are just for users to see what software they have installed. The major and a minor numbers are used for dependencies.
Dependencies arevery simple: A package can provide and request so called items. An item basically consists of a name (string), a major and minor number (int). If you want to install a package that requires a certain item, you have to have installed another package that provides just that item (a higher minor number is ok, too).
The basic use for items is to use the package name (e. g. python24) as an item's name you provide. So python24 will provide an item with name being python24. The major and minor numbers show the state of the item. The minor number should get incremented on every build of the package, e. g. due to a bug fix release. The major number should get increased if something serious changes and the provided features change, get incompatible, etc..
This system also makes virtual packages unnecessary and works well without OR-dependencies like require a OR b.
Here are some key features of "xpkg":
· be lighweight (no http-client, etc.)
· make use of xar
· rely on few components to make installation (e. g. during OS install) painless
· provide library functionality so that GUI front ends can be created easily
· robustness (atomic installation w. rollback)