As I posted to the SeattleWireless dev list, there are still some deep, dark questions about Linksys’ compliance with the GPL. As many thoughful readers pointed out, my earlier comments about Linksys’ GPL compliance with their other packages were misdirected. (How could I overlook autoconf? Duh.)

But the issue I’m still concerned about is the Linux kernel itself. Read my full post for more details, but essentially, here’s the deal: you can’t build a kernel using their source tree. If you run a ‘make menuconfig’, you can see critical, non-modular code for Broadcom motherboard support. This code is missing from their source tree. If you enable support for any of the Broadcom boards, this is what you see when you run ‘make zImage’:

root@qube:~/src/linux# make zImage
if [ ! -f /home/rob/src/linux/include/asm-mips/offset.h ]; then 
 touch /home/rob/src/linux/include/asm-mips/offset.h; 
fi;
make: *** arch/mips/brcm-boards/bcm947xx/compressed: No such file or directory.  Stop.
make: *** [archdep] Error 2

Also, I can build kernel modules using their tree if I fiddle with their configuration so it ignores the missing code. These modules build cleanly and insmod on a running WRT54G without warning. But strangely, they don’t actually function as they should.

I am not a kernel hacker, but I believe it is likely that Linksys (or possibly Broadcom) modified the kernel module code so that the binary device drivers for their wireless card included in the Linksys firmware won’t load on standard kernels. As a side effect, they broke standard Linux kernel module support, which is critical if we’re going to get NoCatSplash, tunnels, IPv6, etc. running on this box.

I believe that releasing critical (i.e. non-modular) kernel code without source code is a violation of the GPL. So, I wrote Linksys the following (submitted as a “complaint or concern” from their web interface).

Hello--

This is the third time I've written to you regarding GPL issues with the
WRT54G.  To date, I have received no reply.  I would appreciate your
prompt attention on this matter.

As I [1] and others [2] have documented, there seems to be non-
modular code missing from your Linux 2.4.5 kernel source tree at http:/
/www.linksys.com/support/gpl.asp.

Specifically, I am unable to build a working linux kernel based on your
tree due to source code missing from arch/mips/brcm-boards/ and
other directories.  You also seem to have modified the kernel module
loading process, as standard kernel modules built from your tree load
without warnings on a running WRT54G, but apparently do not function
properly.

I believe I am entitled to the source code to these changes, as the Linux
kernel is released under the GNU Public License [3].  My intent is to
extend the functionality of your WRT54G by building on the same open
source software platform that allowed you to build the WRT54G in the
first place.

I understand that you may be unable to distribute the source code
modular device drivers supplied by Broadcom, but I believe it is a
violation of the GPL to distribute versions of the Linux kernel that are
missing critical, non-modular kernel code.

Thank you,

--Rob Flickenger

[1] http://seattlewireless.net/archive/ezmlm.cgi?mss:12244:mnedlcagmemldcohaaho

[2] http://lkml.org/lkml/2003/7/18/364

[3] http://www.gnu.org/copyleft/gpl.html

When I hit submit on their comments page, this is what I saw:

“Thank you for helping Linksys to serve you better.
If you’ve requested a reply to this comment, you can expect it in 24 hours.”

I look forward to a prompt reply. But I’m not holding my breath.

Is Linksys in compliance with the GPL?