There are plenty Linux reviews, though almost none of them are about Linux. You see, Linux is only a kernel, but most Linux reviews are about KDE, SuSE, the desktop and so on. Those reviews aren't about Linux, strictly speaking. In contrary, this review IS about Linux, made for the people who normally don't configure and compile their own kernel. In a previous LXer feature, my colleague Tom Adelstein said Linux is a me-too technology. That may be true for the desktop, but it is not fair to judge the whole Linux technology on its desktop. I hope to show, Linux (the kernel!) is full of innovation and peculiar features, which sometimes even sound like secret language, and is preceding its Big Competitor when it comes to features.
To be honest, a lot of kernel features need other programs on a user-level, to do anything usefull, so this article is not only about the kernel, but also about the userspace software to turn that kernel features to anything usefull.
Another note: We shouldn't forget, drivers for Windows are usually supplied by the hardware-vendors. Out of the box, Windows doesn't support that much hardware.
In the Linux kernel however, all drivers are included "out of the box". This means, the drivers are tested for Linux, and found stable by the "Linux kernel" team. After that, they are added to the linux kernel, to be used by everybody.
As I will try to show in this article, Linux has a lot of drivers and features. It also lacks some necessary drivers, especially for onboard gigabit-ethernet chips, onboard sound-chips, and video cards. Here, the hardware manufacturers sometimes offer proprietary drivers if you are lucky. But, normally, the hardware-vendors are to blame here. You probably can't imagine the efforts it took, to make the reverse engineered forcedeth-driver as an example. This driver had to be made, just because the hardware-vendor didn't feel like giving full documentation for its hardware.
Note: The following information is outdated. Please see this discussion for a better way, and why not to use the way represented here.
It might be nice to make this article a bit interactive, since it would be more convincing to see the features Linux offers for yourself, than only reading it here. Therefore, I advise you to get the Linux 2.6.15 sources, open a terminal, become root (using sudo is also fine), and change to your kernel directory:
$cd /lib/modules/$(uname -r)/source
$sudo make xconfig
if you did $su.
If all is like it should, you are in the Linux configuration menu now, and we can start discussing the features around. By the way, if you don't want the graphical interface, exchange 'x' by 'menu', using 'make menuconfig' instead of 'make xconfig'.
There we go. The kernel hierarchy is on the left, the items are on the right, and if you click on an item, you can see a short help on the right below the items. Sadly, it starts with some not very interesting stuff, but hold on to see some stunning features. I won't talk about all features, but feel free to look around, especially to the things I don't mention, there are long hardware-support lists which are worth looking at. I will limit myself to some eye-catching features in this article.
- General Setup
Two things are worth mentioning here. The first is the kernel .config support. It means, the configuration is saved in the kernel itself. This is nice, since we can never lose our .config file: we can do
#zcat /proc/config.gz > /usr/src/linux/.config
and our config is back. This is especially interesting on LiveCDs, like the Gentoo 2006.0 LiveCD: When compiling our kernel, we can use the exact same configuration as the LiveCD kernel has.
Furthermore, the Linux kernel can be optimized for size, which means you can optimize it for old systems.
The Windows kernel doesn't offer us this stuff.
- Loadable module support
Simple to tell: The loadable module support offers us the possibility to compile drivers and start them without rebooting. I don't have to say much about Windows XP and rebooting, do I?
- Block layer
Here, we find an option to optimize for desktop use, or even database use.
- Processor types and features
Like most people probably know, we can optimize for a processor type here. We can also choose to make a low-latency kernel here, by enabling the preemptible kernel. This works nice for music and movies.
Also, we find a "Boot from EFI" option. EFI could be the successor of BIOS, and Microsoft already told, they don't want to support this option. If we have much memory and a 32 bit processor, we can also enable the support of mapping 64GB RAM here.
Then, here comes one of the most interesting features in a long time (in my opinion): The kexec system call. "Sounds nice, but what does it mean?" you might think. Well, it enables you to stop your current kernel from running, and start another one. In theory, you should be able to update your kernel without rebooting. Not only will you be able to start a Linux kernel, but you should also be able to start other kernels, like a BSD or an OpenSolaris kernel, though I wonder if that' s a good idea...
- Power Management Options
I can't really tell a lot about it, since I don't use this. It's mainly intended for laptops. However, one thing that stands out here, is the "CPU frequency scaling" feature, which enables changing the CPU frequency on the fly.
- Bus Options
Here, we find an interesting feature: PCI hotplug. If you have suitable hardware, it means you can remove and add PCI cards without rebooting.
- Device Drivers
We skip two sections, and find ourself in the biggest submenu of the main menu: the Device drivers. This submenu is mainly about making all our hardware work. And like you will discover, there really is a plethora of supported hardware here.
- Memory Technology Devices
Here, we can enable stuff for ROM memory in embedded devices, like Flash etc.
- Block devices
In this submenu is the Network Block Device support. This means, it is possible to export block devices, like harddisk partitions, through a network, and then mount the filesystems on it.
Furthermore, we can enable the cryptoloop support here; which enables us to make a file, map that file to an encrypted block device, and put a file system on that encrypted block device. After that, we can use that block device as usual, thanks to the device-mapper.
- Multi-device support (RAID and LVM)
We find something Windows doesn't have here*: software RAID, Logical Volume management and hardware encryption. Because of the device-mapper, which enables making 'virtual block devices' which can be seen as 'virtual hard disks', all is very flexible. I use EVMS as an interface for software RAID and LVM2 logical volume management.
A short example: On my two harddisks, I make two partititons: sda2 and sdb2. This two partitions together form a RAID partition, md0. On this RAID partiton, I make a LVM container, c1. On this container, I can create regions, which are like DOS-partitions. On this regions, I can make filesystems.
You may wonder why somebody wants to do all this. Mainly, this is because one can change the size of this virtual partitions - called regions - , add regions to the RAID partitions to increase its size, add regions to the LVM container, and because of all this, add harddisks, and use the new harddisk-space in the already made RAID, LVM and EVMS regions. Furthermore, we can make 'snapshots'. This means, if I have file a,b, and c on region X, and remove file b, file b will be written to the snapshot region. If I want to reverse region X to its original state, like putting back a backup, I can simply copy the snapshot back to region x.
The device mapper also enables us to encrypt whole harddisks. Because all encryption software is open source, we can check if our data is really encrypted. This is one of the problems with closed source encryption tools: nobody grants us the data is encrypted in a correct way, and we can't find that out for ourselves. Therefore, I'd say closed source encryption software is simply useless.
*Note: In our forums, reader
mastertsunami made me aware of Windows Dynamic Disk, which offers most of the EVMS features, though EVMS is more elaborate.
- Network device support
Not only does Linux have Gigabit ethernet support, it does also have 10Gbit ethernet support.
- Telephony support
That's right, the kernel provides VOIP support.
- Character devices
Some interesting feature for me has always been the TI Parallel link cable support. It allows to connect a TI graphical calculator, which I own, to your parallel port, using a home-made $4 parallel cable. However, this is deprecated since the calculators use USB cables now.
One thing that always made me curious, are the Watchdog cards. It seems, this are cards that 'watch' if your computer hangs, and if it does, restart you computer. Except for hardware watchdog cards, Linux also offers support for software watchdog 'cards'.
Also here is the Real Time Clock support, which enhances the timing, for example when using ALSA sound. This is important when using your computer for mixing music.
- Video for Linux
Here is the support for video input cards, and FM Radio cards. It seems Video4linux also supports quickcams. It is used, amongst other, in FreeVO, the free competitor of TIVO, and MythTV.
There's also support for Digital Video Broadcasting, an European standard, to turn your Linux PC into a personal video recorder, in combination with MythTV or FreeVO.
- Graphics support
Here we enable the most-wanted Linux feature: Support for frame buffer devices, and VESA VGA Graphic support. It gives you the best Linux-feature especially women seem to want (own experience): The bootup penguin!
I found it stunning, Windows XP without any service packs doesn't offer USB 2.0 support. Gladly, Linux does. If you are tired of your mouse, there are several touchscreen drivers here. There are also some interesting other gadgets, like the Xbox gamepad driver, USB LCD support and USB thermometer support.
- File Systems
- (Network) File systems
Windows XP only offers NTFS and FAT support, and SMB/CIFS (extended SMB) for networking file-systems. That's not much, compared to Linux.
Linux provides filesystem support for the three mentioned filesystems, and, amongst others, for ext2, ext3 (ext2 + journailing), Namesys' ReiserFS (good performance!), IBM's JFS, Sillicon Graphics' XFS, BSD's UFS, iso9660 CDROM, UDF CDROM and Apple's HFS file systems. Then there is support for the more exotic filesystems, like Amiga FFS, BeOS' BeFS, SquashFS (used by LiveCD's) and OS2 HPFS.
But that's not all, there's also support for virtual filesystems (pseudo-filesystems), like the deprecated devfs support, most notably /proc support, and /sysfs support.
Last, but not least, there are the network file systems. We can turn on NFS, CIFS, a part of Kerberos, and even Plan 9 resource sharing.
Something that has to do less with filesystems, but is very interesting, is the automounter. It's something Windows users take for granted, and maybe all users should take it for granted.
Anyway, it makes sure that, whenever we plugin an USB stick, load an audio CD, or notice a network filesystem, it is mounted on the right place. It has the nice feature, CD's etcetera are unmounted after an amount of 'idle' time. This stops the CD from spinning if it is unused for some time.
Together with 'udev', this makes a flexible system. Udev, for example, is able, when a CD is pulled in, to get its title via CDDB over the internet, and make a device with the name of the CD, /dev/<<cdname>>.
Ok, that's nice, but far more important, is the feature udev offers to distinguish between USB sticks. I have two of them, one Apacer MP3 player and one PQI data-only usb-stick. If you pull them in a Windows box, the number of harddisks, the number of card readers and the configuration of virtual CDROMs (Deamon-tools) will determine the letter that is assigned to the USB-stick.
Worse, if I first plug in the PQI and after that the Apacer, the PQI will get (for example) letter H and the Apacer will get I. But if I first plug in the Apacer and then the PQI, the Apacer will get the letter H and the PQI the letter I. If I were to use a script to copy mp3's to my MP3 player (I do), this would all go wrong because off this awkward drive-letter situations.
Fortunately, udev offers us the possibility to identify USB-sticks on the basis of information from /sysfs, including ID's and possible the brandname and other more unique characteristics. In this way, it is possible, to always give my MP3 player the device-name /dev/mp3, and my PQI stick the name /dev/usb. Now, what the automounter is able to do, is mount my MP3 device to /home/user/mp3 and my PQI stick to /home/user/usb. This way, I can write scripts. udev and the automounter even enable me to start scrips after devices are plugged in or out of the computer. That way, I can decide a U2 audio-CD should always start playing immediately, and all Windows CD's are immediately ejected (don't worry, just an example!).
- Security options
It's always wise to enable the different security models here.
Most people think: "Root is always root, and can screw up everything!" Yeah right, if you are sure of that, review the BSD secure levels here. They enable to define several 'root' levels, and if you are in the most 'insecure' root level, root can't screw up that much. To change to a level of more privileges for the privileged user, you have to give an extra password (on top of the normal password) first. An interesting way of making your computer more secure. Furthermore, we can enable SELinux here. Also, here's the 'Root Plug' option, which for example enables us to disable starting new programs as root if a certain USB plug isn't plugged-in.
If you are really interested in security, get an hardened kernel, for example the Gentoo hardened kernel. While configuring one of those, you will find a lot of extra options here, like PaX, which, most of the time, prevents buffer overflows from leading to exploits.
- Cryptographic functions
Secret stuff goes here. Well, secret, the ciphers and digests are open source, so anybody could check if all is implemented in a right manner. Apart from the wide-known SHA/MD5 digests and the DES ciphers, there is plenty more here. I always use the AES cipher. It is approved by the US government to use for classified data, and invented by Belgians (for the paranoid Europeans). Here's also support for the new VIA processors with hardware en- and decryption acceleration.
So, that's what Linux currently has to offer. If that's still not fancy enough for you, maybe you should try the Linux-mm-2.6.16_rc6 kernel. At this moment it's bleeding edge, but in two months, people will probably be laughing about it, because the Linux kernel evolves rather quick the last few years. It doesn't always follow the competing kernels, but also comes with features unique to Linux. And that's a good thing to see.