What is the real difference between `*const T` and `*mut T` raw pointers?

*const T and *mut T are both equivalent to usize from a safety point of view. This is easy to see when you can cast any random integer into a raw pointer using only safe code.