In general, file descriptors have no specific meaning to DUP itself. However, each stage is free to say that particular file descriptors have a particular meaning. For example, fanout always expects to read from stdin and always reports errors to stderr. All other file descriptors (including stdout, but stdout does not have to be used) are treated equally by fanout.
In general, we recommend that stages should read their most important input from stdin (0), write their most important output to stdout (1) and report errors to stderr (2). However, DUP will work fine if you write errors to FD 0, read from FD 1 and report errors to FD 42 and FD 43. This would be a great code obfuscation technique.