But can't the implementation account for that, i.e. supply the right mapping for the device on which it is running?
What's the "right" mapping here? All these mappings are equally good, which is why Posix talks in terms of names with unpredictable numerical equivalents mapped in the system-specific errno.h file.