{"rid":"storage/launchpad-ppa","card":{"rid":"storage/launchpad-ppa","eid":"launchpad","topic":"storage","slug":"launchpad-ppa","provider":"Launchpad PPA (Ubuntu Personal Package Archive)","url":"https://launchpad.net/ubuntu/+ppas","domain":"launchpad.net","category":"paas","tier":null,"verdict":"qualifies-with-caveat","vorder":1,"grp":"usable","confidence":"reported","binding":"per-ip-shaping","identity_kind":"email","identity_basis":"defaulted","needs_card":null,"needs_phone":null,"needs_id":null,"needs_institution":null,"country":null,"crypto":null,"interfaces":"rest,ftp,rsync,rclone","egress_metered":0,"per_object_bytes":null,"retention_days":null,"verified_at":"2026-10-21T00:00:00.000Z","verified_basis":"inherited","checked_on":"2026-10-21","stale_on":"2026-11-04","n_evidence":5,"usd_month":null,"usd_per_tb_month":null,"summary":"8 GiB of disk per PPA - current official reference: 'Disk space | 8 GiB; larger quotas considered on request at https://answers.launchpad.net/launchpad'. (Hi...","duplicate_of":null,"n_unknown":8},"record":{"topic":"storage","slug":"launchpad-ppa","provider":"Launchpad PPA (Ubuntu Personal Package Archive)","url":"https://launchpad.net/ubuntu/+ppas","category":"paas","free_tier":{"stated":"8 GiB of disk per PPA - current official reference: 'Disk space | 8 GiB; larger quotas considered on request at https://answers.launchpad.net/launchpad'. (Historical: PPAs were raised to a 2 GiB minimum in 2010 per the Launchpad blog; the 8 GiB figure is the current documented one.) 'PPAs per owner: One or more per user or team; each has its own URL.'","unit":"GiB","metered_on":"stored-bytes","source_url":"https://launchpad-help.readthedocs.io/en/latest/how-to/distribute-ubuntu-software.html","read_on":"2026-10-21","notes":null},"per_object_cap":{"stated":"not stated","source_url":"https://launchpad-help.readthedocs.io/en/latest/how-to/distribute-ubuntu-software.html","notes":"not stated"},"retention":{"stated":"This is the binding constraint - you cannot push an arbitrary tarball; everything must be a signed source package (.dsc + orig.tar.gz + debian.tar.gz), so a 4 GB blob becomes one 4 GB .orig.tar.gz (allowed, but must be a valid Debian source package). retention: indefinite - 'A published package remains available until ..","source_url":"https://launchpad-help.readthedocs.io/en/latest/how-to/distribute-ubuntu-software.html","notes":"not stated"},"egress":{"terms":"Free: 'Data transfer | No fixed cap; unusual volumes may trigger contact from Launchpad.' Served from ppa.launchpadcontent.net with no billing.","metered":false},"interface":["rest","ftp","rsync","rclone"],"interface_detail":"rest","tooling":"`dput`/`dput-ng` (rsync+ftp upload to ppa.launchpad.net), `apt`/`deb-src` for consumption, Launchpad REST API + `launchpadlib`. No rclone backend.","chaining":"N PPAs per owner ('one or more per user or team') x 8 GiB each x unlimited free Launchpad accounts and teams. A team can own multiple PPAs, so 8 GiB x N. For 20 TiB archive that is ~2,560 PPAs - achievable across accounts/teams but operationally heavy, and each is a separate signing key/deb repository.","limits":[{"kind":"per-ip-shaping","value":"70 KB/s","source":"https://launchpad-help.readthedocs.io/en/latest/how-to/distribute-ubuntu-software.html"}],"limits_note":"per-object-cap: 'Uploadable artefacts | Source packages only; pre-built binary uploads are rejected' and 'Package formats | .deb only'. This is the binding constraint - you cannot push an arbitrary tarball; everything must be a signed source package (.dsc + orig.tar.gz + debian.tar.gz), so a 4 GB blob becomes one 4 GB .orig.tar.gz (allowed, but must be a valid Debian source package). retention: indefinite - 'A published package remains available until ... the owner removes it, or a later upload supersedes it.' request-rate: not documented; download is plain HTTP. Measured single-stream throughput on a real PPA .deb was only ~70 KB/s.","identity_cost":{"kind":"email","detail":null,"country":null},"reliability_note":"The read path works and supports ranges (verified 206 on a 1 MB range of a real .deb) but single-connection speed was poor (~70,666 B/s over 15 s). Batch/sharded fetch needed. Upload requires GPG-signed source packages - no arbitrary blob PUT. help.launchpad.net and blog.launchpad.net returned 503 to the reader all session (used archive captures instead), so the live help site is unreliable to fetch programmatically.","confidence":"reported","confidence_note":"One page read moves it to documented.","evidence":[{"url":"https://launchpad-help.readthedocs.io/en/latest/how-to/distribute-ubuntu-software.html","date":"2026-10-21","proved":"quotas table: 'Disk space | 8 GiB; larger quotas considered on request'; 'Data transfer | No fixed cap'; 'PPAs per owner | One or more per user or team'"},{"url":null,"date":"2026-10-21","proved":"(captured 2024-12-11) - 'we've gone ahead and upgraded every PPA to a minimum of 2 GiB'"},{"url":"http://ppa.launchpadcontent.net/deadsnakes/ppa/ubuntu/pool/main/p/python3.12/","date":"2026-10-21","proved":"probe: GET -> 200, directory listing of real .deb files"},{"url":null,"date":"2026-10-21","proved":"probe: ranged GET bytes 0-1048575 on libpython3.12-dbg_3.12.15-1+jammy1_amd64.deb -> 206, 1,048,576 bytes, 70,666 B/s"},{"url":"http://ppa.launchpadcontent.net/deadsnakes/ppa/ubuntu/dists/noble/Release","date":"2026-10-21","proved":"probe: GET -> 200, 16,928 bytes (real Release file)"}],"verdict":"qualifies-with-caveat","verified_at":"2026-10-21T00:00:00.000Z","notes":"8 GiB of disk per PPA - current official reference: 'Disk space | 8 GiB; larger quotas considered on request at https://answers.launchpad.net/launchpad'. (Historical: PPAs were raised to a 2 GiB minimum in 2010 per the Launchpad blog; the 8 GiB figure is the current documented one.) 'PPAs per owner: One or more per user or team; each has its own URL.'","extras":{},"binding":"per-ip-shaping","binding_note":"one stream is shaped, and a user's throughput is the shaped rate times the number of streams"},"claims":[{"path":"$.free_tier.stated","kind":"free-quota","num":8,"unit":"GiB","per":null,"currency":null,"usd":null,"fx_date":null,"parse":"ok"},{"path":"$.limits[0].value","kind":"limit:per-ip-shaping","num":70,"unit":"KB","per":null,"currency":null,"usd":null,"fx_date":null,"parse":"ok"}],"unknown":[["$.evidence[1].url","private-url"],["$.evidence[3].url","private-url"],["$.free_tier.notes","process"],["$.identity_cost.detail","defaulted"],["$.identity_cost.kind","identity-defaulted"],["$.per_object_cap.notes","not-extracted"],["$.per_object_cap.stated","not-extracted"],["$.retention.notes","not-extracted"]],"history":[],"drift":[]}