No single measure will ever be sufficient, one should never become complacent like that...
This all comes down to C designers ignoring the security best practices of other systems programming languages, and UNIX clones having mainstream adoption.
Morris worm (1988) wouldn't have been possible in regular Modula-2 (1978) code, nor Ada (1983), Mesa (1976), ESPOL/NEWP (1961), PL/I (1964), PL/S (1974), BLISS (1970), just citing a couple of them.
Yet C17 still doesn't provide language features to prevent another Morris worm, and the security Annex was made optional instead.
Can you please expand on this point?
For example, ESPOL/NEWP was the first systems programming language with explicit unsafe blocks, 8 years before C came into the world.
So hardware that was much weaker than PDP-11, and yet capable of supporting such security features.
Burroughs B5000 OS is still being developed, nowadays known as Unisys ClearPath MCP, and its top selling feature is being a mainframe system for customers whose security is the top priority.
What's special about it?
> Bounds checking, explicit unsafe blocks, proper strings, explicit type conversions, proper enumerations, checked arithmetic.
Plus a capabilities based security access, and unsafe blocks taint binaries, requiring admin permission to be executed.
Recent hardware versions use Xeons.
Again, just features missing from C, and available in other languages.
Another notable feature, it did not make use of any Assembly, in 1961, because all CPU features are exposed as compiler intrinsics.