2009-05-06 2 views
5

После обновления ядра Linux мой сервер VMWare не может запускаться до тех пор, пока vmware-config.pl не выполнит какую-либо перезаработку (включая сборку некоторых модулей ядра).Почему мне нужно перекомпилировать модуль ядра vmware после обновления ядра Linux?

Если я обновляю свой Windows VMWare хост с последним пакетом обновления Windows, обычно мне не нужно ничего делать для запуска VMWare.

Почему VMWare работает по-разному между Linux и Windows? Является ли это повторное компиляция действий приносит какие-либо выгоды для платформы Linux поверх Windows?

ответ

12

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 и (в худшем случае) неэффективна, вызывает ошибки и препятствует продвижению вперед.

2

У Linux нет стабильного ядра ABI - такие вещи, как внутренняя компоновка данных и т. Д., Изменяются от версии к версии. VMWare необходимо перестроить для использования ABI в новом ядре.

С другой стороны, Windows имеет очень стабильное ядро ​​ABI, которое не изменяется из пакета обновления в пакет обновления.

1

Чтобы добавить ответ bdonlan, совместимость с ABI - это смешанная сумка. С одной стороны, он позволяет распространять двоичные модули и драйверы, которые будут работать с более новыми версиями ядра. С другой стороны, он заставляет программистов ядра добавлять много клей-кода для сохранения обратной совместимости. Поскольку Linux является открытым исходным кодом, а потому, что kernel developers even whether they're even allowed, возможность распространять двоичные модули не считается такой важной. С другой стороны, разработчикам ядра Linux не нужно беспокоиться о совместимости ABI при изменении структур данных для улучшения ядра. В конечном итоге это приводит к более чистым кодам ядра.

1

Это следствие того, что Linux и Windows разрабатываются в различных культурных средах и ожиданиях: http://www.joelonsoftware.com/articles/Biculturalism.html. Вкратце: Windows предназначена для пользователей, в то время как Linux развивается, чтобы быть подходящей для разработчиков с открытым исходным кодом.

Смежные вопросы