================================== Лицензирование модулей ядра Linux ================================== Прежде чем загружать модуль в ядро Linux, необходимо указать его лицензию. Это **обязательное условие**, если вы хотите избежать появления предупреждения **"tainted kernel"**. Назначение лицензирования --------------------------- Когда вы используете `MODULE_LICENSE()`, вы сообщаете ядру, какая лицензия применяется к вашему модулю. В зависимости от этого: - Ядро может разрешить загрузку модуля без "запятнанного" статуса (если лицензия совместима с GPL) - Или вы получите предупреждение, если лицензия проприетарная или отсутствует Пример "tainted": :: module: no license; tainting kernel Допустимые значения --------------------- Наиболее часто используемые строки: - `"GPL"` — GNU General Public License - `"GPL v2"` — GNU GPL версии 2 - `"Dual BSD/GPL"` — двойная лицензия - `"Proprietary"` — проприетарная лицензия (такая помечает ядро как tainted) Простой пример лицензионного блока ------------------------------------ .. code-block:: c #include #include static int __init hello_init(void) { printk(KERN_INFO "Привет от Garvis!\n"); return 0; } static void __exit hello_exit(void) { printk(KERN_INFO "Пока от Garvis!\n"); } module_init(hello_init); module_exit(hello_exit); MODULE_LICENSE("GPL"); MODULE_AUTHOR("Garvis"); MODULE_DESCRIPTION("Минимальный модуль с лицензией"); Пошаговая инструкция ----------------------- 1. **Добавьте директиву** `MODULE_LICENSE("GPL");` в конец файла модуля (обычно перед последней строкой). 2. Проверьте, что лицензия действительно входит в список разрешённых (иначе получите "tainted"). 3. (Опционально) Добавьте `MODULE_AUTHOR`, `MODULE_DESCRIPTION` и `MODULE_VERSION`: .. code-block:: c MODULE_AUTHOR("Ваше имя или проект"); MODULE_DESCRIPTION("Описание модуля"); MODULE_VERSION("1.0"); 4. Соберите и загрузите модуль: .. code-block:: bash $ make $ sudo insmod garvis_greet.ko $ dmesg | tail 5. Убедитесь, что **нет строки** `tainting kernel`. Итоги -------- Корректное лицензирование модуля важно как с юридической, так и с технической точки зрения. Оно позволяет ядру правильно интерпретировать поведение модуля и избежать ошибок при разработке.