`admin/package_management_service` vs `package_service`

In the Ledger API specification, SDK 2.5.0, we have both of the aforementioned services:

https://docs.daml.com/app-dev/grpc/proto-docs.html#com-daml-ledger-api-v1-admin-config-management-service-proto

and

https://docs.daml.com/app-dev/grpc/proto-docs.html#com-daml-ledger-api-v1-package-service-proto

The former seems to be a superset of the latter, allowing you to upload dars in addition to fetch package information.

When should I use one vs the other? Why do these two services exist?

On a related note, how can I download a dar? I’ve noticed that neither of these services has a facility for fetching the dar, only the ArchivePayload, which has nothing but the version & hash of the dar.

They are authorized differently. Package Management is Admin-only. Package Service is “public” in the sense that any valid token allows you to list and download packages.

Can you expand on this? Couldn’t we just remove the package_service and make the package_management_service ‘list’ operations public? Is this kept around for backward compatibility?