Abstract
PyPkg is a unified system for distribution and deployment of software, with an initial focus on Linux. It is intended to enable a "direct link" between the provider and user, where dedicated deployment tools obtain software directly from the provider on the user's behalf. It can be likened to advanced package management systems like APT (Debian) or Portage (Gentoo), but unlike these PyPkg doesn't introduce an extra distribution layer nor is it particular to any Linux distribution. In fact, the intention is, given time, to implement support for other operating systems as well.
The "direct" quality of the PyPkg distribution layer is achieved by a decentralized model. Individual software projects describe themselves and their software according to a general RDF format, in documents hosted somewhere on the Web. Projects must be registered with a central index in order to be visible to interested parties. Updated information (such as new software releases) is transmitted directly though, by editing projects' decentralized RDF descriptions.
The RDF format is an extension of the DOAP (Description Of A Project) vocabulary, which acts as a completely general source of metadata about software projects. Information presented in the DOAP format can be mined for any number of purposes, including visual presentation. PyPkg extends DOAP with some special terms for describing deployment-related properties of project releases, for instance to declare dependencies on external software. This extended information is utilized by PyPkg deployment agents, to help automate all aspects of deployment processes.
PyPkg facilitates software deployment on Linux through a generic Python framework. On the basic level it manages installation and uninstallation of binary packaged software, due to the package format being descriptive these processes are fully controlled by the framework. For full flexibility the framework is able to install on a per-user basis, so administrative privileges are not required. The installation logic is, similarly to advanced package management systems, equipped with the ability to automatically handle dependencies and acquire packages. Conversely, when uninstalling, dependencies are considered for removal as well.
The framework is intended to support the creation of concrete PyPkg clients for different types of usages, currently there is one client: PyPkg.Installer. This is a straightforward "wizard"-style installation agent, presented through a Qt GUI, aimed at installing a particular package (with dependencies).