Go читать The Linux Kernel Driver Interface.
Это написано, чтобы попытаться объяснить, почему Linux не имеет интерфейса двоичного ядра и не имеет стабильного интерфейса ядра. Пожалуйста, поймите, что в этой статье описываются интерфейсы _in kernel_, а не ядро для интерфейсов пользовательского пространства. Ядро для интерфейса пользовательского пространства - это тот, который использует прикладные программы, интерфейс syscall. Этот интерфейс стабилен с течением времени и не прерывается. У меня есть старые программы, которые были построены на ядре pre 0.9something, которое по-прежнему отлично работает на последней версии ядра 2.6. Этот интерфейс является тем, что пользователи и программисты приложений могут рассчитывать на стабильность.
Он отражает мнение большой части разработчиков ядра Linux: свободу менять в ядре детали реализации и API, в любое время позволяет им развиваться гораздо быстрее и лучше.
Без обещаний поддерживать идентичные версии ядра для выпуска в ядре, не существует возможности для надежного работы бинарного модуля ядра, такого как VMWare, на нескольких ядрах.
В качестве примера, если некоторые структуры изменяются в новом выпуске ядра (для повышения производительности или дополнительных функций или по какой-либо другой причине), двоичный модуль VMWare может привести к катастрофическим повреждениям, используя структуру старой структуры. Компиляция модуля снова из источника приведет к созданию новой структуры структуры и, следовательно, даст больше шансов на работу - хотя все равно не 100%, в случае, если поля были удалены или переименованы или заданы в разных целях.
Если функция изменяет список своих аргументов или переименовывается или иным образом становится недоступной, даже перекомпиляция из одного и того же исходного кода не будет работать. Модуль должен будет адаптироваться к новому ядру. Поскольку каждый (должен) иметь источник и (может найти кого-то, кто) может изменить его, чтобы соответствовать.«Push work to the end-nodes» - общая идея как в сетевом, так и в свободном программном обеспечении: поскольку ресурсы [на грани]/[разработчиков за пределами ядра Linux] больше, чем ограниченные ресурсы [магистрали]/[разработчиков Linux], компромисс, чтобы сделать, чтобы сделать работу больше, принимается.
С другой стороны, Microsoft приняла решение о том, что они должны максимально поддерживать совместимость с двоичным драйвером - у них нет выбора, поскольку они играют в собственном мире. В некотором смысле, это делает его намного проще для сторонних разработчиков, которые больше не сталкиваются с движущейся целью и для конечных пользователей, которые никогда не должны ничего менять. С другой стороны, это заставляет Microsoft поддерживать обратную совместимость, которая (в лучшем случае) трудоемкая для разработчиков Microsoft и (в худшем случае) неэффективна, вызывает ошибки и препятствует продвижению вперед.