"Linux has a large amount of device drivers for hardware not supported on FreeBSD, especially USB devices. Not rarely, such drivers have been written based on information derived by protocol sniffing, reverse engineering and the like. This makes the code highly undocumented, and renders the porting effort extremely error prone. To help with this task, I decided to start working on an emulation layer that would let us recompile the linux source code on FreeBSD, and provide a sufficiently complete emulation of the kernel APIs so that device drivers (or at least certain classes) could be used without modifications to their source code."

This looks similiar to the sort of thing we do on Syllable. Providing an API that is "close enough" to Linux has worked very well for us, at least. We can port things like ethernet and USB drivers very quickly, with the minimum amount of changes and maintain similiar levels of hardware compatability as the original driver.

Tracking the ever-changing Linux API hasn't been too bad. It helps if you're only dealing with a limited number of driver classes, because that obviously limits the size of the APIs you need to concern yourself with. The fundemental APIs (E.g. Stuff like kmalloc()) are very stable, so there are generally no problems there.