They presumably did it because they thought it would be a good idea. Perhaps they wanted to hide implementation differences between different OSes. Either way, the low-level functions in FreeBSD work just fine. FWIW, i just ran "man funopen" on my netbsd box and it says: HISTORY The funopen() functions first appeared in 4.4BSD. BUGS The funopen() function may not be portable to systems other than BSD.