| Where it runs | Your data centre, after a professional-services engagement measured in months | Their cloud. Your topology, hostnames and expiry dates leave the building | Wherever the author left it | Your hosts, from one compose file. Air-gapped CDE included |
| Where private keys live | Vendor HSM or vendor database, opaque agent on every host | Often uploaded for "convenience" | Beside the certificate, mode 0644, in a repo somewhere | Never in Postgres. OpenBao, Vault, AWS, GCP, Azure, or on the host via the agent |
| The agent | Closed binary, root, vendor-signed | Closed binary, outbound beacon | cron and openssl | One readable Python file, stdlib only, SHA-256 published, unprivileged by default |
| Blast radius before a change | Rarely | No | No | Yes: devices bound, flows named, found on disk unmapped, and what it cannot see |
| Two-person control | Sometimes, via tickets | Role-based, single approver | None | Key export, PEM publish, playbook apply, high-sensitivity reveal. The asker never approves |
| Telemetry | Licence server call-home | Everything | None | None. Offline Ed25519 licence |
| Appliance install (F5, JKS, ACS) | Adapters for most | Some | Hand-written | Not built. An approved Ansible run against one pinned host, or the edge agent's pull |
| HSM-backed CA signing | Yes | Vendor-held | No | No PKCS#11 signer today. CA keys live in the secrets backend; envelope recipients may be HSM-held |
| Natural-language search | No | LLM over your data, in their cloud | grep | Fixed grammar, compiled on screen, zero outbound calls |
| Time to first value | Quarters | Days, after procurement reviews the data flow | Already there, until the author leaves | An afternoon: compose up, enrol an agent, read the queue |