I have created a branch of SRFI 170 at < https://github.com/johnwcowan/srfi-170/tree/no-io>, which you can view at <http://htmlpreview.github.io/?https://raw.githubusercontent.com/johnwcowan/srfi-170/no-io/srfi-170.html>

In this branch, I take a different approach from master, which currently tries to treat ports and file descriptors more or less equally.  Here file descriptors are treated as useful only at the edges of a Scheme program: (a) startup, when we may have been passed a fd from our predecessor program, (b) when we do a fork/exec/spawn and have to connect specific fds to our successor program, and (c) when we invoke something through the FFI.

As a result, section 3.2 is reduced to just seven procedures:  the four fdes->port procedures, port->fdes, dup->fdes, and close-fdes.  In addition, the other procedures in this branch no longer accept fds, only ports and in some cases filenames (which merge things like stat() and fstat()).  Everything else I/O-related either already exists in the (scheme file advanced) pre-SRFI at <https://bitbucket.org/cowan/r7rs-wg1-infra/src/default/FilesAdvancedCowan.md> or has been copied there as part of creating the branch.  That library basically provides everything R6RS does, plus make-pipe and the two select procedures from the master branch.

I'm not making this branch draft 3 yet, because it's pretty substantial and I think it deserves some discussion first. 

John Cowan          http://vrici.lojban.org/~cowan        xxxxxx@ccil.org
If I have not seen as far as other giants, it’s because I have been
standing on my head.  --Trond Engen