A list of common use cases that are implemented across various package managers.
Use Case / Package Manager |
Alpine (APK) |
Cargo | Carvel | Helm | Maven | npm | OCI | PyPi | rpm |
---|---|---|---|---|---|---|---|---|---|
List of Packages | 🟢 | ⚪ | ⚪ | ⚪ | ⚪ | ⚪ | 🔴* | 🟢 | ⚪ |
Filter a List of Packages | 🟢 | ⚪ | ⚪ | ⚪ | ⚪ | ⚪ | 🔴 | 🟡 | ⚪ |
List versions | 🔴 | ⚪ | ⚪ | ⚪ | ⚪ | ⚪ | 🟡* | 🟢 | ⚪ |
De-dupability | 🟡 | ⚪ | ⚪ | ⚪ | ⚪ | ⚪ | 🟢 | 🟢 | ⚪ |
Multi-Arch Support | 🟢 | ⚪ | ⚪ | ⚪ | ⚪ | ⚪ | 🟢 | 🟢 | ⚪ |
Dependency Tracking | 🟢 | ⚪ | ⚪ | ⚪ | ⚪ | ⚪ | 🟢 | 🟢 | ⚪ |
<use-case> | ⚪ | ⚪ | ⚪ | ⚪ | ⚪ | ⚪ | ⚪ | 🟡 | ⚪ |
TODO:
- Capture the differences between the client and the server. For example, putting the burden on the client to do filtering doesn't scale more than dozen packages.
The package manager provides a means to list the all the packages. The client can page through results, and may implement client side filtering, however a package manager with thousands of packages may not scale well, requiring server side filtering.
The package manager accepts filtering parameters to limit the list of packages to match some criteria.
The package manager provides an API, listing the versions.
The package manager has the ability to efficiently, and securely store duplicate elements of different packages within the service. The client has the ability to pull unique elements of a package, making the GET of a package more efficient.
The package manager provides a means to query for a package, specific to a OS Platform and architecture.
TODO:
...for package manager lifecycle management.
- Can the server track the dependencies of a specific package?
- Can the server track cross package dependencies?