Этот вопрос касается обслуживания и тестирования конфигурации.Как Linux-сервер поддерживает огромное количество опций конфигурации?
При неправильном использовании инструкции препроцессора #ifdef, #ifndef, #elseif, #elif, #else, #endif
не только уменьшают удобочитаемость и ремонтопригодность C-кода, но также увеличивают риск ошибок регрессии (например, когда конкретная конфигурация сборки не тестировалась в течение определенного периода времени).
Мне интересно, как ядро linux может поддерживать огромное количество опций конфигурации, не запускаясь в полный адский сервис?
Я понимаю, что это необходимо, чтобы быть гибким для всех видов различного оборудования, но огромное количество опций конфигурации выглядит пугающе для меня как разработчика приложения.
Какие из следующих утверждений вы считаете истинными?
- Большинство производителей используют только набор стандартных конфигураций для их целевой платформы, так что большинство из возможных комбинаций конфигурации не являются ни испытания, ни использовали
- очень жесткое руководство кодирования существует, что позволяет ввести новый
#ifdef's
только для четко разделяемых частей кода, где имеет смысл отключить функцию (и правильные люди, ответственные за принятие этих решений) - Есть так много тестеров для каждого нового выпуска ядра, что ошибки, связанные с конфигурацией, фиксируются во времени, поскольку большинство из них, вероятно, будут только строить регрессии
EDIT: Я понял, что есть тестовые машины, которые выбирают случайные конфигурации и проверяют, строят ли они и загружают. Тем не менее, эти простые сборки/загрузки-тесты не могут обнаружить каких-либо серьезных регрессий, кроме ошибок, которые ломают все.
Отсутствует опция: (*) позволяют разумным людям решать, что происходит, и как это происходит. – wildplasser
Я не эксперт, чтобы ответить на это, но я могу предвидеть, что конфигурация в основном выбирает, какие файлы входят и выходит из сборки. Если вы построите архитектуру X, то всякая другая архитектура не будет построена. –
Я не думаю, что это касается архитектуры и целых драйверов, поскольку существуют варианты конфигурации для множества функций низкого уровня. – Mike76