Holy crap, I've gotten bcm43xx (the free Broadcom wireless driver) to work on my Powerbook (g4 17" 1.5GHz) under Debian, and with WPA encryption too!

I've got an up-to-date Debian Testing (etch) with a newer kernel. I installed the linux-image-2.6.17-1-powerpc from unstable, which came with the bcm43xx driver. (Before I installed the one from unstable, I tried building and installing a custom one, but it didn't work, so I gave up on that.)

If you're upgrading from before 2.6.15 like me, your upgrade path may include "udev". I'm currently using udev, but it conflicts with hotplug... in any case, I didn't have any actual issues except for some weird looking error messages a couple times. Once I was booting under the newest kernel they went away. (But now my sound doesn't work, so I have to look into that.)

Firmware: Before I booted the kernel, I dumped the firmware for my bcm43xx into /lib/firmware. Under Debian, simply install the bcm43xx-fwcutter package. Now, if it doesn't pop up a Debconf prompting you to "extract and install the firmware," simply sudo dpkg-reconfigure bcm43xx-fwcutter and it will prompt you. Say yes, and ls /lib/firmware to make sure there's a bunch of .fw files in there.

Another package you'll need is "wireless-tools", which contains such gems as "iwconfig"; and, if you want WPA, you need wpa_supplicant. More on this after you reboot.

Now boot the new kernel. You should be seeing bcm43xx related messages in your dmesg. Mine gave a bunch of messages and said something like "Radio turned off."

Iwconfig should be installed at this point to /sbin/iwconfig. Run it. It will probably make it abundantly clear which device is the wireless one. Mine was eth2. To turn on the radio, I had to ifconfig eth2 up (these mostly need root permissions). Then my "iwlist eth2 scan" worked and showed me some SSIDs. Find the one you want and look at its channel and SSID.

Then do "iwconfig eth2 channel 6" (specify the channel from scan) and "iwconfig eth2 essid BrownCS" (specify the SSID you want).

I edited /etc/network/interfaces and added "iface eth2 inet dhcp". /etc/init.d/networking restart; ifdown eth0; ifup eth2 and I was on my way (without WPA yet though).

To get WPA: Back to /etc/network/interfaces. Modify the eth2 stanza:

iface eth2 inet dhcp
        wpa-driver wext
        wpa-ssid BrownCS
        wpa-key-mgmt WPA-PSK
        wpa-passphrase MyAwesomeWPAPassphrase

It all works. Woot!