UNIX and UNIX-like systems like Linux count time since the "Epoch" - Jan 1st, 1970 00:00 UTC. The normal way to do this involves counting seconds since that point, and the standard time_t variable type for this is a signed 32-bit integer. This works well for many purposes, except one: the end of time is coming!
$ date --date=@$((2**31-1)) -u
Tue 19 Jan 03:14:07 UTC 2038
Lots and lots of systems are going to be confused when time_t wraps. If you thought Y2K was a problem, Y2038 is likely to be much worse. When we were worrying about Y2K, most of the systems involved were big obvious computers and we could expect to identify them easily and fix their software.
When we get to January 2038, a lot of the systems that are likely to cause trouble are not going to obviously be computers. Imagine: a simple micro-controller in a washing machine, or a media player in a car, or a sensor embedded in an aircraft engine. Depending on how these were designed, a sudden failure of timekeeping could have disastrous effects.
The systems that some people are developing and deploying now will still be in use in 20 years, so we need to get this fixed ASAP.
See my DebConf 17 BoF session about it (PDF / Video).