But the fact that TCPStreams isa file-descriptor, Files isa file-descriptor, Pipes isa file-descriptor, and other such "stream-like objects" in the Linux kernel proves that the read/recv and write/send system calls are generic enough to work in a wide variety of circumstances.
Yeah, they're all different. But as far as the Linux API goes, they're all file descriptors under it all and have abstractions that work well for inheritance in practice. In many cases, inheritance doesn't work. But in many cases, it works. And works well, for decades.