actually, it's not too hard to have an ether*.c that opens a USB device configured by user space and interacts with it. the Inferno driver that does just that is simpler than some of the other drivers in some ways. there's a fair amount of flexibility using Etherif->ctl. the harder part is dealing with the wretch on the other end of the USB (eg, configuring it). fortunately, that can be in user space, which is good because it's a fair amount of code, and that's in Limbo not C. i don't see why an etheruser.c should be that tricky, but then again, i haven't thought about it much, although i did consider it once as potentially useful for several applications.