Microkernels tend to do a lot of what you're talking about. They accomplish this via interrupts and virtual mapping of the device memory to userspace for the userland app to access.
"If we wanted, we could even replicate a kernel device driver style API in userland that network device drivers program against, done as a set of userland library files loaded dynamically based on detected hardware."
This is how many microkernel based embedded RTOS's work. Common API's written for a hardware device, say a NOR flash chip, and the driver for the hardware onboard implements the interface specific to that hardware. You can then dynamically link the driver specific to your hardware. That's what I was doing as an embedded C developer some 10 years ago, and that solution had already been implemented for at least a decade (or 2) before that.
Corista | Full-time Senior Full Stack Engineer | Boston, MA | On-site or Remote
## Company ##
Corista is a small, versatile software development company focusing on solutions for Pathologists, Hospitals and Pharmaceutical companies. We produce a scalable, secure platform, accessible from any web-enabled device, implementing the only image agnostic digital pathology solution.
## My misc .02 ##
We've doubled our swdev team in the last year (now 10 people) and are continuing to grow. Our team consists of both on-site and remote devs. Our HQ is in Concord, MA and a small satellite office in Davis Sq (Somerville, MA). We put a very high value on team fit as it's very important to our culture.
We are now running our platform on AWS and it's exciting to be moving our workload to "the cloud" and to add DevOps to our arsenal of skills.
## What we're looking for ##
* An expert (Senior meaning 5+ years) in Ruby on Rails and JavaScript and has UI experience and likes to do things right the first time.
* Wants to be a major contributor on a small, tightly-knit team of senior developers and scientists.
* Is an active “doer” and can lead by example.
* Easy to work with and interact with, seeks out the problem areas and wants to find solutions to them.
"If we wanted, we could even replicate a kernel device driver style API in userland that network device drivers program against, done as a set of userland library files loaded dynamically based on detected hardware."
This is how many microkernel based embedded RTOS's work. Common API's written for a hardware device, say a NOR flash chip, and the driver for the hardware onboard implements the interface specific to that hardware. You can then dynamically link the driver specific to your hardware. That's what I was doing as an embedded C developer some 10 years ago, and that solution had already been implemented for at least a decade (or 2) before that.