History
-
Day 24: Three Calendars Nobody Uses
Yesterday we covered the Gregorian calendar. Today we’re going to talk about the attempts to replace it. There was one that almost passed at the United Nations in 1955, and one that Kodak quietly ran for sixty-one years. And there’s a current proposal from two Johns Hopkins professors that I think is interesting and worth considering.
I’m not trying to sell you on any of these. The point is that calendar reform isn’t a fringe topic, or out of the realm of possibility. It’s been taken seriously by the League of Nations, the United Nations, and the founder of Kodak, and it still shows up in the literature with a fair amount of regularity. You could come up with the best calendar design in the world and it still wouldn’t be enough. Like Daylight Saving Time, the hard part isn’t the proposal. It’s the adoption.
What’s actually wrong with the calendar
The root problem is that the numbers don’t divide cleanly. We’re stuck with 365 days because that’s what keeps the calendar aligned with the seasons, but 365 isn’t divisible by 7 or by 12. Nothing lines up, and you get awkward remainders everywhere. Three of them cause real, recurring headaches.
The same date lands on a different weekday every year. 365 divided by 7 is 52 weeks with a day left over. That leftover is why your birthday is a Wednesday this year, a Thursday next year, a Saturday the year after. Every school district redesigns its calendar. Every payroll system gets reconfigured. The cost is enormous and invisible all because of a 500 year old calendar system.
Months are unequal. 365 doesn’t divide evenly by 12 either, so months run twenty-eight to thirty-one days. February sales and March sales aren’t comparable without normalizing first.
Quarters are unequal. Q1 has 90 days, or 91 in a leap year. Q4 has 92. Ask your accountant about this irritation.
The calendar reformers' argument starts with a simple premise: none of this has to be true. What if you could design a calendar without any of these problems? Here are the attempts.
The World Calendar
The first serious modern proposal came from an American philanthropist named Elisabeth Achelis in 1930. Her design, the World Calendar:
- 364 days in four identical quarters of 91 days each, 13 weeks per quarter.
- Each quarter is a 31-day month, then two 30-day months.
- January 1 is always a Sunday. So is the start of every quarter.
- Two extra days, Worldsday at the end of December and Leapyear Day at the end of June, sit outside the week. They have a date but no weekday.
By the late 1930s this had real momentum. The League of Nations debated it. The UN took it up in 1954 and 1955. India formally proposed it for adoption. It came close to a vote. It failed for one specific reason, which I’ll get to.
The Kodak version
Around the same time, a British statistician named Moses Cotsworth went further: thirteen months of twenty-eight days. Thirteen times twenty-eight is 364, with one blank day at year-end. He stuck a new month called Sol between June and July.
In this design every month is identical. Every month starts on a Sunday, ends on a Saturday, runs exactly four weeks. Cross-month comparison becomes trivial. The thing is so symmetric it barely looks like a calendar.
George Eastman, the founder of Eastman Kodak, was so sold on the industrial efficiency that he adopted it internally in 1928. Kodak ran on the thirteen-month calendar for all accounting, production, payroll, and reporting for sixty-one years, until 1989.
It worked. The hard part was the interface with everyone else. Kodak had to keep a dual calendar for billing, taxes, shipping, and contracts. The internal benefit was real, but the friction with the surrounding economy eventually wasn’t worth it. That’s the most important lesson in calendar reform. The proposal doesn’t have to be wrong to fail. It just has to fail to coordinate.
The thing that killed both of them
Both designs use blank days. A day that has a date but no day of the week, slotted outside the weekly cycle so the next year can start cleanly on a Sunday.
That innocent-looking idea is what killed reform. The seven-day week is the oldest continuously running cycle in human civilization. It predates Rome. It predates Christianity. It runs unbroken through Judaism, Christianity, and Islam for at least 2,500 years, and several major religions treat it as a sacred, inviolable obligation with the Sabbath fixed to a specific point in the cycle.
Insert a blank day, and next year’s Sabbath lands on a different civil day. Observers would have to break the civil week to keep the Sabbath, every year, on a rotating basis. The Chief Rabbi of the British Empire opposed it. So did the Vatican. So did Islamic authorities. They organized and blocked both the 1931 League vote and the 1955 UN vote. The Gregorian calendar held.
Hanke-Henry
Fast forward to 2011. Steve Hanke, an economist at Johns Hopkins, and Richard Conn Henry, an astrophysicist there, publish the Hanke-Henry Permanent Calendar.
The structure looks like the World Calendar: 364 days, four identical 91-day quarters, each quarter a 30, a 30, then a 31-day month. January 1 is always a Monday. Every date falls on the same weekday forever. Christmas is always a Sunday.
The clever part is the leap rule. No blank day. Instead, 364 days a year runs a deficit of about 1.24 days against the solar year, so every five or six years, when the gap reaches a full week, they insert a seven-day intercalary week called Xtra at the end of December. The year becomes 371 days.
Because the leap is always a multiple of seven, the weekly cycle is never broken. The Sabbath stays anchored forever. Instead of an extra non-day floating outside the week, you occasionally get an entire extra week.
The real critiques
It isn’t perfect.
- Seasonal swing. Correcting in 7-day chunks instead of single days lets the solstices and equinoxes wander by up to five days over the leap cycle. Gregorian keeps them within half a day.
- The birthday problem. Some dates stop existing. No January 31, no May 31, no August 31. People born on those days get mapped by convention. Small in the long view, a real political liability in the short one.
- The transition. Switching retroactively is a database nightmare. Records, contracts, treaties, mortgages all need a mapping table. The cost is concentrated up front, the benefit spread over centuries.
Why the hold up
The hold up isn’t technical. The Hanke-Henry design is sensible, a good answer to a real problem, and it isn’t religious anymore either, but that was never the bar.
Politically it’s dead on arrival, for two of the reasons above. The birthday problem: good luck explaining to the public why August 31 no longer exists. And the switching cost: transitioning is expensive, it complicates everything that touches a date, and convincing people it’s worth the disruption is an enormous ask. You’re charging a real cost now for a benefit spread over centuries.
So it isn’t that the idea failed. It’s that nobody has a way to adopt it. This is the kind of thing that would need a UN resolution and a coordinated global switch, because the moment one country goes first, it recreates the Kodak problem: a dual calendar at every boundary with the rest of the world.
So the kludge keeps winning.
Tomorrow we ditch the politics and return to physics. What did Einstein’s have to say on the subject of time?
Sources
- The Gregorian Calendar: Clavius, Christopher. Romani calendarii a Gregorio XIII restituti explicatio. Rome, 1603.
- The World Calendar & UN History: Elisabeth Achelis and the World Calendar Association records; UN Economic and Social Council proceedings (1954-1955).
- The International Fixed Calendar (Kodak): The Journal of Calendar Reform; Eastman Kodak internal archives (1928-1989).
- The Hanke-Henry Permanent Calendar: “The Hanke-Henry Permanent Calendar” proposals and papers by Steve H. Hanke and Richard Conn Henry (Johns Hopkins University).
I’d appreciate a follow. You can subscribe with your email below. The emails go out once a week, or you can find me on Mastodon at @[email protected].
-
Day 23: All the Calendars Are Just Made Up
You probably haven’t thought about this much before, but the calendar on your wall is, as a piece of civic infrastructure, bizarre. It’s the result of two and a half millennia of duct tape and wood glue.
The current global standard, the Gregorian calendar, is a 1582 Catholic correction to a 46 BCE Roman correction to a lunisolar system (a calendar that tries to track the moon’s phases and the solar year at the same time) that had been failing for several hundred years. Each “fix” was designed by people doing their best with the astronomy they had, and each “fix” was adopted on a timeline of political and religious convenience.
Hope you are ready for a lesson, because the history is much weirder than the calendar lets on. It also makes the question of “could we reform this?” feel more likely, but that is for tomorrow’s post.
The Roman mess
Before Julius Caesar, the Roman calendar was a lunisolar system with 355 days in a standard year. Because 355 days is about ten days short of a solar year, the calendar drifted forward against the seasons rapidly. The fix was an intercalary month called Mercedonius. Intercalary just means “inserted,” an extra month wedged into the year to drag the calendar back into alignment with the seasons. It was supposed to go in every two years, added by a group of priests called the College of Pontifices.
The Pontifices had to decide whether to insert Mercedonius in a given year. The decision was political. If they liked the consuls in office, they’d insert it, and the consuls got an extra month of office. If they didn’t, they’d skip it. During the civil wars of the late Republic, the system broke down completely. By 46 BCE, the Roman calendar had drifted nearly 90 days out of alignment with the seasons. Winter festivals were happening in autumn. Spring planting celebrations were happening in summer.
Caesar, after his Egyptian campaigns, came home and decided to fix it. He brought in an Alexandrian Greek astronomer named Sosigenes, who proposed abandoning the lunar cycle entirely and going to a pure solar calendar of 365.25 days, with a single leap day every four years.
To reset the seasons, Caesar made 46 BCE last 445 days. There was the standard 355-day year, plus the regular intercalary Mercedonius, plus two additional intercalary months totaling 67 more days, all jammed between November and December. Roman historians later called it annus confusionis, the Year of Confusion.
On January 1, 45 BCE, the Julian calendar took effect, and it ran more or less unchanged for sixteen and a half centuries.
The Julian drift
The Julian calendar’s bet was that the solar year is exactly 365 days and 6 hours (because of the one leap day every four years).
But the mean tropical year—the actual time it takes the Earth to complete a full seasonal orbit—is approximately 365.2422 days. If you break that decimal down:
- 0.2422 days × 24 = 5.8128 hours (5 hours)
- 0.8128 hours × 60 = 48.768 minutes (48 minutes)
- 0.768 minutes × 60 = 46.08 seconds (~46 seconds)
So the solar year is actually 365 days, 5 hours, 48 minutes, and 46 seconds. The Julian calendar assumes exactly 6 hours (which is 5 hours, 59 minutes, and 60 seconds). Subtract the true solar year from the Julian assumption, and you find the Julian year is too long by exactly 11 minutes and 14 seconds.
That doesn’t sound like much. Over 128 years it accumulates to a full day. Over 1,257 years, the span from the Council of Nicaea in 325 CE (where the Catholic Church anchored its calculation of Easter to the spring equinox) to the late sixteenth century, it accumulated to about 10 days.
By 1582, this had become a real problem. Nicaea had fixed the spring equinox to March 21. By Pope Gregory XIII’s time, the physical equinox was happening on March 11. Easter, which is anchored to the equinox, was steadily drifting later into the year. Without a fix, Easter was going to walk forward into summer and the Catholic Church wasn’t going to let the ressurection of Jesus Christ drift all over the place. Time to fix the calendar!
October 1582
The Catholic Church commissioned a calendar reform led by an Italian physician and astronomer named Aloysius Lilius and, after his death, finished and defended by a German Jesuit named Christopher Clavius. Clavius’s defense of the new system, is one of those documents nobody reads but quietly underwrites the modern world.
The reform did two things.
It deleted ten days. Pope Gregory XIII’s papal bull Inter gravissimas declared that Thursday, October 4, 1582, would be followed directly by Friday, October 15, 1582. Five through fourteen simply did not exist. The days of the week continued unbroken, Thursday to Friday, but the dates jumped. This realigned the calendar with the physical equinox.
It changed the leap year rule. Under the Julian system, every year divisible by 4 was a leap year. Gregory’s reform added an exception. Century years are not leap years, unless they are divisible by 400. So 1700, 1800, and 1900 were not leap years. 1600 and 2000 were. This drops three leap days every four hundred years, bringing the mean Gregorian year to 365.2425 days. Long by only 26.8 seconds per year, which is small enough that the next correction won’t be needed for over 3,000 years.
It’s an elegant fix. It also went over about as well as you’d expect a Pope’s calendar reform to go in Protestant Europe.
Adoption was a mess that lasted four hundred years
Catholic countries adopted on the day Rome decreed. Spain, Portugal, Italy, Poland, France (with a December skip instead of October). Protestant Europe refused. England, by then deep in its Protestant identity, was not going to take a calendar reform from “the Antichrist in Rome.” For 170 years, traveling between England and France required adjusting your calendar by ten days, and after 1700, eleven days.
England finally gave in in 1752, when Wednesday, September 2, 1752, was followed by Thursday, September 14, 1752. The American colonies came along. There’s a famous story about street riots demanding “give us back our eleven days.” Most historians now think the riots were largely embellished from a satirical Hogarth painting, but the eleven-day jump was real.
Russia held out longest. The Russian Orthodox Church refused the Gregorian calendar straight through the late Russian Empire. It took the Bolshevik Revolution to finally switch civil time. Lenin decreed the change in early 1918, with Wednesday, January 31, 1918, followed by Thursday, February 14, 1918. Thirteen days deleted. This is why the “October Revolution” of 1917 actually happened on what we now call November 7. The Russian Orthodox Church still uses the Julian calendar for liturgical purposes, which is why Orthodox Christmas falls on January 7 in countries that converted civilly but not liturgically.
And then there’s Sweden. Sweden tried to be clever. In 1700, they decided to make the transition gradual. Drop every leap year between 1700 and 1740, no jumps. They successfully skipped leap day 1700. Then the Great Northern War broke out, the bureaucracy got distracted, and they forgot to skip leap years 1704 and 1708.
This left Sweden on a unique calendar. One day ahead of Julian, ten days behind Gregorian, aligned with no one. King Charles XII, recognizing the system was a mess, decided to revert to Julian. To do this, Sweden added an extra leap day to 1712, creating February 30, 1712, the only documented February 30 in civil history.
Sweden finally adopted Gregorian normally in 1753.
The point
I’m spending a couple of days on calendars to illustrate it’s just a mess as with all our methods for representing time. The Gregorian calendar isn’t optimal. It is a sixteenth-century Catholic patch on a first-century-BCE Roman patch on an even earlier patch. What we use today is chronological kludge.
None of this had to be this way. It is what it is because of historical accident: which rulers held power, which church each country answered to, and how long each was willing to take a calendar from Rome.
This matters because it means the idea of replacing the Gregorian calendar isn’t crazy. The Gregorian calendar replaced the Julian which replaced the Roman which replaced a number of earlier systems. There is no reason in nature that the calendar in 2200 will look like the one in 2026.
Several serious people have tried. The League of Nations debated calendar reform in 1931. Eastman Kodak ran on a thirteen-month calendar for sixty-one years. There’s a current proposal, from a Johns Hopkins economist and an astrophysicist, to switch the world to a perpetual calendar where every date falls on the same day of the week, forever.
Tomorrow: the calendar that almost was.
Sources
- The Julian Reform: Richards, E. G. Mapping Time: The Calendar and Its History. Oxford University Press, 1998.
- Solar Year & Julian Drift Calculations: Meeus, Jean. Astronomical Algorithms. Willmann-Bell, 1991.
- Gregorian Calendar & The 10-Day Skip: Clavius, Christopher. Romani calendarii a Gregorio XIII restituti explicatio. Rome, 1603.
- English Adoption (1752): Poole, Robert. Time’s Alteration: Calendar Reform in Early Modern England. UCL Press, 1998.
- Sweden’s February 30: Bauer, R. W. Calender for Aarene fra 601 til 2200. Copenhagen, 1868.
- The Russian Calendar Shift: “Decree on the Introduction of the Western European Calendar,” RSFSR, 1918.
- The Eastman Kodak Calendar: The Journal of Calendar Reform, 1930s-1950s.
- The Hanke-Henry Permanent Calendar: Proposed by Richard Conn Henry and Steve H. Hanke at Johns Hopkins University.
I’d appreciate a follow. You can subscribe with your email below. The emails go out once a week, or you can find me on Mastodon at @[email protected].
-
Day 17 — Time Zones Are a Nightmare
Yesterday I wrote about how
2026-05-24T14:30:00Zwon the format wars. ThatZat the end, it turns out, is quite important. It says Zulu, it says UTC, it says: I am refusing to participate in the nightmare that is Timezones.However, today we participate.
The lie you were told in school
There are 24 time zones, one for every hour, neat 15° slices of the globe.
There are not. There are at least 38 named offsets in active use right now, and the list changes a few times a year.
Some of them are not on the hour:
- India is at UTC+5:30. The whole country, one zone, half-hour offset.
- Nepal is at UTC+5:45. Forty-five minutes. Because Nepal decided in 1986 that it wanted its civil time anchored to the meridian passing through Gauri Shankar, not Delhi.
- Newfoundland is at UTC−3:30.
- The Chatham Islands are at UTC+12:45.
The range isn’t 24 hours either. It runs from UTC−12 to UTC+14, a 26-hour spread, because Kiribati got tired of being split by the international date line in 1995 and just moved the line. One day the Line Islands woke up and it was tomorrow.
Then there’s China, which geographically spans five time zones and politically uses one (UTC+8), so in the far west of Xinjiang the sun rises at what the clock insists is 10 AM. North Korea changed its offset twice in the 2010s, from UTC+9 to UTC+8:30 in 2015 to mark liberation from Japan, then back to UTC+9 in 2018 to align with Seoul during a diplomatic thaw.
Time zones are not geography. Time zones are politics with a clock face glued to the front.
How we got here
Before about 1850, every town in the world ran on its own clock. Noon was when the sun was overhead here, which meant noon in Boston was several minutes off from noon in New York, which was off from Philadelphia, which was off from everywhere.
Nobody cared, because nobody was traveling fast enough for it to matter.
Then the railroads showed up.
When your train leaves at “noon” and arrives at “3 PM” and every station defines noon differently, you can’t print a schedule. Britain rolled out Railway Time (GMT everywhere) in the 1840s. The American railroads, bless them, didn’t wait for permission. On November 18, 1883, they unilaterally divided the United States into four zones. Newspapers called it “the day of two noons” because clocks across the country jumped, sometimes forward, sometimes back, to land on the new shared time.
The following year, in October 1884, twenty-five countries met in Washington for the International Meridian Conference and made it official. Greenwich is 0°, the universal day starts at midnight in Greenwich, every other place is some offset from that.
France abstained. France wanted Paris. France held out until 1911.
The “database” holding the world together
When your phone shows you the right time after you land in Tokyo, when your calendar correctly reschedules a meeting because Mexico canceled DST a few years ago, when your server logs all line up across a deploy in three continents, that all happens because of a single, voluntarily maintained text file.
It’s called the IANA Time Zone Database, also known as the Olson Database, after Arthur David Olson, an NIH employee who started maintaining it in 1986 as a side project. Today it lives under IANA stewardship and is primarily maintained by Paul Eggert, a UCLA computer scientist who has been doing this, mostly alone, for decades.
Every Unix system, every Linux distro, every Mac, every iPhone, every Android phone, Java, Python, Go, Rust, Postgres, browsers, every piece of software that knows what time it is, gets its time zone rules from this database. The release cadence is multiple updates per year, almost always triggered by some country’s parliament deciding to change DST rules with three months' notice.
The format is something like
America/New_York,Europe/Berlin,Asia/Kolkata,Pacific/Kiritimati. Area, slash, location. NotEST, notGMT+5, because those are offsets and offsets aren’t enough. The rules are what you need, because the rules change with politics.The whole arrangement is held together by a small group of volunteers, a mailing list, and Paul Eggert’s continued willingness to keep doing this. If he ever stops, somebody else will have to start.
Why this is one of the hardest problems in working programmer software
A few categories of pain, none of them solvable, all of them shipped to production daily:
1. Ambiguous local times. When the clocks fall back in November, the hour from 1:00 to 2:00 AM happens twice. If a user schedules a meeting at “01:30 local time” on the wrong day, which 01:30 do they mean? There is no correct answer. Your software picks one and someone shows up an hour off.
2. Nonexistent local times. When the clocks spring forward in March, 2:30 AM doesn’t exist. If somebody’s medication-reminder app is set for 02:30, what does it do that morning? Skip? Run at 03:30? Run at 01:30 the previous hour? There is no correct answer.
3. Future timestamps are mutable. If you store a meeting as “October 15, 2027 at 3 PM in Mexico City,” and Mexico cancels DST between now and then, which it did, in 2022, the meeting moves. The number of hours from now until that meeting changes after you saved it. The cardinal rule, the only thing that saves you, is this: store UTC and the IANA zone name separately, never store a local timestamp alone, and recompute on display.
4. JavaScript’s
Dateobject. It’s not great but I worte more about it here, There is a fix called the JavaScript Temporal API. It’s technically here now, though browser support is still rolling out, and we will all be happier when it’s fully supported everywhere.
The list of lies (about time)
There’s a famous post called Falsehoods Programmers Believe About Time, and a partial sample from the time-zone section gives you the texture:
- “There are 24 time zones.” (38+, give or take, depending on the week.)
- “A day is 24 hours.” (DST transitions make some days 23 or 25.)
- “Time zones don’t change.” (They change several times a year.)
- “If I store the UTC offset I don’t need the zone ID.” (You do, for any future date.)
- “UTC is a time zone.” (UTC is a time scale. Zones are offsets from it. This distinction is going to matter more than it sounds like it should.)
All are gotchas that programmers encounter when working with time zones.
The ultimate example of technical debt
The time zone system isn’t broken, per say… it’s working exactly as designed.
It was designed by railroad executives in 1883, ratified by diplomats in 1884, and then handed off to every country on Earth to amend at will. Every president who has ever moved a DST date for political reasons, every dictator who has ever changed the national offset to flatter a neighbor, every parliament that has voted to abolish daylight saving without specifying when, has added their fingerprint to the IANA database.
It is a working international system. It is also a Rube Goldberg machine running on a tar pit, held aloft by Paul Eggert and a mailing list.
If you ever thought Timezones were bad, tomorrow it gets worse. We’re going to talk about Daylight Saving Time, and the specific, named software disasters it has caused.
Sources
- Nepal Standard Time — Wikipedia. Details Nepal’s 1986 decision to anchor civil time to the Gauri Shankar meridian (
UTC+5:45). - Time in Kiribati — Wikipedia. Covers the 1995 shift of the International Date Line, creating the 26-hour global spread.
- Time in North Korea — Wikipedia. Documents the geopolitical shifts between
UTC+8:30andUTC+9. - Day of Two Noons — Wikipedia. History of American railroads unilaterally standardizing time on November 18, 1883.
- International Meridian Conference — Wikipedia. The 1884 agreement that established Greenwich as 0° (and France’s holdout until 1911).
- IANA Time Zone Database — Wikipedia. History of the Olson database, its maintenance by Arthur David Olson and Paul Eggert, and its fundamental role in modern computing.
- Daylight saving time in Mexico — Wikipedia. Details the national abolishment of DST in October 2022.
- JavaScript Temporal API — TC39 Documentation. The modern fix for JavaScript’s notoriously broken
Dateobject (currently rolling out to browsers). - Falsehoods Programmers Believe About Time — Noah Sussman’s canonical post detailing the myriad ways developers misunderstand time.
I’d appreciate a follow. You can subscribe with your email below. The emails go out once a week, or you can find me on Mastodon at @[email protected].
-
Day 14: The Bug That Didn't End the World, and the One That Still Might
On December 31, 1999, a measurable percentage of the developed world stockpiled bottled water, withdrew cash from ATMs, and stayed up to see if the lights would go out at midnight.
They didn’t. Planes did not fall from the sky. Power grids did not collapse. Bank balances did not reset. The new millennium arrived, the champagne was opened, and by January 3rd everyone agreed it had been a hoax.
It was not a hoax. It was a save.
Y2K was a global $300+ billion engineering effort spread across roughly five years and almost every government and Fortune 500 IT department on Earth. The reason nothing happened on January 1, 2000 is that for half a decade, an enormous number of people worked very hard so that nothing would happen. The bug was real. The fix worked. Most people forgot it was ever a problem.
Twelve years from now, a structurally identical bug detonates again, but first let’s understand what happened in ‘99.
Y2K: the bug
The Y2K bug is almost embarrassingly simple. From the 1960s through the 1980s, computer storage was expensive enough that programmers had a habit of representing years with two digits,
99instead of1999,73instead of1973. It saved two bytes per date. Across a payroll system tracking millions of employees, that mattered.The assumption baked into that decision was: we’ll have rewritten this system long before the century rolls over.
This is the most consistently wrong assumption in software engineering. Code outlives its authors’ confidence. By the late 1990s, vast amounts of critical infrastructure, bank ledgers, airline reservation systems, hospital records, utility billing, social security disbursement, military logistics, nuclear plant monitoring, were running on COBOL programs from the 60s and 70s that had been patched but never rewritten. The language is unfamiliar to many but the fix it later approach is relable to everyone. The developers at the time all quietly assumed that the year
99was less than the year00.When the rollover hit,
99-12-31 + 1 day = 00-01-01looked, mathematically, like jumping back to 1900. Interest calculations would compute negative ages. Pensioners would suddenly be billed for a century of debt. Reservation systems would mark every upcoming flight as having departed in the past. Insurance policies would expire en masse.The reason planes did not fall is that, starting roughly in 1995, every major airline, manufacturer, FAA system, and air traffic controller began an exhaustive audit-and-fix campaign.
The reason the power grid did not collapse is that every utility company in North America and Europe ran the same campaign on their SCADA systems.
The reason your bank balance was still correct on January 1, 2000 is that someone, somewhere, spent late nights in 1997 reading printouts of code written before they were born.
The estimated total global cost: $300 to $600 billion. The amount of measurable damage on January 1, 2000: small enough that people argued for the next decade about whether the spend had been justified.
It was. The bug was real. The fix worked. The result of a successful preventive engineering campaign is that it looks, in retrospect, like the problem was never there.
Y2038: the same bug, different number
Twelve years from now, specifically, January 19, 2038, at 03:14:07 UTC, a structurally identical bug fires for a different reason.
Unix time is stored, on a huge amount of legacy infrastructure, as a signed 32-bit integer. That gives you about 2.1 billion seconds of positive range from the 1970 epoch. 2.1 billion seconds is 68 years. 1970 + 68 = 2038.
At
03:14:07 UTCon that date, the counter hits its maximum value,2,147,483,647. The next tick overflows. In two’s-complement signed integer arithmetic, the value rolls over to its most negative possible value:-2,147,483,648. Interpreted as a Unix timestamp, that’s December 13, 1901.Every 32-bit Unix-derived system that hasn’t been patched will, in the span of one tick, conclude that it is now the early 20th century. The effects are the same family of effects as Y2K, but applied to a much wider deployment surface.
File modification times become nonsensical. SSL certificates appear expired, or worse, not-yet-valid. NTP synchronization fails. Filesystems with 32-bit inode timestamps lose ordering. Embedded device firmware that schedules tasks based on wall-clock time begins executing at random intervals. Industrial control systems that latch state machines on “time since last event” calculations latch on negative durations and either freeze or behave unpredictably.
Modern desktop and server operating systems are mostly fine. Linux finished migrating to 64-bit
time_ton all architectures by kernel 5.6 (2020) and glibc 2.32. macOS and Windows have been 64-bit-clean for over a decade. AWS, GCP, and Azure all run 64-bit kernels.The problem is not where you are reading this. The problem is in the physical world that keeps everything running.
The long tail is enormous
Estimates of the number of currently deployed 32-bit embedded devices that interact with
time_tin some way range from a few hundred million to several billion.Industrial controllers, automotive ECUs, network routers, smart-meter firmware, point-of-sale terminals, medical imaging devices, GPS units, cable boxes, elevator controllers, traffic light systems, ATM internals, payment terminals, building HVAC, water-treatment SCADA, satellite firmware, oil rig control systems, and the embedded computer in your refrigerator.
Each one, depending on vintage and vendor, may or may not have been patched.
Many of these devices are not internet-connected and cannot be patched remotely. Many are running firmware whose source code has been lost. Many are running firmware whose vendor no longer exists. Many are in places where physical access is hard, a deep-sea oil platform, a satellite in geostationary orbit, a controller welded inside an industrial machine.
The Y2K fix worked because the affected systems were largely centralized: mainframes in data centers, software at named companies, code with active maintainers. You could audit it. You could rewrite it. You could ship a patch.
Y2038 is decentralized. The affected systems are everywhere.
The Buff Must Flow
In 2022, Microsoft Exchange Server stopped delivering email worldwide. The cause was a 32-bit signed integer in Exchange’s anti-malware scanner that stored the date as a long-form number. On New Year’s Day, the value tipped over the limit and the scanner refused to load. Mail queues backed up everywhere. Microsoft shipped an emergency script the next day. They called it Y2K22.
On April 6, 2019, the GPS week number counter rolled over. The failure mode was familiar, an integer designed when the engineers thought it was going to be big enough turned out, decades later, not to be. NYC’s municipal wireless network went down. KLM grounded a flight. Older car and marine GPS units showed dates in 1999.
Two examples of overflows hitting production and breaking real things. Y2038 will be every one of those at once, in places nobody is thinking about.
Y2038 is foreseeable. We know about it. We know what needs to be done. We have twelve years. We should get started sooner rather than later. A lot of important systems need to be replaced, and the fewer that fall through the cracks, the better.
There’s no checklist for the devices we’ve already forgotten about, but maybe there should be.
Tomorrow: The Smear, how Google, Amazon, and Meta quietly decided to stop telling the truth about leap seconds, and why everyone else followed.
Sources
- Year 2000 problem — Wikipedia
- Year 2038 problem — Wikipedia
- Microsoft Exchange year 2022 bug in FIP-FS breaks email delivery — BleepingComputer
- Microsoft Exchange Fixes Disruptive ‘Y2K22’ Bug — BankInfoSecurity
- GPS week number rollover — Wikipedia
- GPS Week Number Rollover — GPS.gov
- The impact and resolution of the GPS week number rollover of April 2019 — Geoscientific Instrumentation (Copernicus)
- Linux kernel 5.6 — 64-bit time_t support for 32-bit architectures (KernelNewbies)
- The Open Group Base Specifications: time.h
I’d appreciate a follow. You can subscribe with your email below. The emails go out once a week, or you can find me on Mastodon at @[email protected].
-
How American Steel Disappeared
I was playing games with the boys and somehow we landed on the topic of US steel manufacturing. I got curious enough to dig deeper, so here’s what I learned about how the American steel industry transformed over the past 150 years.
The Geography of Steel
Let’s start with the basics. What is steel made of? Iron ore, coal, and limestone. The traditional process required roughly twice as much coal as iron, so it always made sense to move the iron to the coal rather than the other way around.
When you think about coal in America, what comes to mind? Pennsylvania. Appalachia. West Virginia. Coal country.
But where does the iron ore come from?
Minnesota. That wouldn’t have been my first guess either, but there’s an area called the Mesabi Range northwest of Duluth where iron ore sits close enough to the surface that we could dig massive open pits instead of deep shafts.
I mean there were a lot of other places too, like Michigan and Wisconsin, but Minnesota was the biggest producer.
So the system worked like this: ship all that Minnesota iron across Lake Superior and over to Pittsburgh, where the coal was. That’s where the steel industry built itself up. US Steel became the first billion-dollar corporation and produced roughly half of the world’s total output through the 1950s.
Electricity Changed Everything
What else happened in the 1950s? The country finally got fully electrified. It’s kind of wild to think about given how ubiquitous electricity is now, but a fully electrified America is a relatively recent thing.
Why does electricity matter for steel? In the mid-to-late 1960s, we developed the Electric Arc Furnace. Instead of needing massive amounts of coal to smelt iron, we could just melt it using electricity. Suddenly, you could make steel wherever you had iron and power.
This flipped the entire industry. Steel production went from requiring huge capital investments and heavily unionized operations to something cheaper, less regulated, and non-union. The old model crumbled.
Enter China
You might be thinking: what about China? Isn’t that where all the steel comes from now?
That shift didn’t really happen until the 1990s and early 2000s. China went from a minor player, to the world’s dominant steel producer remarkably fast.
Well, the thing is, China doesn’t have great domestic iron ore. They import huge quantities of high-grade ore from Australia and Brazil.
Why does that work economically? A few reasons. First, they buy in such massive quantities and ship it on enormous vessels designed specifically for iron ore that the per-unit cost stays low.
Second, and this is the smart part, they deliberately built their steel manufacturing right at the ports. The iron comes off the ships and travels almost no distance before becoming steel.
From there, they can easily decide whether it goes inland for finished goods, or gets used domestically for construction, or gets re-exported.
China also benefits from state subsidies and historically low labor costs. Though with today’s mechanization and robotics, that labor gap isn’t as significant as it used to be.
Where We Are Now
The American steel industry has been struggling for decades, facing intense competition from low-cost producers like China. Despite efforts to modernize and innovate, the industry has struggled to compete.
So we’ve been struggling but does it still exist? Well, sorta. In 2025, Nippon Steel, a Japanese company, acquired US Steel and became the second-largest steelmaker in the world.
The current administration approved the deal with some agreements in place to protect American interests, so the US headquarters would remain in Pittsburgh.
While there are Americans today still making steel, it’s only as a subsidiary of a foreign company. American in name only. American owned and operated steel manufacturing has dissapeared.
How did I do? Should I do more of these type of posts?