there's no need that pipeOpen is a pointer