Skip to content

RFC: Design improved relationships for Package, Dependencies, Embeds and Requirements  #1066

@pombredanne

Description

@pombredanne

We need to design improved models for Package, Dependencies, Embeds and Requirements.

Some background:

  • What we routinely calls "dependencies" are not really dependencies: more often these are requirements that are "resolved" to actual concrete dependencies. To really "depend" on a software package, you need to know the exact resolved version. On the other hand, a requirement expresses the need for some range of versions (even if it's a range of a single version).

  • We should distinguish a "require" relationship between packages vs. an actual "resolved" dependency to a concrete version, and track if the resolved dependency is present in the codebase or not.

  • Dependencies (or requirements) may be only documented in a package manifest (like pom.xml) or a lockfile (like package-lock.json), or also be present in the codebase.

  • We need to track also when a package contains another package (or for that matter when an app contains or embeds packages).

Therefore we may have three levels of tree-like data we need to track for packages:

  • "potential" requirements (we call these dependencies today). This is a logically a flat list of PURLs with VERS attached to a package instance.
  • "resolved" dependencies (we call these dependencies today too, but sometimes also packages). This is logically a tree (or graph) of PURLs with a resolved version. Each such dependency is derived and satisfies one or more "requirement".
  • "embeds" are packages embedded in other packages, e.g., they are physically copied, vendor and or built into a product codebase. These could have been the results of provisioning/fetching resolved dependencies, or could be a straight copy. These are not much tracked as such today.

We have agreed on some key model updates, based on discussions here and in our weekly calls:

The https://github.com/nexB/dependency-inspector tickets to create lockfiles are:

Then for the effective resolution of dependencies as a tree from manifests and lockfiles:

And beyond:

Here are also some related issues, but not directly need to complete this feature:

Metadata

Metadata

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions