Windows, on the other hand, is a hybrid kernel, which means some functions are managed in user space so that a program has more control over the hardware.
Windows and Linux are both monolithic kernels, in the sense that most device drivers run in kernel mode with kernel privilege. They’re not like Mach or Hurd.
Windows outsourced their device driver development early on to the hardware manufacturers, and they encouraged closed-source drivers with separate source trees and builds. To facilitate this, Windows NT developed a system called plug-n-play (PnP) which searches for and loads driver modules (.sys files) from disk into the kernel.
Linux developed a similar system of loadable kernel modules (.ko files), but their system arrived much later. One reason is that Linux’s GPLv2 license mandates that driver source code be licensed under compatible terms. That and Linux has always been pretty open about accepting driver code into their main source tree. Finally, manufacturers were never interested early on in writing Linux drivers, so the driver development was being done by the community, which was already using the Linux source tree.
So Linux didn’t have as much pressure to develop a loadable module system. So they did it later.
To the present day, the majority of Linux device drivers are submitted to mainline Linux and go through the Linux review process. Windows drivers are mainly developed by third parties, but they do have to go through the Windows Hardware Quality Labs review and testing process.
Apple writes all their MacOS drivers internally, because they are also the hardware OEM.
Windows and Linux are both monolithic kernels, in the sense that most device drivers run in kernel mode with kernel privilege. They’re not like Mach or Hurd.
Windows outsourced their device driver development early on to the hardware manufacturers, and they encouraged closed-source drivers with separate source trees and builds. To facilitate this, Windows NT developed a system called plug-n-play (PnP) which searches for and loads driver modules (.sys files) from disk into the kernel.
Linux developed a similar system of loadable kernel modules (.ko files), but their system arrived much later. One reason is that Linux’s GPLv2 license mandates that driver source code be licensed under compatible terms. That and Linux has always been pretty open about accepting driver code into their main source tree. Finally, manufacturers were never interested early on in writing Linux drivers, so the driver development was being done by the community, which was already using the Linux source tree.
So Linux didn’t have as much pressure to develop a loadable module system. So they did it later.
To the present day, the majority of Linux device drivers are submitted to mainline Linux and go through the Linux review process. Windows drivers are mainly developed by third parties, but they do have to go through the Windows Hardware Quality Labs review and testing process.
Apple writes all their MacOS drivers internally, because they are also the hardware OEM.