As an average programmer, I'm skilled enough to make necessary modifications to the kernel, but an average desktop user surely won't cope with it; he has problems even with compiling downloaded kernel source. In order for Linux to become a desktop OS, this should be fixed very soon.
Not very happy with the situation, I decided to write this article and share some ideas on how things should be done to improve device drivers for various hardware devices under Linux.
First, let's face the current model of Linux device drivers: Most drivers are shipped with the kernel source already. A small number of them comes on various CDs, either in binary or source form. Those, however, are usually outdated. While the process of writing a device driver, making the required hardware, copying software CDs, and releasing goes on, time passes. Meanwhile, new versions of the kernel are released, with the latest-and-greatest fixes/features and also with a new-and-improved API for device drivers which is, of course, incompatible with the old one.
So I thought about making a universal API for device drivers in the Linux kernel core that wouldn't change for a long time. If it ever needs to change, the old API should be preserved for compatibility. The standard API means that I can both compile the source (with same headers/function calls) and load the binary module of a certain device driver under any Linux version.
Perhaps this concept should be adopted by other free OSes as well (*BSDs, for example), so that device drivers can become more and more universal as more OSes adopt the concept and standard.
Resolving platform-specific issues could be done through a top-level device driver API that would be translated to some bytecode variant, just like Java. This would mainly be intended as a temporary solution for close-minded companies; it would just buy time while companies that don't recognize the power of Open Source come to their senses. If that would take too long, a just-in-time driver compiler could be implemented that would speed up the driver itself (just like a JIT compiler for Java). That would make close-minded companies happy enough to release drivers, but their drivers won't be as fast as those of their competitors, who published them in source form. This could lead the closed source company to release their drivers in source form too. Voila! We'll soon have an Open Source world!
This would greatly speed up kernel core development as well as device drivers development because most of the drivers would be developed and shipped separately from the kernel source. A single developer could concentrate on writing either core or device drivers, whichever he's currently working on. It is also easier to debug such code. I emphasize that the process of developing and testing drivers would speed up because you could first test them with the specialized driver API, and then rewrite them into fast C/C++/asm variants.
If Linux wants to be the OS for an average desktop machine, some of these points must be taken seriously until the world becomes fully Open Source. If not, maybe some new Open Source desktop OS should take these ideas for realization.