Epoch-alypse now: BBC iPlayer flaunts 2038 cutoff date, gives infrastructure game away
Nobody expects the Linux malposition, do they, Michael Palin?
Why do we mention it? Well, thanks to keen-eyed Reg reader Calum Morrison, we've spotted a bit of the former, and a hint of what lies beneath the Beeb's digital presence, when he sent in a snapshot that implies Old Auntie might be using a 32-bit Linux in iPlayer, and something with a kernel older than Linux 5.10, too.
That 2020 kernel release was the first able to serve as a base for a 32-bit system designed to run beyond 03:14:07 UTC on 19 January 2038.
Way back when, the iPlayer service had a troubled start – initially requiring Windows XP, Windows Media Player 10+ and Internet Explorer to run – and chunks of it ended up being replaced with off-the-shelf tech in order to work for those annoying, smug Mac and Linux users.
Spot the expiry date. That date is as conspicuous to Unix beardies as 2000 was to DOS merchants. We reckon it's not just when Mr Palin's programme expires, but rather a whispered plea from the 32-bit Linux box held hostage somewhere behind it.
Y2K was caused by programmers saving space by storing years as two digits – entirely justified just a few decades ago when saving two characters was an economy worth a measurable amount of money. The 2038 issue runs deeper, and it's not just a Linux problem.
- Linux clockpocalypse in 2038 is looming and there's no 'serious plan'
- Need 32-bit Linux to run past 2038? When version 5.6 of the kernel pops, you're in for a treat
- Linux 5.10 to make Year 2038 problem the Year 2486 problem
- Ten... PC games you may have missed
Like Y2K, it's easy to explain and fairly easy to fix: traditionally, UNIX stored the time as the number of seconds since January 1, 1970 – but they held it in a signed 32-bit value. That means that at seven seconds after pi o'clock in the morning of January 18th, 2038 (UTC), when it will be 2,147,483,647 (2³¹) seconds after the "epoch", the next time will be -2³¹: 20:45:52 in the evening of December 13th, 1901.
It has already been fixed in Linux and any other recent UNIX-ish OSes. The easy way is to move to a 64-bit value, giving a range of 292 billion years either way. That'll do, pig.
The fun bit is finding all the places it might occur, like this fun (and old and long-fixed) MongoDB bug. MongoDB stores the date correctly, Python stores the date correctly, but dates were passed from one to the other using a 32-bit value.
Also see this Twitter thread, where it's causing grief in pension funds. This one will run and run. But hey, there is good money to be made fixing it... for the next 16 years. Give or take a week.
We asked the BBC about iPlayer bug. It was not able to give us an explanation at the time of publication, but we will update this story if it does. If you can shed light on the issue, give us a shout here. ®