At the end of the day it comes down to the developer, his experience, and how he uses (and abuses) dynamic typing.
Which is why it’s such an issue. Dynamically typed languages are fine for smaller projects (or scripts), but as soon as your team (or your code base) grows you’ll feel the pain.
I agree with you that there’s a problem with nulls the moment we call Java from Kotlin, but we need Java interoperability if we want Kotlin to catch on. And one can only hope that Kotlin will rise in popularity to the point where we won’t have to call other languages. Also, it’s not like all null safety is out the window if you call Java — non-null types are still guaranteed to not contain nulls.
NULL is not bad per se
Which is why it’s treated like a first class citizen in Kotlin. NPEs on the other hand are always bad.