Hello, I've just hit on another license-related issue.
I've developing some Linux software on top of the NIRLP driver, using the NIMHDDK (osiBus) layer.
So far so good. However, in modifying the NIRLP driver I've hit a legal wall:
You claim that the NIRLP driver is licensed with BSD:
ftp://ftp.ni.com/support/daq/mhddk/readme.htmHowever, the MODULE_LICENSE line in nirlpk.c says the following:
MODULE_LICENSE("Copyright (c) 2006 National Instruments Corporation. All Rights Reserved.");
Which does not specify BSD. In any case, it hasn't been a problem since Linux has technically allowed linking against non-GPL licensed code.
However, there has been a movement to start marking new functions exported in the kernel API as "GPL-only" symbols.
I started modifying NIRLP to announce itself on sysfs, so that it would be noticed by udev and show up under /dev automatically.
This requires calling the function "class_create()". When I compiled the module calling this function, I got the following error:
make[1]: Entering directory `/usr/src/kernels/2.6.24.4-64.fc8-i686'
Building modules, stage 2.
MODPOST 1 modules
FATAL: modpost: GPL-incompatible module nirlpk.ko uses GPL-only symbol 'class_create'
make[2]: *** [__modpost] Error 1
make[1]: *** [modules] Error 2
make[1]: Leaving directory `/usr/src/kernels/2.6.24.4-64.fc8-i686'
make: *** [default] Error 2
So, technically it is now a bit of a problem that the module is BSD-licensed, since it is impossible to mark the module GPL in order to bypass this error. (BSD is techically incompatible with GPL.) The kernel documentation recommends that BSD code intended to be used in the kernel should be dual-licensed as BSD/GPL:
http://www.kernel.org/pub/linux/docs/lkml/I highly recommend that NI consider dual-licensing the NIRLP driver for Linux if they intend to support it further, or allow their customers to modify it. I believe this would be in the spirit of the original license, but would allow better integration with the direction in which Linux is moving. Currently I'll have to instruct my users to manually create a device node instead of having it appear automatically, which is slightly annoying in terms of usage.
Thanks,
Steve