Ir leer The Linux Kernel Driver Interface.
Esto se está escribiendo para tratar de explicar por qué Linux no tiene una interfaz binaria del núcleo, ni tiene una interfaz estable del núcleo. Tenga en cuenta que este artículo describe las interfaces _in kernel_, no las interfaces kernel a espacio de usuario. La interfaz kernel to userspace es la que utilizan los programas de aplicación, la interfaz syscall. Esa interfaz es muy estable a lo largo del tiempo y no se romperá. Tengo programas antiguos que se crearon con un kernel anterior a 0.9 de algo que todavía funciona bien en la versión más reciente del kernel 2.6. Esta interfaz es la que los usuarios y programadores de aplicaciones pueden contar para mantenerse estables.
refleja la opinión de una gran parte de los desarrolladores del kernel de Linux: la libertad de cambiar los detalles de implementación y las API del núcleo hace en cualquier momento les permite desarrollar mucho más rápido y mejor.
Sin la promesa de mantener las interfaces en el núcleo idénticas de una versión a otra, no hay forma de que un módulo de núcleo binario como VMWare funcione de manera confiable en múltiples núcleos.
Como ejemplo, si algunas estructuras cambian en una nueva versión del núcleo (para un mejor rendimiento o más características o cualquier otra razón), un módulo VMWare binario puede causar daños catastróficos utilizando el diseño de la estructura anterior. Si vuelve a compilar el módulo desde la fuente, se capturará el nuevo diseño de la estructura y, por lo tanto, tendrá más posibilidades de funcionar, aunque todavía no al 100%, en caso de que los campos se hayan eliminado o cambiado de nombre o se les hayan asignado diferentes propósitos.
Si una función cambia su lista de argumentos, o se renombra o deja de estar disponible, ni siquiera volver a compilar desde el mismo código fuente funcionará. El módulo tendrá que adaptarse al nuevo kernel. Como todos (deberían) tener una fuente y (pueden encontrar a alguien que) pueden modificarla para que quepa."Insertar trabajo en los nodos finales" es una idea común tanto en redes como en software libre: ya que los recursos [en las franjas]/[de los desarrolladores fuera del kernel de Linux] son más grandes que los recursos limitados [de la red troncal]/[de los desarrolladores de Linux], se acepta la compensación para hacer que el primero haga más trabajo.
Por otro lado, Microsoft ha tomado la decisión de que deben preservar la compatibilidad del controlador binario tanto como sea posible; no tienen otra opción, ya que están jugando en un mundo propietario. De alguna manera, esto hace que sea mucho más fácil para los desarrolladores externos que ya no se enfrentan a un objetivo en movimiento, y para los usuarios finales que nunca tienen que cambiar nada. En el lado negativo, esto obliga a Microsoft a mantener la compatibilidad hacia atrás, que (en el mejor de los casos) consume mucho tiempo para los desarrolladores de Microsoft y (en el peor de los casos) es ineficiente, causa errores y evita el avance.