A collection of system calls, kernel resources, and kernel utility routines that can create, use, and dismantle a stream. A "stream head" provides the interface between the stream and the user processes. Its principal function is to process STREAMS-related user system calls. A "stream module" processes data that travel bewteen the stream head and driver. The "stream end" provides the services of an external input/output device or an internal software driver. The internal software driver is commonly called a pseudo-device driver. The STREAMS concept has been formalised in Unix System V. For example, SVR4 implements sockets and pipes using STREAMS, resulting in pipe(2) openning bidirectional pipes.