Перейти читать Интерфейс драйвера ядра Linux .
Это написано, чтобы попытаться объяснить, почему Linux не имеет двоичного интерфейса ядра и не имеет стабильного интерфейса ядра. Помните, что в этой статье описываются интерфейсы _in kernel_, а не интерфейсы ядро-пользовательское пространство. Интерфейс ядра к пользовательскому пространству - это тот, который используют прикладные программы, интерфейс системного вызова. Этот интерфейс очень стабильный и не сломается. У меня есть старые программы, которые были построены на ядре до 0.9, которое все еще прекрасно работает в последней версии ядра 2.6. Этот интерфейс является тем, на который пользователи и прикладные программисты могут рассчитывать на стабильность.
Это отражает мнение большой части разработчиков ядра Linux:
свобода изменять детали реализации и API в ядре в любое время позволяет им развиваться намного быстрее и лучше.
Без обещания сохранять одинаковые интерфейсы в ядре от выпуска к выпуску, для бинарного модуля ядра, такого как VMWare, невозможно надежно работать с несколькими ядрами.
Например, если некоторые структуры меняются в новом выпуске ядра (для лучшей производительности или большего количества функций или по любой другой причине), двоичный модуль VMWare может привести к катастрофическому повреждению при использовании старой структуры структуры. Повторная компиляция модуля из исходного кода захватит новый макет структуры и, таким образом, даст больше шансов на работу - хотя все еще не на 100%, если поля были удалены или переименованы или им присвоены другие цели.
Если функция изменяет свой список аргументов, или переименовывается или иным образом становится недоступной, даже перекомпиляция из того же исходного кода не будет работать. Модуль должен будет адаптироваться к новому ядру. Так как каждый (должен) иметь источник и (может найти кого-то, кто) может изменить его, чтобы соответствовать. «Продвигать работу к конечным узлам» является общей идеей как в сети, так и в свободном программном обеспечении: поскольку ресурсы [на периферии] / [разработчиков вне ядра Linux] больше, чем ограниченные ресурсы [магистрали] / [из разработчиков Linux], компромисс, чтобы заставить прежнего делать больше работы, принят.
С другой стороны, Microsoft приняла решение, что они должны максимально сохранить совместимость двоичных драйверов - у них нет выбора, поскольку они играют в частном мире. В некотором смысле, это значительно облегчает работу внешних разработчиков, которые больше не сталкиваются с движущейся целью, и конечным пользователям, которым никогда не нужно ничего менять. С другой стороны, это вынуждает Microsoft поддерживать обратную совместимость, которая (в лучшем случае) отнимает много времени для разработчиков Microsoft и (в худшем случае) неэффективна, вызывает ошибки и препятствует продвижению вперед.