Лицензирование модулей ядра 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)

Простой пример лицензионного блока

#include <linux/module.h>
#include <linux/init.h>

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:

MODULE_AUTHOR("Ваше имя или проект");
MODULE_DESCRIPTION("Описание модуля");
MODULE_VERSION("1.0");
  1. Соберите и загрузите модуль:

$ make
$ sudo insmod garvis_greet.ko
$ dmesg | tail
  1. Убедитесь, что нет строки tainting kernel.

Итоги

Корректное лицензирование модуля важно как с юридической, так и с технической точки зрения. Оно позволяет ядру правильно интерпретировать поведение модуля и избежать ошибок при разработке.