While most basic hardware support for GNU/Linux is improving constantly, wireless support remains dismal. Few manufacturers make an effort to support the operating system, or to publicize what support they have. Moreover, the components of wireless devices change so fast that one version of a device may offer support while a second version doesn't -- even though both versions share the same model number. And if, in addition to functionality, you also want a device with free drivers and no reliance on proprietary firmware, your choices are even more limited. Fortunately, no matter what your preferences, online resources exist to help you find the card that's right for you or get your existing wireless network adapter to work with Linux.
Before you start looking for alternatives, you should be aware of what you are up against. In particular, you should know that some modern laptops, including most recent Lenovo Thinkpads, check for the original mini-PCI wireless card, and will not boot if it is changed or removed.
You can get around this limitation by editing the CMOS or modifying the BIOS. But the consequences if you make a mistake there can include an unusable computer, so these solutions are not for the inexperienced or faint of heart. Most people are probably better off looking for a wireless PCMCIA, ExpressCard, or CardBus adapter, or one on a USB dongle, which can be added without any consequence. The loss of an external port may be a small price compared to the dangers of changing the mini-PCI card.
Once you have decided what form your wireless support will take, identify your device either from the documentation that ships with it or by running the
lspci command. Then look it up in Ubuntu's detailed wireless documentation, which includes a list of mini-PCI and PCMCIA adapters, and another one of USB devices. These lists will tell you whether your card is supported by one of three non-free solutions -- Ndiswrapper, the Broadcom Firmware-Cutter, or the MadWifi drivers -- or supported by a driver that is installed automatically with Ubuntu. While your distribution may not include the same defaults, if Ubuntu supports a driver you need, at least in theory you should be able to get your wireless device working on your distribution as well. No matter what your solution, other pages in Ubuntu's documentation should provide most, if not all, the information you need to enable wireless.
The one drawback to the Ubuntu lists is that the information about ExpressCard and Cardbus adapters tends to be limited. To find more current information, go to the information about ExpressCard and Cardbus on the TuxMobil site. However, be aware that these lists include more than just wireless cards.
Given the current state of wireless support, the odds are overwhelming that the device that comes with your computer will only work with a non-free solution. If you decide to focus on functionality and try to live with what you have, you should be able to enable it by using Ndiswrapper or, if you have a Broadcom card, the Broadcom Firmware Cutter. Both Ndiswrapper and the Firmware Cutter are hacks that wrap a layer of code around the Windows driver for your card so that you can use it under GNU/Linux. Either method involves identifying the card and following a relatively simple set of steps, but both can give mixed results. More importantly, if you are committed to free software, then the use of a Windows driver will make these solutions unacceptable to you.
Another non-free alternative is the Madwifi drivers for the Atheros chipset, which can be found in many distributions. Like Ndiswrapper and the Firmware Cutter, the Madwifi drivers are free software in themselves, but dependent on non-free software. Madwifi developers are working on a free version of the binary-only Hardware Abstraction Layer that the software depends on. Until that effort reaches maturity, however, in many cases Madwifi will not be acceptable to those who prefer free software.
Finding free alternatives
In fact, many free drivers for GNU/Linux are dependent on non-free firmware, which makes them unacceptable for completely free distributions such as gNewSense or for individuals who want a free operating system.
According to the Free Software Foundation's hardware pages, the only devices that are completely free are those that use the Ralink RT2500/RT2400 chipset or the Realtek RTL8180 chipset with the driver compiled from source. The trouble is, not all devices that use these chipsets work with GNU/Linux, if user experiences described on the Internet can be trusted. Nor do all distributions include drivers for those that do, which is why the wireless page also includes a link to the rt2x00 Project that develops them. To further complicate matters, the chipset is almost never mentioned in the specifications for wireless devices.
The simplest approach is to use one of the devices that the Free Software Foundation has tested, such as the Asus WL-107G PCMCIA card and the Linksys WUSB54G USB 2.0 dongle. However, if you want more alternatives, look at the lists of manufacturers and devices maintained at Rapla.net, which are conveniently divided into device types.
Some items on the list are marked with an asterisk, and whether they use the chipset depends on the version of the device, so you should be careful to buy only the version specified (if one is). Items unmarked by an asterisk should be usable regardless of version, although, just to be safe, you might want to avoid recent models to avoid undocumented changes.
Having come so far, you should also take the time to search on the manufacturer and model of the devices you are interested in and see what experience others have had with them. For instance, in searching for a USB dongle, I decided against the Buffalo WLI-U2-KG54-AI and Gigabyte GN-WBKG because of reported problems I found discussed on the Internet. Instead, I identified the OvisLink Evo-W54USB and Sweex LC100060 as adapters that other users had enabled successfully.
Once you have done this research, your final obstacle is to buy the device of your choice. If my experience is typical, you will have to order your adapter rather than run down to your local retailer. You should also go shopping armed with several alternatives, since your first choice might not be available. You will probably have more luck ordering from an independent store than a member of a chain. Frequently, chain stores will order only limited inventory or deal only with certain suppliers, and may refuse to order any of your choices.
Making a choice
Is tracking down a free wireless adapter worth the effort? That depends on your priorities. If you only want your computer to work, then probably you should be content using Ndiswrapper, the Firmware-Cutter, or the Madwifi drivers -- at least for a while. As the forums for major distributions attest, these utilities can be tempermental. They not only have to be reapplied with every major version change in your kernel, but, sometimes, with minor version changes as well. At times, a revised kernel may stop them working altogether, at least temporarily.
For such reasons, choosing a free solution may be less quixotic than you might first imagine. The non-free solutions to GNU/Linux's lack of consistent wireless support are ingenious hacks, but, if a free solution takes more research in the short run, in the long term, your idealism may result in more trouble-free computing and be the wiser choice.