Millenniumbug

De millenniumbug was een probleem dat in 20e-eeuwse computersystemen ontstond doordat bij het opslaan van de datum soms alleen de laatste twee cijfers van het jaar werden gebruikt. Zo werd 29 december 1977 opgeslagen als 29-12-77. In de beginperiode van de computer werd dat gedaan om te besparen op de toen erg dure geheugenruimte. Ook verwachtten programmeurs vaak niet dat hun programma's de eeuwwisseling zouden halen of werd er niet bij nagedacht. Eind jaren negentig ontstond er onder ICT-experts grote onrust over dit probleem.

Het probleem deed zich voor bij het verspringen van het eerste van de vier cijfers van het jaartal (en daarmee ook het tweede cijfer), zoals dat eens per millennium gebeurt, maar het had zich ook bij een andere verspringing van het tweede cijfer kunnen voordoen, zoals dat eens per eeuw gebeurt. Zo bekeken was centenniumbug of eeuwbug een betere naam geweest.

In deze context werd 2000 vaak aangeduid met Y2K, waarbij Y de afkorting is van het Engelse woord year (jaar) en de K voor kilo staat, voor een duizendvoud dus.

Verwachte problemen
Een probleem van het opslaan van maar twee cijfers van het jaartal is dat data die 100 jaar uit elkaar liggen niet onderscheiden worden. Belangrijker was echter een probleem dat zich zelfs voordeed in een systeem dat niet zo ver uiteenlopende data opsloeg, namelijk dat computers vaak ervan uitgingen dat de numerieke volgorde van de tweecijferige jaartallen overeenkwam met de chronologische volgorde.

Voorraadsystemen zouden in 1999 denken dat een product dat houdbaar is tot 01-01-00 al 99 jaar over de datum was. Voor systemen die niet werkten met toekomstige data zouden de problemen op 1 januari 2000 beginnen.

Men vreesde bijvoorbeeld dat er veel mis zou gaan bij renteberekeningen: wie in het jaar '99 een lening afsluit en die in het jaar '00 terugbetaalt, heeft volgens de computer ruim op tijd terugbetaald en is geen rente verschuldigd.

Over de te verwachten rampen publiceerden Luc Sala en Oussama Cherribi in 1998 in Nederland een pamflet: Bit Bang: in de schaduw van het millennium. Dit geschrift gaf ook tips voor het testen van de eigen computer en boekhouding op millenniumbestendigheid.

Rond de overgang naar het jaar 2000 werd de nodige voorzichtigheid betracht. Bij continubedrijven, chemische installaties, drinkwaterbedrijven, elektriciteitscentrales en dergelijke waren er in de millenniumnacht vaak dubbele ploegen personeel aanwezig en stonden noodsystemen startklaar. Ook bij de leveranciers van kritieke besturingssystemen was rond de jaarwisseling vaak extra ondersteunend personeel aanwezig. Sommige personen durfden met de jaarwisseling geen vliegreis te maken uit angst dat de computerapparatuur zou uitvallen. Verzekeringsmaatschappijen eisten zelfs dat vliegtuigen tijdens de overgang aan de grond zouden blijven. Sommige niet-aangepaste systemen als TeleRad werden uitgeschakeld door de millenniumbug.

Minder ernstige problemen werden verwacht bij verkeerslichten en liften, waarvan de programmatuur zou denken dat het 1 januari 1900 was (dus maandag) terwijl het in werkelijkheid 1 januari 2000 was, een zaterdag. Ook vreesde men dat sommige programma's rekening hielden met het feit dat de eeuwjaren geen schrikkeljaren zijn, maar niet met het feit dat 2000 wel een schrikkeljaar was, want deelbaar door 400.

Soms werd vergeten dat in veel systemen het kritieke moment niet om middernacht plaatselijke tijd viel, maar om middernacht UTC. In West-Europa is dit om 1:00 uur. Dit kwam doordat veel systemen intern met UTC werken.

Remedies
Om de verwachte millenniumproblemen te voorkomen, moesten overal ter wereld vele tienduizenden programma's gecontroleerd worden en werden veel systemen voorzien van versies van software waarvan bekend was dat ze 'millenniumproof' waren. Een van de remedies door voor het jaartal vier cijfers te gebruiken, wat het probleem uitstelt tot het jaar 10.000.

Vaak is ook 'windowing' toegepast, waarbij de programmatuur zo werd gewijzigd dat (bijvoorbeeld) de getallen 20-99 de jaren 1920 t/m 1999 voorstellen, en 00-19 de jaren 2000 t/m 2019. Op 1 januari 2020 gaf dit opnieuw problemen bij 14.000 parkeerautomaten in New York. Deze moesten toen handmatig hersteld worden.

In enkele gevallen werden de klokken van oudere systemen zelfs jaren teruggezet, vaak 28 jaar, omdat daarmee de cyclus van weekdagen en schrikkeljaren weer gelijkliep. Deze oplossing houdt er echter geen rekening mee dat eeuwjaren die niet deelbaar zijn door 400, geen schrikkeljaren zijn. Dit geeft dan voor het eerst problemen in 2100, want het systeem denkt dan dat het 2072 is.

Wereldwijd is naar schatting 300 miljard dollar uitgegeven om problemen te voorkomen. In Nederland was dit 20 miljard gulden (circa 9 miljard euro).

Achteraf beschouwd
Hoewel een en ander groots in het nieuws is geweest, heeft de millenniumbug uiteindelijk veel minder problemen veroorzaakt dan vooraf werd gevreesd. Of dit kwam doordat de gevolgen toch minder waren dan gevreesd, of doordat veel kritieke systemen voorafgaand uit voorzorg al waren aangepast, is nooit duidelijk geworden.

Soortgelijke problemen
Er waren wel vaker soortgelijke problemen in overlopen in datum- en tijdnotaties, niet alleen bij de overgang naar een nieuwe eeuw. Vaak gaan deze onopgemerkt voorbij of zijn alleen bekend bij insiders. 

Zo liep op 22 augustus 1999 de interne weektelling van het gps-systeem over van 1023 naar 0, wat bij sommige gps-ontvangers tijdelijk voor problemen zorgde. Dit gebeurt elke 1024 weken ofwel elke 19,7 jaar. In het Engels wordt hiervoor de term Week Number Rollover (WNRO) gebruikt. De recentste rollover vond plaats op 6 april 2019.

In veel computersystemen die op Unix gebaseerd zijn, wordt de tijd in seconden vastgelegd in een 32-cijferig binair getal, waarbij één positie aangeeft of het een datum voor of na 1970 betreft. Op 19 januari 2038 kan zich dus een soortgelijk probleem voordoen, wanneer er 231 seconden voorbij zijn sinds de Unix Epoch, middernacht van 1 januari 1970. Ook nu al geeft het rekenen met data vanaf 2038 soms problemen.

Het is vaak voorgekomen dat 100-plussers een oproep kregen voor de leerplicht of voor een medische keuring of vaccinatie van kinderen. Dat is te verklaren doordat van het geboortejaar alleen op de laatste twee cijfers werd gelet. Dit gebeurde al in de tijd voordat er computers waren.

Programmeerconcept