Super summary: How 2028 challenges MPE
August 22, 2019
Photo by Joshua Earle on Unsplash
Editor's note: More than five years ago, Denys Beauchemin outlined his view of the future at that time for the upcoming 2028 date changes in MPE/iX. The years since then have given 3000 users several solutions for 2028. There are ways to keep using the 3000 into the year 2038, the year when Unix systems will face this kind of challenge. The technical challenges the 3000 solutions overcome are very real. Denys wrote this back in 2014.
It's December 31, 2027. The MPE/iX CALENDAR intrinsic uses the leftmost 7 bits to store the year, offset from 1900. But just like Y2K, the effect will start to be felt earlier than that as dealing with future dates will yield interesting results.
For example, using the standard CALENDAR, your new driver's license will expire in -46000 days when you renew it in 2026. Back in 1986, I was writing an article about calendars and Y2K for Supergroup Magazine. I changed the date on an nearby 3000 one night and let it cycle to January 1, 2000, just to see what would happen. The date displayed was funky and I noted a few other things, but I had to reset the clock back quickly for obvious reasons.
I wrote up those findings in the article and closed with something about HP having 14 years to fix it. The 2027 thing is much more difficult to fix than Y2K and given the state of HP support from MPE this millennium, it may not get fixed in time.
The issue is very simple. The calendar intrinsic returns the date in a 16 bit word. That format is basic to the HP 3000 and has been around forever. You could conceivably change the algorithm to make it offset from 2000, or 1950 or whatever, but all the stored value would instantly be incorrect.
You could decide to rely on something like the Y2K trick of anything less than 50 is offset to 2000 and anything greater than 50 is offset to 1900. I still think 2028 is the final death date of the HP 3000. But I could be wrong, and do not want to stand in the way of someone trying to fix it.