`call` runs the target's code in the target's context. `delegatecall` runs the target's code in *your* storage, `msg.sender` and `msg.value` — the basis of proxies and libraries. `staticcall` forbids state changes.
(bool ok, bytes memory out) = impl.delegatecall(msg.data);
Delegatecall to an untrusted address is fatal: it can rewrite every storage slot you own.