Dr. Jan van Bakel



Het Millennium-probleem bestaat niet


- Een tekst uit 1999 -

Terug naar de site van Jan van Bakel


Bange mensen zijn snel geneigd geld uit te geven ter bestrijding van iets waar ze bang voor zijn. Het is de moeite waard ze te laten zien dat hun vrees op niets berust. De beste manier daarvoor is aantonen dat het gevreesde niet kan bestaan. Daarom enige uitleg over het zogenaamde millennium-probleem. Ik wil trachten precies uit te leggen waarin het zou kunnen bestaan en argumenten aanvoeren waarom het ondenkbaar is dat het zich zou voordoen. Als mijn redenering niet klopt zal er iemand zijn die dat kan aantonen. Dan hebben we in elk geval zoveel gewonnen dat we eindelijk precies zullen weten waar het om gaat. Ik spreek uitsluitend over dingen die iedereen met gezond verstand kan begrijpen. Gezond verstand is per definitie iets wat iedereen heeft en er is niets wat zo principieel voor iedereen begrijpbaar is als een computer.
 
Vooraf moet ik een algemene opmerking maken. Omtrent een aantal dingen die ik beneden als feiten naar voren breng bestaat geen absolute zekerheid van 100%. Maar iets wat niet 100% zeker is hoeft nog niet per se betwijfeld te worden. Laten we afspreken dat we de mate van onzekerheid die aankleeft aan een uitspraak als "melk in de supermarkt, verpakt in een ongeschonden kartonnen doos, is niet vergiftigd" de melk-twijfel zullen noemen. Als iemand vindt dat je over gevallen van melk-twijfel evenveel ophef moet maken als thans gedaan wordt over het millennium-probleem, laat dat dan aan de redactie van uw krant weten.

We hoeven ons niet af te vragen waarover we het hebben. Het gaat erom, zegt men, dat "computers de overgang naar het jaar 2000 niet aankunnen" (NRC 26 okt.). Zomaar heel in het algemeen. Ze "denken" dat het 1900 is. Dit is de eerste zaak waarover we moeten spreken en niet alleen omdat er mystificerende termen worden gebruikt. Waarop trouwens een groot deel van de hele hype berust.
 
Het is bekend dat IBM vroeger een machine produceerde, de zgn. XT, die geen datum kende. Iedere gebruiker moest bij het opstarten aan de machine "meedelen" welke datum het "vandaag" was. Vanaf dat moment kende de machine natuurlijk wel een datum. Omdat ik nooit een XT heb gezien, laat staan gebruikt, moet ik maar aannemen dat je moest aangeven bv. 12-5-1981. Als dat klopt verwacht ik niet dat er een ingebouwd bezwaar zou zijn tegen '13-7-2000'. Dat betekent dat die machines in staat waren met gewone datums om te gaan en dat ze dus niet vallen onder de kritiek dat ze het jaar 2000 misverstaan. Wel kunnen er programmeurs geweest zijn die de van het systeem terugontvangen datum met 1900 verminderden. Maar dat is gewoon de traditionele vorm van de softwarefouten, zoals we die ook aan het werk hebben gezien bij de Ariane-5. Dat is dus niet de millennium-bug.
 
Een latere machine van IBM, de AT, heeft een batterij die ervoor zorgt dat er altijd stroom is om een klok te laten lopen. Dat is de zgn. RTC, de real time clock. Dat is software of hardware die vergeleken kan worden met een kilometertellertje met 7 radertjes: één elk voor seconde, minuut, uur, dag, maand en voor jaar-binnen-eeuw. En verder één onbeweegbaar radertje met de waarde 19 voor de eeuw. Dit is de logische structuur; ik praat niet over hoe het er 'werkelijk' uitziet, want dat kan niet schelen. Het eerstgenoemde radertje loopt het snelst, het laatste onbeweegbare radertje loopt natuurlijk niet. Als een radertje een volledige omwenteling heeft gemaakt zet het 't hogere radertje één tandje verder. Het is duidelijk dat het even iets ingewikkelder is omdat bv. het dagtellertje rekening moet houden met de waarde van het, hogere, maandtellertje, maar dat laten we maar rusten. Het is duidelijk dat de klok het jaar 2000 niet aankan: de klok staat weer op 1900.

Tegenwoordig is de AT op een of andere manier zodanig veranderd dat het hoogste radertje met de waarde 19 gewijzigd kan worden tot 20. Vraag mij niet hoe, want dat kan niet schelen. Wilt u weten wat uw eigen computer doet? Gebruik het programma DATE en stel in: jaar 1999, maand 12, dag 31. Gebruik het programma TIME en stel in: uur 23, minuut 59, seconde 30. ENTER en wacht 31 seconden. Gebruik wederom het programma DATE en constateer de nieuwe datum: 1 januari 2000 of , onveranderd, 31 december 1999. Het verschil is dat tussen nieuwe en ouderwetse AT. In het eerste geval kan uw machine zelf nimmer de oorzaak zijn van een zgn. millennium-fout. In het tweede geval moet u de machine uitzetten en weer inschakelen (rebooten noemen ze dat) en weer het programma DATE starten. Wat ziet u? De machine zegt 1 januari 1900. Conclusie: oude AT die vanuit zichzelf ongeschikt is om een zgn. millenniumfout te voorkomen Maar dit feit op zichzelf betekent de millennium-fout niet. Dat komt allemaal nog.
 
Er zijn dus ook nieuwe AT's. Zulke machines gaan correct van 31 december 1999 over naar 1 januari 2000. Die machine blijkt echter haar grens honderd jaar verder te vinden. (Tussen haakjes: als u het voorgaande allemaal goed begrijpt, begrijpt u ook dat de mogelijke fout niets te maken heeft met het millennium maar met de eeuwgrens. Een ander aspect van de hype.) Test uw machine op dezelfde wijze als we zoëven beschreven met "31 december 2099" en u zult zien dat de grens nu dáár ligt. Zoals de oude AT terugkeerde naar 1900, keert de nieuwe AT terug naar 2000. Dat is volkomen logisch als u denkt aan dat hoogste onbeweegbare radertje van de klok. Wanneer u de machine die naar 1 januari 2100 had moeten gaan probeert te laten werken met de programma's die u altijd gebruikt, zult u zien dat er niets bijzonders gebeurt. Waarom niet? Weet die machine veel. Die kan niet beoordelen dat het 'nu' 1 januari 2100 is i.p.v. 1 januari 2000. Iedere computer is uit zichzelf volkomen onverschillig voor zijn eigen datum. Geen enkele machine loopt vast door wat er aan de hand is in de datumklok (Melk-twijfel).

Hierbij nu een algemene opmerking. Een computer, van welk merk dan ook, kan uit zichzelf in beginsel met een datum niets anders doen dan de hier beschreven systemen XT en AT (Melk-twijfel). Van nu af hoef ik wat de machine betreft alleen te spreken over correcte en incorrecte: de correcte zeggen op 1 januari 2000 'het is 1 januari 2000', de incorrecte zeggen 'het is 1 januari 1900'. Niets anders dan dit verschil ligt aan de basis van het hele probleem. Dat is niet anders in een kerncentrale dan in een gewoon computertje dat uw kinderen gebruiken. De toestand zelf van welke machine dan ook heeft wat betreft zijn datum geen enkel gevolg, zolang niet een of ander programma aan die datum een gevolg verbindt. Geen enkel programma dat op welke machine dan ook tot het erop geïnstalleerde systeem behoort trekt welke conclusie dan ook uit de datum (Melk-twijfel). Reeds op dit moment staat vast dat we in verband met het zgn. millennium-probleem niet hoeven te kijken naar machines die zich niet met een datum bezighouden. Niemand kan zich een elektronische rekenmachine voorstellen in een vaatwasser, een lift, een hart-long-machine, een videoapparaat, een thermostaat, een automatische piloot (en vult u maar aan: alle systemen die niet met een menselijke gebruiker communiceren of wel met een menselijke gebruiker communiceren maar niet over een datum) waarbinnen het probleem van een datum wordt gesteld. Wie bij de discussies over het millennium-probleem zulke apparaten betrekt spreekt als een volslagen ondeskundige. Tot op het hoogste niveau (Buitenhof, Witteman, Van Inge en Timmer, NRC, Volkskrant) worden zulke machines genoemd. Trouwens, neem aan dat dat wèl het geval was en dat er in die machines bepaalde conclusies worden getrokken i.v.m. een datum. Eventueel gevaarlijke conclusies, want daarom worden juist al die voorbeelden genoemd. Dan zouden er dus vandaag op zulke plaatsen afwegingen gedaan worden met de eventuele conclusie: veroorzaak nu deze of gene ramp. Dat gelooft u toch zelf niet, ook al kan een programmeur natuurlijk alles.

Wat kan een programma met een datum doen? Vooreerst: die tonen. Dat tonen gebeurt door een of ander programma, een systeemprogramma als DATE of een zgn. gebruikersprogramma. Het gebeurt ook via een of ander medium: de monitor, de printer, een magneetband, een CD, op de harde schijf (dat kunt u alleen bekijken als u weer een ander programma start), op een floppy disk en mogelijk nog andere. Het programma dat voor het 'tonen' zorgt heeft zijn eigen  manier van doen. Het beslist zelf hoe het de datum afbeeldt. Als het om 1 januari 2000 gaat:1-1-2000, 1jan2000, 2000jan1, enzovoort. Daarvoor is geen computer verantwoordelijk maar een programmeur, als u wil: een softwarehuis. (Een instantie met veel machines en waar u geluk hebt als u er nog eens een mens tegenkomt aan de telefoon. En waar soms programma's worden verkocht waarop staat: wij nemen geen enkele verantwoordelijkheid whatsoever voor dit programma als u het gebruikt. Dat moest Organon eens wagen.) Met iets wat afgebeeld is op de printer of de monitor kan alleen nog iets gebeuren door een menselijk wezen. Is het gegeven getoond of afgebeeld op een ander medium, dan kan een computerprogramma daar weer naar kijken en er eventueel mee werken. Dat moeten we even vasthouden.

Dat was het tonen of afbeelden. Wat kan een programma nog meer doen met een datum? Het enig mogelijke zinvolle is: ermee rekenen.Natuurlijk moet men niet denken aan vermenigvuldigen of delen (en zeker niet door 0, meneer Yardeni), en zelfs niet optellen, maar uitsluitend aftrekken. Het enig zinvolle wat met twee (!) datums kan gebeuren is: het verschil berekenen tussen beide om de lengte van een periode te leren kennen (zonder Melk-twijfel). En even ter uitbreiding van een opmerking hierboven: geen enkel programma dat zich niet bezighoudt met lengte van periodes in termen van de kalender komt zelfs maar in aanmerking om gecontroleerd te worden i.v.m. het millennium-probleem. En daarmee raakt dus ook het vliegtuig dat in de nacht van 31 december 1999 in de lucht is uit de gevarenzone (Melk-twijfel, want een programmeur kan alles, whatsoever).

Achter twee heb ik zoëven een uitroepteken geplaatst. Voor het zinvol werken met de datum van de computer (of: met welke datum dan ook) is altijd een tweede datum nodig. En dat kan niet zijn de datum van de computer zelf (die van zijn eigen datum-klok), want de computer heeft maar één datum. (Ik kom daarop terug, omdat er iets aan moet worden toegevoegd). Dat betekent dus noodzakelijk: het programma dat loopt heeft ergens vandaan een tweede datum 'in de hand' en wenst de lengte te weten van de periode tussen deze datum en die van de machine (of eventueel nog weer een andere datum, ook afkomstig van elders, een bestand met afschrijvingen van de giro etc.). Het programma moet bepalen welke van beide datums de laatste in tijd is (zeg A) en rekent dan uit A minus B, de andere datum. En kent zo de lengte van de periode tussen B en A. Als deze berekening niet adequaat is en het wordt veroorzaakt door een incorrecte machine, dan hebben we met het millennium-probleem te doen. En: uitsluitend dan.

Een vraag die zich voordoet vóórdat we de resultaten van de berekening kunnen bekijken is: hoe ziet de datum eruit die niet uit het computersysteem zelf afkomstig is maar uit een of ander bestand? Die kan correct zijn en luiden 2-2-1987 of 3-3-2005. Maar hij kan ook incorrect zijn. Iemand uit een ver verleden kan hebben gedacht "die 19 dat weten we wel" en daarom in het thans gelezen bestand hebben geschreven: 2-2-87. En op een creditkaart kan staan dat hij geldig is tot 31-12-00. (Persoonlijk heb ik op een creditkaart al de ponsing '00' gezien, maar dat zegt natuurlijk niets over de magnetische informatie.)

Hierboven hebben we gezien dat we twee typen computers moeten onderscheiden, correcte en incorrecte. Het verschil was dat de correcte de datum van 1 januari 2000 noemen als 1-1-2000 en de incorrecte als 1-1-1900. Als nà 1999 door een programma aan het systeem gevraagd wordt wat de datum is, krijgt het dus een verkeerde datum terug. Die verkeerde datum kan natuurlijk weer in een bestand geplaatst worden, en als hij later wordt teruggelezen en vergeleken met een andere datum die correct is (niet die van de computer zelf, want die deugt niet!) dan gaat het mis. Ook gaat het mis wanneer correcte datums uit oude bestanden worden vergeleken met de foutieve datum van de incorrecte machine na 1999. Maar het is wel de moeite waard om hierbij het volgende op te merken. Als een computer vandaag gevraagd wordt om zijn datum om die te vergelijken met een datum in een oud gegevens-bestand, dan gaat het ook nu al fout wanneer de datum in dat bestand incorrect is: 10 december 1999 minus 10 december 98 levert 1901 jaren op. Zulke fouten vallen helemaal buiten de zgn. millennium-problematiek. Ze doen zich allang voor en zijn dus allang gecorrigeerd. Natuurlijk kan een programmeur altijd al de datum van de computer hebben verminkt tot 99 (in plaats van 1999), maar over zoiets praten we niet, want iedere programmeur kan altijd al alle onzinnige dingen hebben gedaan.

Samenvattend signaleren we dat er 4 denkbare situaties zijn:

  1. een incorrecte machine - correcte databestanden
  2. een incorrecte machine - incorrecte databestanden
  3. een correcte machine - correcte databestanden
  4. een correcte machine - incorrecte databestanden
Geval 3 herbergt vanzelfsprekend geen gevaren. En het laatste geval valt buiten het probleem omdat het, zoals we gezien hebben, nu al problemen zou geven en dus zeker niet meer voorkomt. Maar ook de gevallen 1. en 2. vallen af. Er is immers geen enkele reden is om te denken dat zulke machines nog ergens in bedrijf zijn. Ik heb er nog nooit een gezien. De oudste PC's die ik heb kunnen vinden gaan allemaal correct naar 2000 toe in plaats van terug te keren naar 1900. (Ook blijven ze allemaal haken bij het jaar 2100. Niemand zal het ons kwalijk nemen als we ons om dat laatste nu nog niet bekommeren (hoewel we ons wel boos maken op de programmeurs die dertig jaar geleden zo dachten over 2000. Bewaar deze krant. Alles wat hier geschreven is zal mutatis mutandis gelden in het jaar 2100.) Als er nog ergens van die oude, incorrecte machines staan zijn het afdankertjes in de scholen. Hoewel, zelfs daar verwacht ik ze niet, want ze zijn zeer zeker ongeschikt om onder de huidige bestuurssystemen te draaien. Ze hebben zeer beperkte harde schijven en zelfs de eenvoudigste computerspelletjes vragen meer faciliteiten dan zij bieden. Voor het millennium-probleem hoeven we er absoluut geen rekening mee te houden: ze komen in geen enkele bedrijfssituatie meer voor (Melk-twijfel).

De conclusie moet zijn: het millennium-probleem bestaat niet (Melk-twijfel). En nou zou u kunnen nagaan of mijn betoog ergens niet klopt. En zeker moet u nog eens nalezen welke onzin Yardeni etaleert in deze krant op maandag 26 oktober 98. En u afvragen hoe het toch kan bestaan dat iemand denkt dat er ergens programma's draaien die zeggen: indien de thans berekende periode wat haar lengte betreft niet voldoet aan deze (of die) eis, stop dan de stroomtoevoer aan het Nederlandse net. En hoe juist zulke mensen de bevoegdheid hebben om te besluiten in het jaar 2000 de stroomimport al bij voorbaat stop te zetten. Nostradamus zou er toch zijn vingers bij aflikken. Had u ook gezien in het programma Buitenhof op zondag 25 oktober 1998 welke moeite Timmer deed om althans hier of daar iets te bedenken dat mogelijk de onzin in het hoofd van de interviewer aan ons oog zou onttrekken? Of begreep hij het zelf niet? Nooit zelf een regel code geschreven zei Vincent Icke in de NRC. Als er een millennium-probleem bestaat wordt het veroorzaakt door schrikreacties van ondeskundigen. Die lopen naar de software-huizen en vragen: weet u zeker dat er niets gebeurt? En krijgen natuurlijk het antwoord: nee, dat weten we niet zeker. Die mensen hebben ook een kostwinning

Jan van Bakel Nijmegen.

Post scriptum.
Deze tekst werd aangeboden aan De Volkskrant, maar die heeft hem geweigerd. Koudwatervrees?