Safety does not need to be absolute to be present.
It is just your idiotic definition of your perceived idea of "safety". A safety belt is a safety belt. Nevertheless your car can be hit by a fuel truck, spilled all over and catch fire.
for instance not misusing NULL, but do you trust them, or, do you write code to check them?
Nope, if a language is null safe, like Dart, I do not check for null.
That would be idiotic.
The compiler would optimize away the null check, as it perfectly well knows: it can not be null.
And as soon as you change the code at a different place and introduce a null error: the compiler perfectly well knows that at the specific point a null can pop up, and a null check is needed (again).
Stupid question: are you actively setting variables to null, to help the garbage collector ... ???
I can take a C program, lint it with multiple linters, compile it with multiple compiles, a smart check to do when its critical code, and be sure the code is safe.
Nope, you will never be sure. As "unsafe" is not a flaw of the language or coding, it is a feature of the language.
int* ptr = 0xFFeF;
*ptr = 0; // or any other value
There is no farking way to know if that is safe or not: unless YOU know it. Hint: in Apple ][ it is either: ROM and what ever you write never happens, or it is the "language card", and you might destroy the Integer Basic interpreter or the Pascal P-Code interpreter, or what ever you have loaded there.
Or: You actually place a value there, that you really want to have there. No compiler or linter can know anything about that.
And that above: can in Rust only be placed inside of an unsafe block. In C you can do it anywhere, and no one - and especially no linter - can know if the code is correct and does what intended, or not.