Wireless networking
Warning: useless rant follows
Since about two years, my main machine is an Apple Powerbook G4. These come with builtin wireless ("Airport Express"), but for a long time there were no Linux drivers for these things. Instead, I had bought myself a USB wireless thingy; one based on a ZD1211 chipset, for which there is a free driver contributed by the company that designed the chipset. The driver needs non-free firmware, but I don't give a flying **** about that. The unfortunate thing about the driver is that it was written in a style that makes it hard to be accepted by the kernel developers, so that didn't happen. And won't for a while. As a result, the driver sometimes breaks upon kernel upgrade, which is a shame. But when it does work (which unfortunately is not 'now'), it works great; the throughput is about as much as I could expect from my 11M wireless access point.
The alternative now is to use the Airport Express driver. Unfortunately, this driver only exists because some binary-only driver that existed for Linux somewhere was reverse-engineered. As a result, the driver isn't very good; it sometimes crashes on me (in which case the only thing I can do is power down my laptop and boot it up again), and when it does work only has a throughput of about 60kB, at best. Which is not very good (a 10Mbit network can easily reach about 10 times that speed; and yes, I did verify that I'm running at 11Mb/s, not at 1).
I'm very grateful to Zydas for providing a GPL-ed driver for their hardware. If only companies such as nVidia, ATI, and broadcom would give up their crack pipe and behave similarly, then this world would be a much better place. But I'm not grateful to Zydas for just providing a dump of their CVS repository and leaving it at that; getting a driver into the Linux kernel is not that hard, it just takes some persistence. Had they done that, I would've had working wireless now.
Real working.
grmbl.
Update: Seems the situation is better than I thought. It had been a long time since I last tried the bcm43xx driver. Last time I tried it it was a piece of crap; when I tried it a few days ago, it was also a piece of crap. Apparently, though, that was just bad luck, since the driver in 2.6.18 is buggy (but it should be fixed in 2.6.18.1).
And for the Zydas driver, apparently it made it into the kernel mainline while I wasn't looking. Only it doesn't work for me, probably because the hardware is breaking down (if I hold it in a peculiar way, it gets detected as a broken USB1 device rather than a working USB2 device, which is not good...). That, or my access point is playing tricks on me. That wouldn't be the first time, either.
I guess an apology is warranted here. Sorry.
That's so depressing to read that the bcm43xx driver isn't any good. In fact, a lot of people use it regularly with good results. And we've worked reverse engineering on it for over a year now. As someone else pointed out, 2.6.18 has a bad version, but other versions are usually much better. Plus, you can hardly blame a crashing driver on the fact that it was developed through reverse engineering.
About zd1211... there's a driver in the kernel.
Don't know what you're talking about. I was in a similar situation to you, except that I used a DWL-122 usb stick (prism2/linux-wlan-ng based) instead of your zd1211. The wlan-ng usb drivers have always been pretty crap, sadly enough - I think a major reason is that they're not even trying to get it merged.
Since bcm43xx became kind of usable beginning this year I haven't looked back. In the beginning it was a bit flaky, and I had to add some magical incantations to my /etc/network/interfaces file, but these days it's pretty solid. Speeds are great, connection stable, it's nearly all good - thanks Johannes and the rest of the bcm team. The one bug that is still there for me, is that when I resume from suspend, network-manager can't always associate to my AP anymore.
But the things you were experiencing (60kb speeds etc) - I don't think I've ever experienced that.
I believe the reverse-engineering probably resulted in a better driver, because they didn't have to deal with some legacy code dump that some company threw over the wall, hoping it'd land in the kernel. The timing was right too, as it was arrived just as Linux was getting it's wireless act together - or maybe it was because their implementation arrived that the issues with softmac stacks really came to light, which forced the Linux guys to get the issues straight.
I'd expect bcm43xx also to be the first driver to use the stack the linux guys will finally settle on - meaning very likely a cleaned up version of the devicescape stack.
All in all, I'm glad I'm using this chipset, purely because its driver is merged and it has probably the most active maintenance.