14.2. The hardware and software clocks
A personal computer has a battery driven hardware clock.
The battery ensures that the clock will work even if the rest of
the computer is without electricity. The hardware clock can be
set from the BIOS setup screen or from whatever operating system
is running.
The Linux kernel keeps track of time independently from
the hardware clock. During the boot, Linux sets its own clock
to the same time as the hardware clock. After this, both clocks
run independently. Linux maintains its own clock because looking
at the hardware is slow and complicated.
The kernel clock always shows universal time. This way,
the kernel does not need to know about time zones at all. The
simplicity results in higher reliability and makes it easier
to update the time zone information. Each process handles time
zone conversions itself (using standard tools that are part of
the time zone package).
The hardware clock can be in local time or in universal
time. It is usually better to have it in universal time,
because then you don't need to change the hardware clock when
daylight savings time begins or ends (UTC does not have DST).
Unfortunately, some PC operating systems, including MS-DOS,
Windows, and OS/2, assume the hardware clock shows local time.
Linux can handle either, but if the hardware clock shows local
time, then it must be modified when daylight savings time begins
or ends (otherwise it wouldn't show local time).