Updated: July 16, 2011
Let's say you want to buy a laptop and install a Linux distro on it. However, you're facing a sort of a dilemma. Unlike Windows, which often comes preinstalled and configured with all the necessary drivers, you do not really know if your distro will fully support the underlying hardware. You might end up with a non-functioning system that will require a long time fixing and tweaking.
So what do you do? How do you choose hardware that will make your Linux flavors behave without compromising on your actual needs? No worries, I will help you. Today, you will learn how to make the best decisions when it comes to purchasing hardware for Linux.
Real life examples
I'm not trying to preach. I have purchases three laptops in the past two years including an LG RD510 machine, which is dedicated to Linux, an HP Pavilion, used for gaming and virtualization mostly, and a modest if spicy eeePC netbook, used for lightweight travel stuff and writing. None of these computers came pre-installed with Linux, so I had to know upfront whether I was going to face serious trouble. I knew, therefore I faced no trouble.
On top of that, I'm using several other laptops for testing and education purposes, all of which run different hardware, including disk types, graphics cards, network adapters, and more. And yet, things seem to be going pretty well. So I must be doing something right, unless I'm being extremely lucky. The question is, how do you choose?
Processor choice
This is trivial. I have not heard, seen, witnessed, or experienced one case where the Linux distribution would not boot because of the incompatible processor. Choose anything you like, this is completely transparent.
Even if you have special needs, like Symmetric Multi Processor (SMP) support, this poses no obstacles. You do not even need special kernels, as the modern mainline kernels come with SMP support compiled in.
Hard disk choice
In general, there should be no problems. The last time I had a Linux distribution hiccup on a disk was in 2005, if my memory serves me well, and this was a older release being tested on spank-new hardware. You can go with anything you like, including SSD.
Still, there are some special considerations you ought to make. This relates to software and hardware RAID. Another item worth examining are disks larger than 2TB.
Large disks
If you have very large disks, you might face a problem of not being able to initialize or partition your disks. Modern distributions should all support very large disks, but it is best to check before purchasing. What you need to know is whether your system (kernel) supports EFI/GPT partitions, in addition to regular ms-dos. Otherwise, you may need to recompile the kernel or use an alternative solution. To check whether your kernel does the required magic, dump the config file for your kernel and check:
cat config-<kernel> | grep CONFIG_EFI_PARTITION
The commands are a little different for various stocks of Linux. For instance, SUSE keeps the kernel configuration under /proc/config.gz, and you need zcat to view the contents.
To arrange the disk, you can use GParted.
Linux distributions that are RHEL-based, including CentOS, Fedora, Scientific, as well as openSUSE also support more complex partitioning schemes, including RAID and LVM. More about that shortly.
RAID setup
There's hardware and software. Let's begin with software. If you choose to array your disk in a RAID configuration, please note that editions of some distributions do not support installation to software RAID devices. For example, Ubuntu; you will need to use the alternate installation to get this done.
Hardware RAID should be transparent, but I know of several fairly advanced users who later faced problems with bootloaders and system imaging, because they used hardware RAID in their setup. RAID can be a great thing, just be aware that it adds another layer of complexity. Moreover, you have limited access to the RAID controller, and if it has bugs, then you might have to run a BIOS firmware update to solve problems. This does not normally happen with simpler configurations.
Graphic card choice
This is a big one. If you ask me, discrete Nvidia card, there. I have never faced problems with Nvidia cards and drivers, even back in the day when I had to manually compile them. On the other hand, my Linux experience with ATI cards has been a little bumpier, although on a very limited scale, so don't jump to any conclusions. Most importantly, many of my imaginary friends suffered from using ATI cards in their Linux environment. This is entirely subjective, so go with whatever works for you.
Network adapters choice
Another big one. In fact, this is fairly critical. While you can get away with the basic graphics driver, including the built-in kernel thingie, you won't get far without network, Wireless in particular. So how do you choose the right hardware?
Open-source drivers sound like a good bet. On the other hand, do you really want to give up an extremely good deal because of one little component? It is quite possible you may need to choose hardware with proprietary, closed-source drivers. My experience so far has been very positive with Intel and Broadcom Wireless network cards and drivers.
Other things
We could debate many other components, like monitors, video cameras and so forth. Then, there are also peripherals like keyboard, mouse, printers, scanners. My experience with computers, both desktops and laptops, is fairly extensive, however I have limited access to accessories, which is why I can't shed too much light on these matters.
We could also debate choosing the right power supply, the casing, proper air cooling, and such, but that's where you go to dedicated sites like phoronix.com and tomshardware.com to get information, help and enlightenment.
More reading & other tips
In this guide, I have not included any tips on how to solve typical problems with misbehaving hardware, like blacklisting drivers, manual compilation. To that end, I recommend you take a look at several other articles and tutorials:
Highly useful Linux commands & configurations (drivers, compilation, etc)
Configuring extra repositories for proprietary software (my older SUSE review & tutorial)
Resolving boot issues with bad initrd (with tips for network card problems, as well)
GRUB bootloader legacy and TNG (lots of focus on various setups)
And more; just browse the whole Linux section thingie.
Conclusion
To sum it up, my recipe for painless Linux computing is to buy machines with Nvidia graphics cards and usually Intel or Broadcom Wireless adapters. I tend to keep the disk configuration simple, one or more individual devices, with no hardware or software RAID.
It boils down to network and graphics. The rest is pretty much given. I've never paid any special interest to fingerprint readers, smart card readers and alike, and therefore, I never had any issues with those, either. It's the Murphy's Law. Still, think about it. While you may require your smart card reader once every seven months, you need the network connection and proper display functionality at all times.
Well, I hope some of you find this guide useful. It's by no means all-inclusive, all-comprehensive, the mother-of-all-recommendations article. Even if you follow my advice, it does not mean your computing experience will be trouble free. Still, I'm convinced this is a good start and should make you first Linux steps more pleasant.
P.S. I think I am going to write a separate hardware troubleshooting guide, with focus on how to obtain hardware information using system info tools, lspci, checking proper functionality of drivers, adding proprietary-software repositories, and more.
Take care for now. Happy Linuxing.
Cheers.