Oba? Lidská chyba je nejběžnější zdroj chyb v jakémkoliv systému. Design systému tak aby lidským chybám předcházel je esenciální prakticky kdekoliv kde je bezpečnost braná vážně.
(Mimochodem, memory leak je možný snad s každým paměťovým modelem, můžu třeba cachovat do hashmapy a zapomenout mazat záznamy. Bavíme se spíš o zábavách jako use after free, buffer overflow, z null pointer dereference, problémech s thread safety…)
A pak, pokud to necháš čistě na lidech, budeš dělat kompletní audit každé knihovny po každém update? Budeš znova kontrolovat každou funkci která mohla být safe v původním kontextu, ale v novém už není?
Už jsem tu zmínila zábavnou příhodu kdy upstream knihovna přestala být thread safe a nikdo si toho nevšiml. Tohle se hlídá fakt blbě. To samé memory safety. Opt-in safety prostě nefunguje. Opt-out naopak umožňuje izolovat místa kde může k problému dojít.
Teorie že „Dobrý programátor nebude dělat chyby“ je sice pěkná, ale skutečnost tomu neodpovídá a nikdy neodpovídala. Statistiky od Google to ukazují fakt dobře, to samé statistiky od Mozilly. Naopak, osobně se raději kódu kohokoliv kdo mi bude sebejistě tvrdit že jeho C / C++ kód je zaručeně safe vyhnu.