"If the VM handles thread safety for you, then what do you care that the variable is shared vs not shared or mutable vs not mutable (in the underlying vm)?"
Nobody should. Mutability or immutability is a property of programs, not languages. Some languages make it syntactically impossible to express mutation, but it's still all machine language in the end, which allows quite arbitrary mutation, so the only reason those languages can work is that they choose to refrain from mutation in their VM.
Nobody should. Mutability or immutability is a property of programs, not languages. Some languages make it syntactically impossible to express mutation, but it's still all machine language in the end, which allows quite arbitrary mutation, so the only reason those languages can work is that they choose to refrain from mutation in their VM.