If you read the BSD FFS paper it explains how they needed to change the
interface to a kernel defined one to support multiple file system types.
In V7 on a PDP/11 having in user space was very good policy of course.
Some boxes still implement directory scanning with read() but wrap it in
opendir() calls too. Linux wraps getdents() in opendir.
Alan