tl;dr: 3 years before Unix got pipes, a different OS (DTSS) got communication channels. The channels have a master end and a slave end, the slave end acts like a normal file descriptor, the master end is run by a process, much like a debugger that has breakpoints on open/close/read/write/lseek/close. Except that the syscalls on the slave side result in "breakpoints" on the master side so the master can do whatever it wants in response to the events.
Pretty neat idea but much more complex than Unix pipes.