The Unix kernel acts as a mediator for your programs and your hardware. First, it does (or arranges for) the memory management for all of the running programs (processes), and makes sure that they all get a fair (or unfair, if you please) share of the processor's cycles. In addition, it provides a nice, fairly portable interface for programs to talk to your hardware.
There is certainly more to the kernel's operation than this, but these basic functions are the most important to know.
Newer kernels generally offer the ability to talk to more types of hardware (that is, they have more device drivers), they can have better process management, they can run faster than the older versions, they could be more stable than the older versions, and they fix silly bugs in the older versions. Most people upgrade kernels because they want the device drivers and the bug fixes.
See the Hardware-HOWTO. Alternatively, you can look at the
config.in' file in the linux source, or just find out
when you try `
This shows you all hardware supported by the
standard kernel distribution, but not everything that linux supports; many
common device drivers (such as the PCMCIA drivers and some tape drivers) are
loadable modules maintained and distributed separately.
Linus recommends a version of gcc in the
README file included with
the linux source. If you don't have this version, the documentation in the
recommended version of gcc should tell you if you need to upgrade your libc.
This is not a difficult procedure, but it is important to follow the
These are pieces of kernel code which are not linked (included) directly in the kernel. One compiles them separately, and can insert and remove them into the running kernel at almost any time. Due to its flexibility, this is now the preferred way to code certain kernel features. Many popular device drivers, such as the PCMCIA drivers and the QIC-80/40 tape driver, are loadable modules.
It depends on your particular system configuration. First, the compressed linux source is nearly 6 megabytes large at version 2.0.10. Most sites keep this even after unpacking. Uncompressed, it takes up 24 MB. But that's not the end -- you need more to actually compile the thing. This depends on how much you configure into your kernel. For example, on one particular machine, I have networking, the 3Com 3C509 driver, and three filesystems configured, using close to 30 MB. Adding the compressed linux source, you need about 36 MB for this particular configuration. On another system, without network device support (but still with networking support), and sound card support, it consumes even more. Also, a newer kernel is certain to have a larger source tree than an older one, so, in general, if you have a lot of hardware, make sure that you have a big enough hard disk in that mess (and at today's prices, I cannot help but to recommend getting another disk space as an answer to your storage problems).
For most people, the answer is ``fairly long.'' The speed of your system and the amount of memory you have ultimately determines the time, but there is a small bit to do with the amount of stuff you configure into the kernel. On a 486DX4/100 with 16 MB of RAM, on a v1.2 kernel with five filesystems, networking support, and sound card drivers, it takes around 20 minutes. On a 386DX/40 (8 MB RAM) with a similar configuration, compilation lasts nearly 1.5 hours. It is a generally good recommendation to make a little coffee, watch some TV, knit, or whatever you do for fun while your machine compiles the kernel. You can have someone else with a faster machine compile it for you if you really have a slow machine.