For ikke lenge siden falt et spennende brev ned i e-postboksen til kode24, fra NAV:"Vi har gravd frem kildekoden til et av de eldste datasystemene til NAV. Det er på ca. 291.000 linjer og er skrevet i språket PL/I, tanken er å open-source, slik at folk kan få et innblikk i norsk IT-historie. Er dere interessert?", lød e-posten fra NAV-utvikler Eirik Sletteberg.Det er klart vi var interessert.Få minutter etter satt vi med kildekoden til Det Sentrale Folketrygdsystemet i Github-en vår, og en haug med spørsmål.Kunne fort gått taptDet Sentrale Folketrygdsystemet, eller DSF som NAV-ansatte kaller det, er ikke akkurat en lettvekter kodemessig.Systemet består av over 291.000 linjer med kode, skrevet i det nå obskure språket PL/I, fra IBM. Startskuddet gikk helt tilbake i 1967, og den første dokumenterte kodeendringer som fortsatt befinner seg i systemet er fra 1981.- Systemet kjørte i produksjon i NAV frem til januar 2018, da ble det erstattet med nye systemer, forteller 31-år gamle Eirik Sletteberg, som til vanlig jobber som fullstack-utvikler, blant annet på NAV-sin Kubernetes-plattform nais.Sletteberg forteller at de har en del legacy-kode i NAV. Systemer som sakte men sikkert blir oppdatert gjennom generasjoner.- DSF var blant de eldste applikasjonene vi hadde. I tillegg har vi også stormaskin-applikasjonen Infotrygd. Den er skrevet i COBOL, og blir videreutviklet og kjører i produksjon den dag i dag, sier Sletteberg til kode24.- Dette er kildekode som fort kunne gått tapt, som oftest ønsker man jo å bli kvitt gammel legacy-kode.- PL/I-kode er sjelden vare, og mye av det som finnes er nok proprietær kode, som enten råtner på en gammel backup-harddisk, eller som er borte for alltid. Ingen tenker over at dette er noe som kan være interessant å ta vare på for ettertiden, messer han.Nå eller aldri- Vi gravde frem koden fordi vi skjønte at det er nå eller aldri. Det er veldig få personer igjen i NAV som har noen form for kjennskap til DSF; jeg har selv aldri jobbet med det.Sletteberg forteller at de satt i gang å saumfare koden, på jakt etter noen som visste mer om systemet.Og etter mye frem og tilbake, kom Sletteberg i kontakt med 42 år gamle Magnus Lie som jobber som teamleder på NAV sitt Datavarehus, men som faktisk hadde hovedansvar for drifting av DSF den siste perioden det var aktivt.Lie forteller at han har jobbet i Rikstrygdeverket og NAV siden 1998, blant annet med applikasjonsdrift, schedulering, testing og automatisering i Rikstrygdeverket og NAV sine kjernesystemer.- I begynnelsen var det primært applikasjoner på IBM-stormaskin, hvor DSF var et av disse systemene. Noen av de andre systemene var kjerneregisterne til NAV som Arbeidsgiver og Arbeidstagerregisteret (AAreg), Tjenestebasert Persondata System (TPS), Tjenestebasert Samhandlingssystem (TSS) og NAV sitt Folkeregister (FR), forklarer Lie.Unge utviklere på 60-talletLie forteller at DSF var den eldste applikasjonen de hadde i drift, da han jobbet med den. Den ble laget for å oppfylle kravene fra Lov om Folketrygd, som skulle gjelde fra 1. januar 1967.- Utviklingen av DSF startet før Rikstrygdeverket fikk sin første IBM System/360 mainframe i desember 1966, av en gruppe på rundt 30 unge utviklere i begynnelsen av 20-årene. De aller fleste var ansatte i Rikstrygdeverket, men med noen få konsulenter fra IBM, forklarer Lie.- Inntil Rikstrygdeverket hadde sin egen maskin måtte kode sendes til IBM for å bli kjørt og testet. Maskinen hadde 64KB RAM, og noen av de største programmene var for store, slik at man måtte lese inn én tredjedel av programmet om gangen. Dette gav utfordringer i forhold til debugging da det ikke alltid var åpenbart i hvilken tredjedel av programmet feilen lå i.Til tross for utfordringene gikk DSF i produksjon allerede i mai 1966. 20-åringene klarte det!Hver måned etter, i over 50 år, kjørte DSF flittig batch-jobber som beregnet og betalte ut pensjon til alle pensjonister i Norge, og leste ajourføringer fra saksbehandler, som jobbet mot DSF via et terminal-basert GUI.Klare for år 2000Den er et merkelig skue, kildekoden til DSF.Koden består av en haug med filer, 719 for å være nøyaktig. Alle er kryptisk nummerert i rekkefølge, R0011101 og så videre. Og alle slutter med .pli, navnet på programmeringsspråket som blir brukt.De rare filnavnene forklarer utvikler Sletteberg er et valg de tok da de trakk ut filene fra de gamle versjonskontroll-systemene.- På den tiden var jo ikke Git oppfunnet , så versjonskontrollsystemet de brukte var LCM (Life Cycle Manager) fra Allen Systems. Dette bruker de forøvrig fortsatt i dag, utviklerne som jobber på Infotrygd, forklarer Sletteberg.- Filsystemet på IBM Mainframe har kun støtte for åtte karakterers filnavn. IBM Mainframe bruker EBCDIC som tegnsett. Da jeg hentet ut filene, konverterte jeg dem fra EBCDIC til ISO8859-1, forklarer Lie.Inne i selve filene er ting mer gjenkjennelig. Det er funksjoner, løkker, variabler og kommentarer, gjerne i en salig blanding av norsk og engelsk. Koden er virkelig en skattekiste av programmeringshistorikk, hvis man tar seg tid til å se seg om.Slik som kommentaren i utdraget over, som forteller at Geir har skrevet koden, i 1981.Sletteberg forteller at det mest spennende de har funnet i koden foreløpig er hvordan DSF skulle håndtere år 2000-problematikken.- NAV var blant organisasjonene som sikkert hadde høy puls nyttårsaften i 1999. Det ble gjort en del patching i DSF for å støtte dette, og visstnok så skapte ikke overgangen noen store problemer, humrer han.- Rikstrygdeverket var veldig tungt inne i Y2K problematikken. Det ble gjort mye endringer for å sørge for at alle datofelter på 2 byte ble utvidet til 4 byte, forklarer Lie.- Høsten 1999 ble det plassert ut en stor container med dieselaggregat på utsiden av bygget der vi hadde datahall i Amtmann Meinichsgate 15 på Sandaker. Det var for å sørge for at det skulle være nok strøm tilgjengelig til datahallen og kontorlokalene i bygget, dersom strømmen skulle forsvinne fra 1. januar 2000.Dyr regning satt strekDSF klarte seg altså greit gjennom Y2K. Faktisk holdt det koken i nesten 20 år til.I september 2008 tok riktig nok et annet system over driften, men DSF ble holdt i gang på grunn av historisk data. Det var ikke før i 2018 at DSF ble lagt helt ned.Sletteberg forteller at NAV tradisjonelt ikke har hatt mye fokus på å skru av gamle systemer. Derfor er det ikke så rart at systemet fikk kjøre så lenge som det gjorde.- Man lar det bare snurre og gå. De siste årene har det blitt mer bevissthet rundt det, men gamle systemer forsvinner jo ikke av seg selv. Man må gjøre en aktiv innsats for å migrere seg bort fra dem, forklarer Sletteberg.Driftsjef Lie utdyper hva som faktisk førte til at DSF måtte legges ned:Det kom en regning fra IBM - lisenskostnad for å få lov til å kjøre PL/I-koden. Det var nok spikeren i kista for DSF. Da var det billigere for NAV å lage systemet Presys, som er en Java-omskrivning av de få delene av DSF som fortsatt var i bruk.- Det var ingen utviklere med kjennskap til DSF igjen i NAV. Så de måtte hente tilbake en av dem, Trude Sponberg, slik at hun kunne hjelpe til med omskrivingen, forklarer han.Åpen for alleOg om du klør etter å ta en titt for deg selv, har du flaks. NAV har bestemt seg for å gjøre koden åpen, fra kode24s artikkel blir publisert i dag.Dermed kan du bade i over 700 filer med norsk kodehistorie på https://github.com/navikt/DSF/.- Koden har nok først og fremst historisk interesse. Det er jo spennende å se hvordan man gjorde ting før! Mange griner fort på nesa av å se gammel kode, men det her har jo kjørt i produksjon i mange år, og gjort en solid, viktig jobb, forteller Sletteberg.Han mener vi bør ha litt respekt for disse gamle systemene.- Kanskje det finnes noen nerder der ute som henter frem en PL/I-kompilator og prøver å kjøre koden?, spekulerer han.- Programvare er en essensiell del av moderne historie. Norge har kanskje ikke sendt romfarere til månen, men vi har vært blant verdens beste velferdsstater, og det er koden i DSF og Infotrygd som har holdt hjulene i gang!