Epoch-alypse now: BBC iPlayer flaunts 2038 cutoff date, gives infrastructure game away
- Reference: 1642419250
- News link: https://www.theregister.co.uk/2022/01/17/bbc_iplayer_expires_2038/
- Source link:
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 [3]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.
[4]
The cutoff date for some iPlayer programs is 18th January 2038
Way back when, the iPlayer service [5]had a troubled start – initially requiring Windows XP, Windows Media Player 10+ and Internet Explorer to run – and chunks of it ended up being [6]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.
[7]
That fateful date pops up in lots of places: for [8]fans of DOTA2 , it's when an allegedly [9]permanent ban [10]expires . And if [11]Atlassian JIRA users haven't suffered enough, a (now fixed) [12]bug got to them, too.
[13]
[14]
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 [15]a Linux problem .
[16]Linux clockpocalypse in 2038 is looming and there's no 'serious plan'
[17]Need 32-bit Linux to run past 2038? When version 5.6 of the kernel pops, you're in for a treat
[18]Linux 5.10 to make Year 2038 problem the Year 2486 problem
[19]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 [20]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.
[21]
Also see this Twitter thread, where it's causing [22]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 [23]here . ®
Get our [24]Tech Resources
[1] https://www.theregister.com/2020/01/30/linux_5_6_2038/
[2] https://www.theregister.com/2020/02/04/y2k_microsoft_access/
[3] https://www.theregister.com/2020/10/19/linux_5_10_y2k38_fixes/
[4] https://regmedia.co.uk/2022/01/12/iplayer_goes_titsup_on_19_january_2038.jpg
[5] https://www.theregister.com/2007/11/22/beeb_week_iplayer_comment/?page=1
[6] https://www.theregister.com/2007/10/16/iplayer_flash_adobe_cloud/
[7] https://pubads.g.doubleclick.net/gampad/jump?co=1&iu=/6978/reg_offbeat/bootnotes&sz=300x50%7C300x100%7C300x250%7C300x251%7C300x252%7C300x600%7C300x601&tile=2&c=2YeWgtAuI@QOhcZmibeufNQAAAMM&t=ct%3Dns%26unitnum%3D2%26raptor%3Dcondor%26pos%3Dtop%26test%3D0
[8] https://www.theregister.com/2012/11/21/product_round_up_ten_pc_games_you_may_have_missed/?page=2
[9] https://steamcommunity.com/app/570/discussions/0/5063694237338650998/
[10] https://www.reddit.com/r/DotA2/comments/qyfw8n/see_you_guys_in_2038/
[11] https://www.theregister.com/2020/11/09/atlassian_jira_management/
[12] https://community.atlassian.com/t5/Jira-questions/Can-t-set-dates-far-in-future-after-2038-in-Jira/qaq-p/1453853
[13] https://pubads.g.doubleclick.net/gampad/jump?co=1&iu=/6978/reg_offbeat/bootnotes&sz=300x50%7C300x100%7C300x250%7C300x251%7C300x252%7C300x600%7C300x601&tile=4&c=44YeWgtAuI@QOhcZmibeufNQAAAMM&t=ct%3Dns%26unitnum%3D4%26raptor%3Dfalcon%26pos%3Dmid%26test%3D0
[14] https://pubads.g.doubleclick.net/gampad/jump?co=1&iu=/6978/reg_offbeat/bootnotes&sz=300x50%7C300x100%7C300x250%7C300x251%7C300x252%7C300x600%7C300x601&tile=3&c=33YeWgtAuI@QOhcZmibeufNQAAAMM&t=ct%3Dns%26unitnum%3D3%26raptor%3Deagle%26pos%3Dmid%26test%3D0
[15] https://www.theregister.com/2015/02/20/linux_year_2038_problem/
[16] https://www.theregister.com/2015/02/20/linux_year_2038_problem/
[17] https://www.theregister.com/2020/01/30/linux_5_6_2038/
[18] https://www.theregister.com/2020/10/19/linux_5_10_y2k38_fixes/
[19] https://www.theregister.com/2012/11/21/product_round_up_ten_pc_games_you_may_have_missed/
[20] https://jira.mongodb.org/browse/PYTHON-122
[21] https://pubads.g.doubleclick.net/gampad/jump?co=1&iu=/6978/reg_offbeat/bootnotes&sz=300x50%7C300x100%7C300x250%7C300x251%7C300x252%7C300x600%7C300x601&tile=4&c=44YeWgtAuI@QOhcZmibeufNQAAAMM&t=ct%3Dns%26unitnum%3D4%26raptor%3Dfalcon%26pos%3Dmid%26test%3D0
[22] https://twitter.com/jxxf/status/1219009308438024200
[23] mailto:news@theregister.com
[24] https://whitepapers.theregister.com/
I'm sure "normal people" would get a bit confused by that... It's nothing that an if statement couldn't fix though...
I think they've got something like that - I'm sure I've seen programmes with "available for more than a year" which I took as a message that a developer had put in to cover a case where there is no explicit expiry date
My guess further down the thread is that they were setting an unsigned int to -1. On 32-bit that would set it to 2038.
And because (unint32's -1 != unint64's -1), it wouldn't show the "never expires" text.
The available until date is set to 18th of January 2038. So someone, for whatever reason, deliberately set it to one day earlier than 0x7FFFFFFF, either at 00:00:00, 03:14:07, or 23:59:59 (pick your poison).
Maybe the new guy wasn't aware of the value to get it to say "for more than a year", which might be -1.
I wonder if NULL actually does mean never expires, and right now one BBC BOFH is showing this article to another BBC BOFH and demanding they cough up the £20? I mean - a bet's a bet, after all.
A fix for this
The Tories are on this and come 2038 nobody will have to worry about accessing anything biased on the BBC.
Re: A fix for this
Or more possibly, anything what so ever on the BBC......
Re: A fix for this
@TheProf
That does depend on the tores getting elected next time but the BBC seems more than a little worried that without the TV tax they wont be around. Not surprised they are worried based on their content.
I'm glad you eventually get round to pointing out it's not a uniquely unix problem. Most (all?) implementations of C uses the "POSIX epoch" of Jan 1st 1970 so any C compiler with a 32 bit signed int for time_t is in the shit. Although I've just checked the spec and neither the width nor the epoch are mandated in modern C standard. (I've not looked backwards to see if it ever was.)
The real problem is not application but filesystems and file formats which have used a 32 bit signed time_t in the format. That's more of a unix problem.
Anyway, it looks like this will pay for my retirement!
so long
Officially you should use the typedef name "time_t", but historically the calls and documents used "long" in old Unix, and many programmers have lazily continued using it for time without the typedef name. On 32-bit Linux and most other 32-bit systems, "long" is 32-bits. On 64-bit Linux, "long" grew to 64-bits, but 64-bit Windows still keeps it at 32-bits for backward-compatibility. So a Windows program that at some point uses bare "long" for time will have trouble, but one on Linux will not!
VMS got it right
VMS (since 1977) has stored time as 100ns clock ticks since 17 November 1858 (the start of [1]the Reduced Julian Day (an astronomical timescale, the "reduced" variant was introduced by the Smithsonian Astrophysical Observatory in 1957 to record the orbit of Sputnik). It will run out of bits in the year 31,086.
[1] https://en.wikipedia.org/wiki/Julian_day
Re: VMS got it right
...and about 29,000 years from now, someone will have discovered an ancient calculation machine and will have figured out how it worked. And they will see that its clock stops in the year 31,086. And some of them will start a cult that believes the end is near for an ancient civilisation allowed their calender to run until then...
Re: VMS got it right
What’s the clock used on VGER?
Re: VMS got it right
VMS got most things right.
There is, though, a well-known bug filed against VMS for a related issue. The standard message display only permits 4-digit years, so even if the clock is fine until 31,086 there will be a display error when it ticks over on Dec 31st 9999. Last time I saw that bug in the DEC tracking system it was in an 'accepted' state, with a note that it will be fixed "in a future major architecture". Sadly unlikely now...
>with a snapshot that implies Old Auntie might be using a 32-bit Linux in iPlayer
This would be among the least likely explanations, given this is a value encoded in a database somewhere. Most likely on a technical basis is someone is using MAXINT for "never expires", which is always going to land at that epoch however big your epoch may be allowed to grow.
Or perhaps someone in the iPlayer team has a mischievous streak and set the displayed maximum there deliberately as a nod to their fellow technologists.
Given the iPlayer volume slider goes to 11, I know which of the two I'd prefer to be true.
Ah,
My guess based on your post, they previously used MAX_INT. They updated to 64-bit and 2038 no longer matches MAX_INT.
Close. The point is that MAX_INT is almost always going to be 2,147,483,647, regardless of whether you're using C/C++ on a 32 or 64bit linux, writing some enterprise glue code in Java or storing that value into an Integer field in MySQL.
2,147,483,647 always lands you on that magic moment in 2038, regardless of whether your epoch is represented as a 32 or 64 bit number. The real question is what your system does with epoch 2,147,483,648, not what it does with the predecessor.
Well, if not MAX_INT, then -1 on an unsigned int.
If that int became 64-bit it would no longer match the date in 2038.
MAX_INT is going to be the maximum value for the integer size of the machine, whether than be 32, 64, 128, or some bizarre number of bits, not the maximum value of a 32-bit integer ala older boxes or Java.
Yes. I learnt to program on a machine with MAX_INT = 8388607(*)
(*) Well, it would have been if there had been a C compiler for it. Dennis Ritchie had only just started inventing C back then.
Baa-ram-ewe!
Not compliant these days of course, needs a number
Erm... "Palin's Round The World In 80 Days" on BBC4, or "Round The World In 80 Days" with David Tennant on BBC1?
(not sure why they are broadcasting both series at the same time!)
Cisco have got round the y2038 problem by redefining 'day zero' for the RTC... some default to 1/1/2010, others to 1/1/2013, when the NVRAM battery goes flat (depending on IOS version)
Or "Around the world in 80 gardens", which is also on. Almost sat down to watch that with the kids by mistake the other day, which I imagine would have gone down like a bucket of cold sick.
(not sure why they are broadcasting both series at the same time!)
Probably someone realised that the plot & characters of the Tennant-inhabited series was entirely unlike the actual book -- and so that someone then thought the Palin one might serve as a more accurate representation :-)
Indeed, I re-read the Verne original very recently -- in fact, just after thinking "I don't remember any of that" during Tennant Ep.1).
Arguably (IMO), a fair fraction of the book is not necessarily well matched to the demands of modern TV, so a significant degree of "updating" was probably to be expected. It is a shame, though, that so little of the original was allowed to survive, and even that is mutilated. Mind you, perhaps Eps 7&8, which I haven't seen yet, are less off-piste?
What about 2028?
Have Unisys now totally expunged this issue from their OS1100/2200 systems?
Do I feel old?
Hell yes I feel old. I helped erect Stonehenge Version 0.75Alpha as a test run before we erected the full V1.0. Due to budget overruns & manglement cockups, I'm still waiting for the damned thing to finish POST.
Wake me when it beeps...
Re: Do I feel old?
Didn't it get reset during the last total eclipse?
Strange that they wouldn't use NULL to mean never expires, rather than setting a timestamp arbitrarily far into the future.