TL;DR
Many systems store time as a signed 32-bit time_t
- the number of seconds since the UNIX epoch (00:00:00 UTC on 1 Jan 1970). The largest value a signed 32-bit integer can hold is 2,147,483,647.
When the clock reaches that value, the next second overflows to -2,147,483,648, which corresponds to December 13, 1901 instead of 2038. That sudden jump can cause crashes, wrong dates, or data corruption.