public inbox for gentoo-portage-dev@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-portage-dev] Updated portage-ng requirements doc
@ 2003-11-29  3:47 Daniel Robbins
  2003-11-29  4:28 ` Jason Stubbs
  0 siblings, 1 reply; 5+ messages in thread
From: Daniel Robbins @ 2003-11-29  3:47 UTC (permalink / raw
  To: gentoo-portage-dev


[-- Attachment #1.1: Type: text/plain, Size: 138 bytes --]

Hi All,

Attach is a much-improved portage-ng requirements doc (about 7x more
verbose than the previous one...)

Regards,

Daniel

[-- Attachment #1.2: portage-systemspec --]
[-- Type: text/plain, Size: 8135 bytes --]

portage-ng

This is the specification for portage-ng, a package manager/"ports" system that
is intended to be a successor to the current portage package manager.  The goal
of this project isn't simply to rewrite portage, but to also significantly
expand the potential of this type of tool.

Like portage, portage-ng will need to be able to perform the following tasks on
an individual host system: download sources or pre-compiled packages from the
Internet, configure, compile and install  sources according to user
requirements, and general package management. In addition, portage-ng should be
able to be easily extended to perform tasks that would be expected of it in an
enterprise, cluster, or other kind of environment, which may include management
of groups of systems over the network. The following requirements are intended
to further define the qualities of portage-ng that will allow it to tackle
existing problems more effectively, as well as tackle new types of problems:

architecture requirements:

1) facilitate parallel, community development

portage-ng's internal architecture should allow for true community development
my multiple teams. Approaches such as modularity, consistent well-defined APIs,
and modern programming practices could be used to make the development of code
more manageable, scalable and accessible.

2) allow for easy extensibility and new feature additions over time

Building on the previous requirement, the internal architecture of portage-ng
should allow seamless addition of new functionalities and capabilities. This
could be implemented using paradigms such as inheritance, "plugin"
functionality, a component model or combination, or possibly others.

3) provide a coherent model for (meta)data representation and storage

In the current portage code, there is support for various types of data
repositories, including ebuilds, /var/db/pkg (installed) package data, and
others. portage-ng should have a coherent (defined as "an orderly, logical, and
aesthetically consistent relation of parts") data model. The intended goal
is to reduce code complexity, increase internal code re-use, reduce the amount
of code dedicated to "load/store" operations, and allow allow re-targeting of
the data-store for all aspects of portage-ng in one fell swoop.

This also implies that careful consideration is made in representing the
various namespaces within portage-ng.

4) will run on a wide variety of systems

Portage was initially designed as a Linux-based application. We are now
looking at ways to integrate BSD, MacOS, and other platform support into
portage. portage-ng should be designed from the ground-up to support multiple
platforms. In addition, portage-ng should be able to support a large number
of CPU architectures, such as x86, ppc, amd64, ia64, sparc, alpha and others.

5) will run efficiently even on modest hardware, and take full advantage of
the resources of modern hardware.

Portage-ng should be able to run efficiently on modest hardware. On more modern
hardware, portage-ng should be able to take full advantage of current execution
of multiple parallizable steps in order to improve performance. This may
include multiple simultaneous fetching of source files, or the parallelization
of any other type of parallizable step. This implies, of course, that
portage-ng must be capable of recognizing which steps can be run in parallel
and which can't.

6) in as much as possible, encourage and/or enforce the development of
high-quality, versatile and maintainable code

To meet this requirement, we will need to successfully meet requirements 1 and
2. Beyond this, portage-ng development and package handling should use modern
practices to avoid unwanted side-effects that can cause unpredictable behavior.
Concepts that should be explored should include (but not be limited to) the use
of logic and functional programming concepts, as well as immutable data types,
both in portage-ng development as well as the day-to-day addition of new
packages to portage-ng. Meeting this requirement should also include an
evaluation of the current portage eclass functionality, and how new portage-ng
functionality could be created to further address the types of problems that
eclasses are intended to address.

7) encourage/enforce separation of package metadata from specific build steps
and algorithms

In portage, ebuilds generally have two types of metadata -- the first contains
specific steps to build, unpack, or compile the package and is inherently
procedural in nature. This metadata can be called "stepwise metadata." The
second type of metadata is more abstract and does not contain specific steps
to perform. For example, DEPEND, RDEPEND and SRC_URI are of this type, and
this allows Portage to use this metadata for a variety of (rather than a 
single) purpose. Due to the abstract nature of the metadata, algorithms such
as dependency resolution can be changed without causing ebuilds to break.

Portage-ng should be designed to provide a clear separation between stepwise
and abstract metadata, and encourage or enforce metadata to be represented in
an abstract form when possible, so it is of more use to portage-ng. This will
allow internal portage-ng algorithms to be changed without causing package
building and installation to break, and allow the system as a whole to be much
more flexible.

An example of a type of metadata that should be avoided would be a REBUILD
variable which tells portage-ng what packages should be rebuilt after a
particular package is installed. Such a REBUILD variable would need to be
treated as a stepwise procedure by portage-ng, which would limit its
usefulness. Instead, this metadata should be represented in another way so that
portage-ng can understand the finer levels of underlying dependencies and
resolve these on its own rather than being given a list of things to do via a
REBUILD variable.

In addition, the ability to track what abstract metadata is used by the 
stepwise metadata should be carefully considered. This would allow for the
elimination of the equivalent of the IUSE variable in portage-ng, since
portage-ng would already be aware of what metadata was being used by the
various parts of the build script.

8) allow for delivery of feature set that meets or exceeds expectations of
existing user community

Careful attention should be paid to the needs of our user community. What
features are they looking for in portage-ng? What kinds of problems are they
interested in having portage-ng solve? These needs should be taken into account
for any implementation.

In addition, the following design goals should be met in any implementation:

1) reflect the sensibilities of "ports" system designs, as well as Portage

These sensibilities include ease of use, ease of addition of new packages, ease
of learning and ease of accessing and modifying data. Plain text seems to be
preferred as a default data store. New possibilities can be explored as long
as the design as a whole addresses the general preference of the plaintext
approach.

2) provide an easy-to-understand developer API

This includes self-documenting API calls, good documentation, as well as
possibly other aspects of design.

3) provide an open, transparent architecture that reflects UNIX design
philosophy

This is related to design goal 1. This item underscores the fact Portage
in some ways reflects a UNIX design philosophy and any implementation should
explore ways to retain or expand the openness and transparency of portage-ng
over portage.

4) In every way possible, program should be malleable to allow conformation to
user needs and expectations, both interface as well as the specific actions
performed by the program.

Portage-ng should be designed as a general-purpose tool, rather than one that
just performs a handful of specific tasks. It's our hope that portage-ng will
be used in a variety of innovative ways not originally anticipated by its
designers.




[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2003-11-30  1:13 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2003-11-29  3:47 [gentoo-portage-dev] Updated portage-ng requirements doc Daniel Robbins
2003-11-29  4:28 ` Jason Stubbs
2003-11-29 14:34   ` Jason Stubbs
2003-11-29 16:02     ` Daniel Robbins
2003-11-30  1:13       ` Jason Stubbs

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox