Как вы сказали, лицензия BSD, используемая ядром BSD, гораздо более либеральна, поэтому нетрудно связать туда любые лицензированные модули.
Для случая Linux правильно, что GPL сама по себе запрещает связывание несовместимого с GPL кода, который не разрешил бы связываться в проприетарных модулях или даже модулях LGPL.
Однако правообладатели Linux разрешают вам связать ваш модуль «LGPL» с любым частным кодом. Примером этого является драйвер nvidia:
/------------.-\
| Kernel |
| |
| /--------\ |
| | Module | | /-------------------\
| | (LGPL) <========> proprietary code |
| \--------/ | \-------------------/
\--------------/
Это все еще было бы незаконным под GPL в целом, но явно разрешено для ядра Linux. В качестве справки, посмотрите, что Линус Торвальдс говорит об этой проблеме здесь:
http://linuxmafia.com/faq/Kernel/private-kernel-modules.html
P.S. Связывание - это симметричная операция с точки зрения GPL.
Ограничения GPL активируются не самим связыванием.
Это дистрибутив «производной работы» работы GPL, которая активирует ограничения - вы должны предоставить любому, кому вы предоставили «производную работу», исходный код, необходимый для воссоздания «производной работы». Работа".
Теперь возникает вопрос, где проводится линия «производной работы» - что далеко не совсем ясно (и, вероятно, будет отличаться в разных юрисдикциях!). Например, если вы распространяете скомпилированный двоичный файл ядра Linux со своим статически связанным кодом как часть этого, совершенно ясно, что весь двоичный файл является «производной работой». С другой стороны, если вы распространяете только свой модуль , который использует только «опубликованные интерфейсы» ядра, то это, вероятно, не «производная работа».
Однако между этими двумя позициями много места. Например, если вы распространяете устройство, которое содержит флэш-память, содержащую ядро Linux и скомпилированный двоичный драйвер, является ли полное содержимое флэш-памяти «производной работой»? Мне это действительно кажется, но мнения расходятся, и только окончательный ответ будет дан, когда он будет проверен в суде (и даже тогда, только для юрисдикции этого суда).
Я не могу сказать из вашего вопроса, но вы, возможно, думаете об этом задом наперед. Если вы пытаетесь использовать проприетарный драйвер в Linux, тогда да, это должно быть разрешено.
Это правда, что любой код, который ссылается на код под GPL, сам должен быть под GPL. Однако код под GPL может связываться с библиотеками с закрытым исходным кодом без изменения лицензии этих библиотек (в противном случае мы могли бы сделать каждую существующую библиотеку открытой, просто написав программу GPL и связав ее с библиотека). Следовательно, ядро Linux под GPL может без проблем связываться с вашим драйвером с закрытым исходным кодом.
При этом необходимо, чтобы драйвер был написан таким образом, чтобы он был либо полностью самодостаточным, либо связывался только с библиотеками, которые допускают неограниченное связывание (LGPL, MIT и т. Д.). Это также означает, что ваш драйвер должен быть загружаемым модулем ядра, а не статически компилироваться в ядро.