Hi, I submitted a previous version of this patch yesterday, only to find that making last minute changes is a big fat no no. Anyhow, having fixed the two problems I found, I also added the tests I should have written and run before sending my patch. Best, Rutger Content of previous email below: This patch replaces open-process with piped-process in posix.c and reimplement open-process with piped-process in popen.scm. This allows setting up a pipeline in guile scheme using the new pipeline procedure in popen.scm and enables its use on operating systems which happen to lack the capability to fork, but do offer the capability captured by start_child (see posix.c). The snippet below demonstrates the backwards compatibility of this patch as well as the feature it offers: (use-modules (ice-9 popen)) (use-modules (ice-9 rdelim)) (use-modules (ice-9 receive)) (receive (from to pid) ((@@ (ice-9 popen) open-process) OPEN_BOTH "rev") (display "dlrow olleh" to) (close to) (display (read-string from)) (newline) (display (status:exit-val (cdr (waitpid pid)))) (newline)) (receive (from to pids) (pipeline '(("echo" "dlrow olleh") ("rev"))) (display (read-string from)) (display (map waitpid pids)) (newline)) (let ((p (pipe))) (piped-process "echo" '("foo" "bar") (cons (port->fdes (car p)) (port->fdes (cdr p)))) (display (read-string (car p))))