The following informations are adapted from the page of Rik van Riel. They concern 2.0.x as well as 2.2.x kernels.
First of all, the IA32 Intel architecture is limited by construction in its memory management to 4 GB. Space which should be divided into virtual memory and physical memory. Which means that if you choose to recognize more RAM, the maximum size for a program decreases.
But Linux can't manage more than 1 GB by default. To go above that, in fact up to 2 GB today, because Linux can't manage more memory for the moment, you need to modify 2 files provided with kernel sources and recompile it. Those 2 sources are /usr/src/linux/include/asm-i386/page.h and /usr/src/linux/arch/i386/vmlinux.lds.
>From 2.0.37 and 2.2.12 kernels on, the patch was integrated in the kernel and may be activated when doing a make config.
The maximum Ram managed in the i386 version was ported to 64 GB after 2.3.23.
Up to the version 2.8x of the util-linux package, the mkswap command could create swap partitions only up to 128 MB maximum. You then had to create as much partitions as necessary. Till the 2.9 version, included in standard in RedHat 6.0 and following distributions, it's possible to create directly swap partitions up to 2 GB and to 8 partitions.
Multi-processing is supported by Linux operationnaly till the 2.0 version of the kernel. For a 2.0.x kernel, you have to recompile it and set up the SMP variable in the Makefile to 1. For a 2.2.x or 2.4.x kernel, you have to set it up during the make config. For more details, please consult the SMP-HOWTO.
Generally, Linux is Y2K compatible. For more informations please consult the FAQ.