Firstly, standards compliance is bad when the standard is bad.
Secondly nothing precludes defining '3' as the lowest file descriptor for open(), since stdin/stdout/stderr cannot be opened (they are opened before the process starts).
nb4 open("/dev/stdin"), that's not what I mean