Linux and Linksys: the saga continues
by Rob Flickenger
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; \
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).
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  and others  have documented, there seems to be non-
modular code missing from your Linux 2.4.5 kernel source tree at http:/
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
I believe I am entitled to the source code to these changes, as the Linux
kernel is released under the GNU Public License . 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
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.
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?
Rob, I wonder if the folks at http://www.socalwug.org/ would get code if they knocked on the front door at Linksys headquarters?
perhaps . i think it needs to be approached not from a 'linksys you are evil and you are doing something wrong' but a 'even more people would buy your stuff if it was actually better at routing, and we can make it better for free'. love the wrt54g but soon i will need another one and if theres no progress by then i'll proably get a soekris instead. so their hesitancy may result in lost sales amongst enthusiasts who want to do more than browse the web behind their router.
kernel modules not loading
Admittedly the kernel source is broken from the point that you can't do a 'make menuconfig' out of the box, but that's not why people are having an issue with modules. There's somewhat of a misconception that all the code for a module is within the module itself; fact is that enabling many modules secretly enables helper functions and hooks within the kernel that give the module access to kernel structures. Unfortunately what this means is that you can't just slap on modules like ipv6 without coming up with creative ways to patch the running kernel to work around the lack of helper functions.
Rob, did you consider sending the same message in a written letter to the Cisco legal department? They have much more of a public reputation at stake.
My letter to Linksys
I wrote this to Linksys's "Open Source Inquiries" e-mail address (firstname.lastname@example.org) after reading this article: