> My understanding is that they can. stdin, stdout and stderr are just pipes assigned to file descriptors 0,1 and 2 by convention.
Yes. Standard input and output are so ubiquitous shells were entirely designed around them with syntax that allows you to work with them implicity.
> There's nothing stopping a program from having more file descriptors passed in, and some programs do.
Can you please cite examples? I've never seen any software do that.
> There's no just no standard convention on how to do it.
Yeah. Such conventions would be nice. Perhaps a plan9 style virtual file system for all programs...
program/
input/
x
y
output/
x+y
x-y