Slashdot Mirror


You've Got 25 Years Until UNIX Time Overflows

CowboyRobot writes "In 25 years, an odd thing will happen to some of the no doubt very large number of computing devices in our world: an old, well-known and well-understood bug will cause their calculation of time to fail. The problem springs from the use of a 32-bit signed integer to store a time value, as a number of seconds since 00:00:00 UTC on Thursday, 1 January 1970, a practice begun in early UNIX systems with the standard C library data structure time_t. On January 19, 2038, at 03:14:08 UTC that integer will overflow. It's not difficult to come up with cases where the problem could be real today. Imagine a mortgage amortization program projecting payments out into the future for a 30-year mortgage. Or imagine those phony programs politicians use to project government expenditures, or demographic software, and so on. It's too early for panic, but those of us in the early parts of their careers will be the ones who have to deal with the problem."

42 of 492 comments (clear)

  1. Could we be a little less biased? by damn_registrars · · Score: 5, Insightful

    those phony programs politicians use to project government expenditures

    The programs are real, even if the math may be phony.

    --
    Damn_registrars has no butt-hole. Damn_registrars has no use for a butt-hole.
    1. Re:Could we be a little less biased? by Anonymous Coward · · Score: 5, Insightful

      History shows us that it's not biased in the slightest to assume that politicians will lie, cheat, and steal their way to riches. Giving them the benefit of the doubt is like Charlie Brown giving that field goal one more shot because maybe, just maybe, Lucy won't pull the ball this time.

    2. Re:Could we be a little less biased? by tlhIngan · · Score: 5, Informative

      Actually, banks, and such already ran into Y2K problems in the 70s when long term loans starting overflowing them. For them the Y2K scenario had many years to be fixed slowly (mostly a continuous updating thing - as things broke, they fixed it) so there was no big rush for them as they were experienced in such issues.

      If there are any 2038 issues, the banks have already been ahead of the curve and seeing them in 2008. Hell, a good conspiracy theory....

      time_t has also been 64 bit for a number of years now (you don't need a 64-bit system to deal with 64-bit numbers - it's just dealing with them is a lot slower as the compiler emits library calls to perform the arithmetic). So it's not a real problem even on embedded systems (ARM only added 64-bit support in the ARMv8 instruction set - and only in the high-end A (applications) profile processors - the lower end R (real-time) and M (microcontroller) profiles are still ARMv7 only).

      However, even those compiled with 64-bit time_t aren't necessarily safe - you'd probably find most of them assume it's still a 32-bit quantity and end up storing it as such - ignoring the compiler warnings or casting to get rid of them. So even programs of today with 64-bit time_t's won't necessarily make it past 2038 either.

      And if stuff like that is done, recompiling does diddly - the bug will still strike despite a 64-bit everything. Hell, someone may have decided during the conversio nto increase the timestamp size from 32 to 64 bit, but didn't realize someone squashed it down to 32-bit upstream.

    3. Re:Could we be a little less biased? by Anonymous Coward · · Score: 4, Funny

      ...And just FYI the whole football thing was an analogy for sex....

      And anyway, Peter Griffin took care of that football thing once and for all.

    4. Re:Could we be a little less biased? by i_ate_god · · Score: 3, Insightful

      You would think that if all politicians cared about was their own greed, they'd be far better off than they are now no?

      --
      I'm god, but it's a bit of a drag really...
    5. Re:Could we be a little less biased? by interval1066 · · Score: 3, Insightful

      you don't need a 64-bit system to deal with 64-bit numbers - it's just dealing with them is a lot slower as the compiler emits library calls to perform the arithmetic...

      A lot slower? Nah. Negligble, at best. It'll be fine.

      --
      Python: 'And then suddenly you have a language which says "we're all stuck with whatever the whiniest coder wants".'
    6. Re:Could we be a little less biased? by jnork · · Score: 4, Insightful

      If you're doing so many 64-bit calculations that it's seriously impacting the performance of your 32-bit machine, then either you don't care or you need to upgrade to a 64-bit machine.

      I'm sure you can come up with a scenario where that's not possible, but I see no reason to solve that problem until and unless it comes up. Meantime, I do all my work on 8-bit processors and laugh at your 64-bit woes (somewhat hysterically).

      --
      Cleverly disguised as a responsible adult.
    7. Re:Could we be a little less biased? by dkleinsc · · Score: 4, Insightful

      History shows us that it's not biased in the slightest to assume that politicians will lie, cheat, and steal their way to riches.

      What is biased is to assume that the non-elected civil servants who actually do the math will not attempt to do their jobs to the best of their ability. For example, the staff at the Congressional Budget Office who actually do the math do not directly report to any politician. Similarly, the civil service laws exist specifically to prevent someone from, say, being fired by NOAA for coming up with the "wrong" climate data, or fired from the SSA for coming up with the "wrong" Social Security budget projections.

      So you're right to assume that politicians lie, cheat, and steal. But that doesn't mean that a GS-11 actuary working in the bowels of a government agency is lying in his reports.

      --
      I am officially gone from /. Long live http://www.soylentnews.com/
    8. Re:Could we be a little less biased? by Anonymous Coward · · Score: 5, Funny

      For them the Y2K scenario had many years to be fixed slowly (mostly a continuous updating thing - as things broke, they fixed it) so there was no big rush for them

      There's a motorcycle shop in my town where all the receipts are dated "1913". And printed with tractor feed dot-matrix.

      So not everybody's in a big hurry.

    9. Re:Could we be a little less biased? by Darinbob · · Score: 4, Interesting

      I've seen some relatively new systems using a 32-bit time, even some using the same API as Unix. It's relatively common in embedded systems. Many of them just go ahead and use signed 32-bit as there's no need to have internal times be compatible with external systems.

      Ultimately I think the problem arises because of overusing time_t. Originally this was something you used to attach a time to a file in a file system, or a time in a log entry, etc. A time system on a file system with a limited range is not a problem. That media is not going to be active 40 years later. The file may last longer but in such cases presumably it's copied to new media with a different method of storing times. So not a problem for file systems to do this. The problem however is that this time system was expanded to be used for more general purpose times. And over time it's practically a de-facto standard to stick with time_t and its 1/1/1970 base date. People don't think about converting from system time into an external time when exporting data, they just assume time_t is valid everywhere. Programmers just use whatever time system they find in the system's libraries without worrying about whether it is an appropriate use or not.

      Many application areas already have to avoid using time_t anyway and are used to converting between one time system to another. Astronomy, geneology, medical records, historical data, etc.

    10. Re:Could we be a little less biased? by InterGuru · · Score: 5, Insightful

      We denigrate politicians because they lie, but candidates who tell the truth do not get elected.

  2. Not NetBSD by Nimey · · Score: 5, Informative

    NetBSD has switched to a 64-bit time_t.

    --
    Hail Eris, full of mischief...

    E pluribus sanguinem
    1. Re:Not NetBSD by Beezlebub33 · · Score: 4, Insightful

      64-bit is taking over already everywhere. In 10-15 years, you will have a hard time finding a 32-bit computer. (Actually, you might have a hard time finding a 'computer' at some point but that's a whole other issue). With the change to 64 bits, more and more OS's will operate on 64-bit time, and this will not be an issue.

      --
      The more people I meet, the better I like my dog.
    2. Re:Not NetBSD by mrjatsun · · Score: 5, Informative

      > Are you trying to say that "64-bit computers" don't have any support for 32 bit integers?

      The issue is if time_t is a 32-bit int or a 64-bit int. Not if a bit-64 CPU supports 32-bit integers.
      time_t is generally defined as a long across OS implementations.

      In the 32-bit ABI (Application Binary Interface) for most (all?) OSes, a long is a 32-bit value.
      In the 64-bit ABI, a long is 64-bits, so the 2038 time issue does not exist for 64-bit apps.

      So if you are running a 64-bit app, you don't have a problem in that app. One solution is to
      not support 32-bit apps anymore. i.e. you don't support the 32-bit ABI in your 64-bit kernel.
      You can do this easily in linux today (e.g. gentoo, 64-bit only support).

      Another solution is to break 32-bit compatibility (or to define a new 32-bit "ABI") which
      changes the definition of time_t (and some other system types) to be a [u]int64 instead
      of a long.

      So, *if* the parent was suggesting don't support 32-bit apps, then they were right ;-)

    3. Re:Not NetBSD by petermgreen · · Score: 4, Informative

      The problem is not so much the OS, as you say most systems will be running 64-bit operating systems and even 32-bit operating systems will likely find a soloution (like was done for large file support). The problem is the applications which have the assumption of 32-bit unix time built in.

      You might say "just recompile for 64-bit" but that assumes that

      1: you have the source
      2: the source is not full of assumptions that make rebuilding for 64-bit impractical
      3: the source actually stores the time in variables of type time_t or long and not variables of type int or type int32_t.
      4: the data files the program stores on-disk do not include timestamps in unix format in fixed size fields.

      For what proportion of applications do you belive all four of those assmptions will hold.

      --
      note: i'm known as plugwash most places but i screwd up registering that here somehow in the past and now can't register
    4. Re:Not NetBSD by dingen · · Score: 5, Insightful

      The problem is not so much in computers still being 32 bits in 25 years time, but 32 bit computers right now doing calculations involving dates 25 years in the future.

      --
      Pretty good is actually pretty bad.
    5. Re:Not NetBSD by Zordak · · Score: 5, Funny

      In the 64-bit ABI, a long is 64-bits, so the 2038 time issue does not exist for 64-bit apps.

      Perhaps not, but that Y292e9 bug is going to cause some serious headaches for the Pang-Galactic Empire.

      --

      Today's Sesame Street was brought to you by the number e.
    6. Re:Not NetBSD by lordholm · · Score: 5, Interesting

      The main problem is actually not that the time_t in the OS is 32 or 64, hardware and operating systems are upgraded. And, very few systems shipping today will have 32 bit time_t. This will not be the main problem (even if it will be a problem with some systems, for example, some nuclear reactors are managed by custom unices that are not maintained anymore and they don't dare to touch those systems, but this is solvable in the few cases where this is a problem)!

      The BIG problem for more mainstream software is all the software using binary file formats, such software will completely break down, if time is stored as a 32 bit UNIX time stamp. There may also be problem for text based file formats if for example the reading code uses %d with sscanf to read in the timestamp, but if these are compiled with a modern compiler, the compiler will warn that %d is being used with a 64 bit time_t integer. It is thus solvable, but will require recompiling the software and some minor patching. Binary file-formats will however be a pain in the ass, so bad that software systems will probably have to be certified as Y2038-safe.

      Do not underestimate the size of this undertaking.

      --
      "Civis Europaeus sum!"
    7. Re:Not NetBSD by Z00L00K · · Score: 3, Insightful

      If we even are alive by then.

      --
      If builders built buildings the way programmers wrote programs, then the first woodpecker would destroy civilization.
    8. Re:Not NetBSD by Sectoid_Dev · · Score: 5, Interesting

      Except that it wont happen for 25 years... FEAR, UNCERTAINTY, CHANGE... RUN!!!!! THE SKY IS FALLING!! (in 25 years)...

      With the acceleration of development that has been occurring over even the last 10 years, I hardly doubt there will be much to worry about 25 years from now.

      You sound like a manager.
      Leave this on the back burner for the next 24.5 years and then drop everything because then the sky is falling.

      I'm glad this issue got mentioned because frankly I don't ever think about the unix epoch time overflowing. It's a good thing to give programmers a nudge for their current(and future) development
        "Hey use 64 bit time values"
          "Oh yeah, sure,"
          25 years later, no problem.

  3. That's OK by Big+Hairy+Ian · · Score: 5, Funny

    The IOS reminder service will fail for the first week in January atleast once before then :)

    --

    Build a Man a Fire, and He'll Be Warm for a Day. Set a Man on Fire, and He'll Be Warm for the Rest of His Life.

  4. I feel like the security guard in Austin Powers... by killfixx · · Score: 5, Funny

    Standing before the steam roller....

    "Stoooooooooooooooooooooooooooooooooooooooooooop".... .... "Stooooooooooooooooooooooooooooooooop"....

    I understand, we need time to correct the issue, but...c'mon?!

    Slow news day?

    --
    "Helping to keep you two steps ahead of the Thought Police!"
  5. Unsigned! by aglider · · Score: 3, Interesting

    32bit unsigned, not signed! What'd be the negative timestamps for? Ages before 1970?

    --
    Sent as ripples into the electromagnetic field. No single photon has been harmed in the process.
  6. Mortgage Calculations by bill_mcgonigle · · Score: 5, Insightful

    Was this a USENET post from '94? Mortgage systems using 32-bit time_t (if there ever were any) failed 5 years ago for 30-year mortgages. We did not hear an earth-shattering kaboom.

    --
    My God, it's Full of Source!
    OUTSIDE_IP=$(dig +short my.ip @outsideip.net)
    1. Re:Mortgage Calculations by Anonymous Coward · · Score: 5, Funny

      Actually we did, but it had nothing to do with integer overflow.

    2. Re:Mortgage Calculations by Thud457 · · Score: 3, Funny

      Mortgage systems using 32-bit time_t (if there ever were any) failed 5 years ago for 30-year mortgages.

      Oh, that was what that was. Oh crap.
      And here all along I've been blaming greedy mortgage brokers for suckering people into mortgages they couldn't afford and a insanely inflated real estate market.

      --

      the preceding comment is my own and in no way reflects the opinion of the Joint Chiefs of Staff

  7. Re:64-bit computers DO NOT solve this problem by JcMorin · · Score: 4, Insightful

    Having a 64-bit will not solve this at all. The problem lie in the software, if a 32-bit time structure as been used, no matter on what computer it's running it will be emulated as a 32-bit application with only 32-bit of memory for time allocation. It will bust, I can see a whole bunch of old program still running because "it work" and company, especially big companies, do not re-write the software in 64 bit.

  8. Re:Is it a real problem? by kenny603 · · Score: 4, Insightful

    In terms of personal computers this isn't going to mean much probably by the time it happens. The problem is that there are many, many embedded devices out in the field that are still running with 32-bit time_t vars. Example from a previous job of mine: we made building automation controllers. Those are all devices that are still out in the field and they are all still running old code. Assuming the devices don't die before the time rollover or are not replaced with newer pieces of hardware then it might become a problem.

  9. Re:64-bit computers DO NOT solve this problem by h4rr4r · · Score: 4, Insightful

    64bit time will solve it for anything that uses time from the system directly. Meaning all those perl and bash scripts that run so much stuff no one thinks about, from billing to transferring data between companies to scheduling your next vacation are going to be fine.

    What will not be fine is crusty old compiled code that was 32bit. Hopefully they are just a recompile away from being fixed. Sadly that is likely not to be the case as generally corporations do not have that kind of foresight.

  10. Noooooooo! by lxs · · Score: 5, Funny

    My uptime!

  11. Time overflowing by Dyinobal · · Score: 3, Funny

    Time overflowing sounds like a good plot, instead of the usual time repeating, or other cliche time related plots. I'm just curious what the effects of a time overflow would be. *ponders* Maybe a break down in causality?

  12. Re:64-bit computers DO NOT solve this problem by locofungus · · Score: 5, Insightful

    Compiling away isn't always that simple.

    You'd be amazed how many people code depending on the fact that sizeof(long) == sizeof(int) == sizeof(void*) == sizeof(time_t) == 4 even when they don't need to and structures are often mapped directly onto binary data, either from disk or network.

    I don't actually imagine that 2038 will be much of a problem - most of the issues that will be triggered by the above assumptions will occur between now and then and will be fixed as they occur.

    Then 2038 will loom and there will be a big drive to fix everything (else), the magic time will occur and there will be little more than a whimper. Then everyone will complain about the hype about a non-existent problem.

    I am quite looking forward to having the option of some lucrative consulting income in my early retirement should I decide I need it. :-)

    Tim.

    --
    God said, "div D = rho, div B = 0, curl E = -@B/@t, curl H = J + @D/@t," and there was light.
  13. embedded by Anonymous Coward · · Score: 5, Informative

    64-bit is taking over already everywhere. In 10-15 years, you will have a hard time finding a 32-bit computer.

    The embedded world will still have a lot of 32-bit (as well as 16- and 8-bit) stuff for years to come.

    That's where the big problem will be: not with the systems on your desk (or on your lap, or in your pocket), but rather with the hundreds of little CPUs that you don't see (and you may, or may not, be aware of).

  14. Shhhhh!! by hawguy · · Score: 3, Interesting

    Stop warning people! The Unix 32 bit Epoch cleanup is my retirement plan! I'll make a killing fixing legacy software when the kids out of school only know how to point and click through their GUI IDE's and don't know the difference between a short, an int, a long, and a long long... and time_t is completely foreign to them.

  15. Re:64-bit computers DO NOT solve this problem by HaZardman27 · · Score: 5, Funny

    I am quite looking forward to having the option of some lucrative consulting income in my early retirement should I decide I need it. :-)

    Then my goal is to thwart your retirement plan. I will contract a low-wage programmer from a yet-to-be-determined developing country to write a piece of software that corrects the issue in any source code and recompiles it for you. I'll sell licenses for $1kUSD a pop, which by 2038 will only be enough to cover the cost of a McDonalds Synthetic Cheeseburger Paste from the Value Menu.

    --
    Apparently wizard is not a legitimate career path, so I chose programmer instead.
  16. Re:64-bit computers DO NOT solve this problem by Zordak · · Score: 5, Interesting

    I worked for a DoD contractor in 1999. Our customer had a piece of ground support software for the A-10 that they wanted to make Y2K compliant. Of course, we had to write up a detailed description of the problem and what it might affect so the customer could justify the expenditure to the bean counters. Then we had to write up a preliminary design review to get approval at the high level for what we were going to do. Then we had a critical design review so they could sign off on the detailed implementation of how we were supposed to implement the changes. I based my CDR on the code I had already written to fix the problem. Then I had to put together a testing specification so that we could prove that our date fix didn't destroy the functionality of completely unrelated code. Then we had to go test it on site, do a test report and a final project report.

    Nine month project. I don't remember for sure, but I'm pretty sure that the government spent half a million on the entire program. I was the sole technical actor. I changed something like 20 lines of Pascal code, which took me maybe a week or two. I think I spent more time figuring out how to put together their ancient tool chain than writing actual code. Your government dollars at work.

    --

    Today's Sesame Street was brought to you by the number e.
  17. Re:64-bit computers DO NOT solve this problem by Runaway1956 · · Score: 4, Funny

    Remind me to tag you as "evil bastard" if I ever look at your profile, alright? Not only do you destroy a future old man's retirement scheme, but you turn my stomach with a future menu item. Evil.

    --
    "Windows is like the faint smell of piss in a subway: it's there, and there's nothing you can do about it." - Charlie Br
  18. Re:64-bit computers DO NOT solve this problem by stoborrobots · · Score: 4, Insightful

    If you have a 64 bit PC and OS, it should be little more than a recompile.

    A number of comments have claimed this: recompile with 64-bit time_t and the problem goes away. Unfortunately, for many apps it's not quite as simple as that.

    Certainly, for those apps which only deal with time information internally, and in a transient fashion, this will be sufficient to eliminate the problem.

    However any program which persists UNIX timestamps in files, or sends UNIX timestamps as part of a networking protocol, or basically anything which sends the data structure outside the application is still going to require work on how to handle the migration.

    What happens if your app is required to talk on the network? If there are few enough machines involved, then sure, you can upgrade all of them at once, but if it's a large or distributed operation, there needs to be a transition plan. How will older clients and newer clients interoperate?

    If data is saved, how will the recompiled application interpret old files? Does it need a way to distinguish them? Can old data be automatically converted? Are there cases where old data may be compromised? (e.g. those 30 year mortgages probably have the wrong end-date stored...) How will we handle those cases?

    What about situations where time information is used to prime other calculations - is it okay to affect those other calculations? Serial numbers, PRNGs, UUID generation, etc - the situation has to be assessed. Many cases might be fine, but you can't make a blanket statement for all cases, so each calculation must be vetted.

    In the end, the result is that there is work to do. Much of it will be easy to fix, but the assessment still needs to be done.

  19. Re:64-bit computers DO NOT solve this problem by Anonymous Coward · · Score: 5, Insightful

    $0.5M to be air-tight sure that a simple 20 lines of Pascal code doesn't crash one (or more) of the hundreds of A-10s in active service, each one worth $12+M, not to mention keeping those pilots safe.

    Yes. Definitely our government dollars at work.

  20. Re:64-bit computers DO NOT solve this problem by idontgno · · Score: 3, Informative

    No, that phrase totally means exactly what he things it means, if he's using it in a sales pitch. Anything to support inflating sales and support hours.

    Remember, if you're a support contractor or consultant, anything you say means "pay me more."

    --
    Welcome to the Panopticon. Used to be a prison, now it's your home.
  21. Re:64-bit computers DO NOT solve this problem by Zordak · · Score: 4, Informative

    I would have to be quite a hacker to write code that would crash an A-10. This was for software that displayed actuarial data on engine health, collected by a little computer on the airplane. To get the data, you took a little box out to the airplane, sucked down the actuarial data into the little box, then went back tot the shop and hooked the little box up to the computer that ran the code I had to fix. Even if I was so elite that I could somehow use that software to re-write the code on the little box to somehow instruct it to somehow rewrite the code on the little computer on the airplane, the little computer on the airplane had absolutely no control over anything.

    Maybe if I was really, really 1337 I could have gotten it to display "ALL YOUR ACTUARIAL DATA ARE BELONG TO US" instead of the real data, but that's about the most damage I could have done.

    --

    Today's Sesame Street was brought to you by the number e.
  22. lazy programmers, kicking the can down the road by circletimessquare · · Score: 4, Funny

    64-bit time ends on 15:30:08 on Sunday, 4 December 292,277,026,596

    you think the programmers in that year will be happy with the mess you left them?

    not really planning ahead now are you geniuses?

    dear coders of year 292 billion: i'm sorry, we failed you

    --
    intellectual property law is philosophically incoherent. it is your moral duty to ignore it or sabotage it