Por que não posso static_cast entre char * e unsigned char *?

Aparentemente, o compilador considera-os como tipos não relacionados e, portanto,reinterpret_cast É necessário. Por que essa é a regra?