It’s Tuesday, so tonight is yet another Hack Night for SeattleWireless. The object of affection for wireless hackers in Seattle as of late is the Linksys WRT54G, one of their new line of Linux based APs. (For the technically minded in the audience, tales of SWN’s 54G experiences are up on the SeattleWireless Wiki).
The goal of recent fiddling has been to get a captive portal (such as NoCatSplash) running on this puppy, as well as to clean up their sloppy web interface, and possibly add some nifty new features (like IP tunnels, IPv6, wireless client mode, as well as some other obvious nicities).
This project has not been without its technical hurdles. One early problem was that of the format of their firmware updates. While the code contained within might be released under the GPL, Linksys is under no obligation to release the details of this file format. And yes, I asked them directly, but to date have gotten no reply.
No matter, with the help of many interested people around the globe, we have been able to decipher the (relatively simple) firmware file format, and even make a little utility that will generate a valid firmware for you. (Note that it’s really easy to kill your AP with “bad” firmware, but that’s another story altogether…)
Now that we are able to execute arbitrary commands on the WRT54G, it is obvious that Linksys is running modified software covered by the GPL. One perfect example of this is Zebra, the advanced dynamic routing software package. By opening the firmware file directly, as well as by making queries through the makeshift ping interface mentioned earlier, we noticed that the zebra running on the WRT54G doesn’t use the standard configuration file locations. This means that it must certainly be a modified binary.
So, naturally curious, I wanted to find out what Linksys had to do to get Zebra running on this hardware. I stopped by the Linksys “GPL Code Center”, and downloaded their zebra archive.
You can imagine my disappointment when I realized that this is in fact just a copy of the original source code available from zebra.org. Where are the changes to the source tree? I have just asked Linksys that very question, but as they still haven’t gotten back to my first query, I expect my email to be filed under irrelevant and forgotten.
I believe the GPL is an important document that is intended to prevent exactly this sort of theft of code. Any company that incorporates GPL software into a commercial product and attempts to skirt the licensing terms is nothing short of a thief, building on the stolen effort of countless contributors.
And evidently, I’m not the first to notice that these binaries are compiled with a modified GCC (with a signature string of “GCC: (GNU) 3.0 20010422 (prerelease) with bcm4710a0 modifications”). That bcm4710 refers to the Broadcom chipset that this AP is actually made from. If Broadcom is using a modified GCC for their reference design, and are making this available to their developers, aren’t they bound by the GPL to make the source code to those modifications available as well?
I will definitely be interested to see what comes of this unprecedented interest in a mainstream Linux product. If you are interested in finding out about how the WRT54G (or other Linux router from Linksys) actually operates, I urge you to write to Linksys and Broadcom, and ask (politely but firmly) for the details. I hope we can get through to these large manufacturers that while they are certainly welcome to use Open Source software in their products (and thereby benefit from the tremendous public effort spent on them), the community expects them to likewise respect the terms of licensing.
*** Update: 11:54pm 7/29/03 ***
I just got a response from Linksys support! (I’d post the email, but their disclaimer asks me not to.)
Evidently, we’ve moved on to “2nd level support”, whatever that means. Hey, it’s one round further than last time. I will keep you posted.
Oh, and in other news, Ross Jordan got a shell on the WRT54G! I’m so jealous. We worked on this all Hack night and didn’t get it first. Great work, Ross! NoCatSplash, you’ll be next!
***Update: 11:42am 7/31/03 ***
Thanks, slashdot readers for your usual valuable insight and candor. ;)
As many have pointed out, I did overlook the fact that Zebra could be compiled with options that change the location of the default configuration files. Naturally, this isn’t a source code modification, so it is entirely possible that Linksys is running a “stock” zebra.
Interestingly enough, now having pulled down several sources and compared them against the original distributions, it appears that Linksys is releasing at least some of their changes. I noticed differences in ppp, iptables, and udhcp (although the latter is missing the Makefile, probably just an oversight). There are also differences in the 2.4.5.kernel tree, although obviously there are no drivers for the wireless card.
What about other binaries in the filesystem? tftpd is heavily modified (ah, but it’s released under the BSD license). The epi_ttcp program that Ross used to get a shell, based on ttcp? Also BSD licensed. Their very, very hacked httpd is evidently based on mini_httpd, which is (you guessed it) BSD licensed. As far as I can tell without having exhaustively looked at every piece of available code, Linksys appears to be trying to comply with the terms of the GPL (as I understand them anyway), and putting many customizations into BSD code, which doesn’t require source distribution.
The question of the modified GCC is still open, but as many have pointed out, since Linksys doesn’t distribute the modified GCC binary, they are under no obligation to provide the source. Fotunately for this project, our testing suggests that we may not need the modified compiler after all. If you are a developer using Broadcom’s reference design, and they provided you with a binary GCC distribution, please request the source and redistribute it, as you would be well within your rights to do so.
For more updates on the continuing saga with Linksys and the Linux kernel, try this weblog.
Are Linksys and Broadcom in violation of the GPL?