C é uma linguagem de baixo nível em relação à maioria. Trabalhar com ponteiros é complicado, mas se errar a culpa não é da linguagem.
reconhece que o erro poderia ter sido evitado ao se utilizar uma linguagem com memory safety, em vez do C
E ele usaria o que? Em 1996 não existiam tantas opções de linguagens de programação como tem hoje. Toda a responsabilidade da gestão de memória em C é do programador e não da linguagem. Ela te dá todas as ferramentas para você manipular a memória, mas como fará isso depende de você.
E advinha? Quase todas as linguagens memory-safe de hoje foram compiladas em C.
- C# (antes do Roslyn)
- Python
- Perl
- PHP
- Lua
- Rust
- OCaml
Quando não foi C, foi C++ ou Assembly, que também não são memory-safe.
E sobre reescrita? Não precisa. Só arrumar o código. Sempre funciona. C é a mãe das linguagens, então ela "dá conta".