Skattesystem omlægges fra PL/1 på mainframe til C# på Windows

Illustration: Elektron
Et lille team af færinger skrev en PL/1 til C#-transformer plus andre småting som CICS til Windows og andre nødvendige mainframekomponenter, så Færøerne kunne migrere skattesystem væk fra mainframen.

Alfred Joensen var hårdt presset.

Han havde anbefalet det færøske skattevæsen, Taks, og hostingselskabet Elektron at flytte det eksisterende mainframebaserede skattesystem over til en Windows-platform ved hjælp af Raincode, der kompilerede PL/1-kode til .NET-bytecode.

Efter knap to år blev migreringsprojektet stoppet. Der var for mange forhindringer og ingen udsigt til, at migreringen kunne blive færdig.

Der var stor politisk bevågenhed på projektet, som også var kommet på den færøske finanslov.

Situationen var kritisk. Elektron var strandet på en mainframe, hvor licenspriserne steg betragteligt, og den færøske samfundsøkonomi var stadig dybt afhængig af syv-otte mainframeudviklere, hvoraf hovedparten var over 60 år og nærmede sig pensionsalderen med hastige skridt.

Hos Taks undrede medarbejderne sig over, at deres systemer efter et it-projekt af næsten to års varighed stadig var uforandrede.

Hands-on CEO

Billede af C#-koden. Bemærk datatyperne i C#, der er de samme som i PL/1-programmet. Illustration: D. Mygind
Billede af PL1-kode Illustration: D. Mygind

Som CEO for softwarehuset NES Tech skulle Alfred Joensen egentlig koncentrere sig om udviklingen af pensionssystemer, men hans samvittighed, ære og færøske nationalfølelse bød ham at finde en vej ud af en situation, som han følte sig ansvarlig for.

Derfor kom han på den idé selv at udvikle de nødvendige værktøjer, så PL/1-koden kunne køre på Windows. Han gik grundigt til værks, da han ikke ville stå med endnu et strandet projekt som følge af sine anbefalinger.

»Det skulle ikke være en hovsa-løsning, så vi undersøgte det grundigt,« siger Alfred Joensen, da Version2 møder ham i NES Techs kontorlokaler på Sankt Annæ Plads i København.

Alfred Joensen er en meget hands-on CEO, selvom han underspiller sin rolle i projektet, som trods kriser blev en succes.

»Jeg lavede ikke så meget af koden, men var med til at føde ideerne.«

En lille kernegruppe

Alfred Joensen sammensatte et lille team af udviklere som han vidste var teknisk kompetente. Kernegruppen var kun på fire personer, hvilket er i overensstemmelse med Alfred Joensens syn på softwareudvikling.

»Vores filosofi er, at du finder de rigtige folk til et projekt. Jeg har arbejdet som konsulent hos virksomheder, hvor der er masser af konsulenter fra systemleverandøren, nogle fra udlandet plus alle mulige freelance-konsulenter og dertil virksomhedens egen organisation. Der løber måske 100 mand rundt og træder hinanden over tæerne,« siger Alfred Joensen, der betegner Fred Brooks' bog 'The Mythical Man Month' som en bibel.

Foruden Alfred Joensen selv bestod teamet af Tórur Strøm, der har en ph.d. i optimering af mikroprocessorer, C#-udvikleren Torbjørn Lisberg og en nu pensioneret PL/1-udvikler Torsten Krogsgaard, der også havde programmeret i Java og C#.

Projektet kunne ikke være fuldført uden en lang række andre personer, som vi støder ind i senere i fortællingen, men for at få udviklet de grundlæggende værktøjer var det essentielt med en lille agil udviklergruppe.

PL/1 til C

Første forsøg på at migrere væk fra mainframen var strandet, fordi det gav problemer at kompilere PL/1 direkte til .NET-bytecode. Det lille team valgte at transformere PL/1 til C#-kildekode i stedet for.

Det gjorde det nemmere at håndtere eksempelvis de mange CICS-kald, som PL/1-programmerne gjorde brug af.

Det betød også, at systemernes videreudvikling var fremtidssikret, da udviklingen fremover ville foregå i C# og ikke i PL/1, som Raincode-løsningen krævede.

Læs også: Sådan migrerede Færøerne væk fra mainframen

Torbjørn Lisberg fik hovedansvaret for udviklingen af en PL/1 til C#-transformer, som blev navngivet P2C, Tórur Strøm fik ansvaret for udviklingen af CTS (CICS Transaction Server) på Windows og Torsten Krogsgaard fik ansvaret for Base, som implementerer PL/1-datatyper og strukturer i C#.

»Vi arbejdede godt sammen som et team, vi havde et hovedansvar, men vi hjalp hinanden meget,« siger Torbjørn Lisberg.

Teamet var også agilt i den oprindelige betydning, at det tilpassede sig omstændighederne for at få noget velfungerende kode.

»Da vi startede helt oprindeligt, havde vi regnet med, at vi ville lave optimal C#-kode, men vi fandt ud af, at vi blev nødt til emulere noget af det, som kørte på mainframe,« forklarer Torbjørn Lisberg.

Det betød blandt andet, at PL/1 datastrukturer og datatyper blev implementeret i C# ved hjælp af Torsten Krogsgaards Base.

»C#-koden minder lidt om PL/1, da datastrukturerne er de samme. Vi kalder det P#. Det er C#, men det er skrevet ud fra en bestemt arkitektur, hvilket har gjort det nemmere for PL/1-programmørerne at flytte over til C#,« forklarer Torbjørn Lisberg, og han fremhæver Torsten Krogsgaard som en væsentlig årsag til, at projektet lykkedes.

»Torsten var meget involveret i udviklingen af datastrukturer og stod for mapningen af mainframe memory-modellen til en objektorienteret memory-model. Han skrev et softwarelag, så memory kunne behandles ligesom memory på mainframe. Det er ikke for nybegyndere, men han havde også arbejdet med mainframe i 20 år og .NET i 20 år.«

CICS til Windows

Tórur Strøm tog sig som nævnt af at udvikle CICS til Windows. Det kan lyde voldsomt, men han implementerede kun de CICS-features, som blev anvendt af PL/1-programmerne.

»Vi kiggede på, hvad var der brug for, og vi har ikke anvendt alle CICS-features. Vi lavede et automatisk gennemløb af de 40-50.000 filer og fandt frem til, hvilke CICS-features vi skulle implementere,« siger Tórur Strøm.

Der var blandt andet behov for at skrive til 3270-terminalerne, som er brugergrænsefladen til Taks-systemerne. For at undgå at introducere for mange ubekendte faktorer i projektet var det besluttet at beholde den eksisterende brugergrænseflade.

Her stod Tórur Strøm for at udvikle den nødvendige kode, der kunne håndtere eksempelvis en EXEC CICS SEND, der sender data til 3270-terminalerne.

Proof-of-concept til bestyrelsen

Den lille gruppe arbejdede koncentreret og målrettet – og længe. Torbjørn Lisberg ved ikke præcist, hvor mange timer han lagde i projektet, men der var en del nætter, hvor klokken blev 3 om natten, inden han kom i seng.

Version2's udsendte journalist antager derfor fejlagtigt, at han ikke havde nogen familiemæssige forpligtigelser som kone eller børn.

»Jo, på det tidspunkt havde jeg små tvillinger.«

I løbet af tre-fire måneder får det lille team udviklet de nødvendige komponenter og et lille proof-of-concept, der giver dem nok tro på, at det store projekt kan blive gennemført.

De demonstrerede, hvordan et transformeret PL/1-program kunne køre som et C#-program på en Windows-server og generere et 3270-skærmbillede, modtage brugerinput, lave en forespørgsel mod en SQL Server og sende de fundne data tilbage til 3270-terminalen.

»Vi havde en simpel version af en komponent, der kunne kommunikere med 3270 og en simpel version af transformeren. Vi viste, at det var muligt at slå en person op i systemet,« siger Torbjørn Lisberg.

Han suppleres af Tórur Strøm:

»Jeg havde fået lavet kommunikationen med terminalen. Når man er tekniker og ved, hvad der sker underliggende, så tror man på, at det kan lade sig gøre. Jeg lavede selv nogle små PL/1 til C#-konverteringer og nogle få CICS-kald, og jeg kunne se, at det kunne lade sig gøre, hvis man vidste, hvad man lavede. Det kan være, at vi undervurderede scopet, men vi var overbeviste om, at projektet kunne lykkes.«

Efter præsentationen af proof-of-concept giver Elektrons bestyrelse grønt lys til at gå i gang med migreringsprojektet igen. Denne gang med de egenudviklede komponenter.

Følelsen af at have fuld kontrol over softwaren er afgørende for teamet. Udfordringerne var dog langtfra overstået. De var først lige startet for migreringsprojektet, som blev omdøbt til 'migræneprojektet' undervejs.

Som Torbjørn Lisberg formulerer det:

»Hvis vi havde vidst alt, hvad vi ved i dag, da vi gik i gang, så ville vi nok ikke være gået i gang.«

Fortællingen om den færøske mainframe-migrering fortsætter i en kommende artikel, hvor du blandt andet kan læse om timestamp-problemer og nyfødte, der ødelægger data ved en prøvemigrering.

Tips og korrekturforslag til denne historie sendes til tip@version2.dk
Følg forløbet
Kommentarer (7)
sortSortér kommentarer
  • Ældste først
  • Nyeste først
  • Bedste først
Sune Marcher

Det kunne være interessant at høre hvilke overvejelser de har gjort sig, om valget af den nye platform?

Specielt eftersom den store grund til at smutte fra mainframen var licenskomkostninger — licensmæssigt kunne det være "noget billigere" med Linux + JVM (Kotlin, Scala, whatever) + Postgres fremfor Microsoft.

Var det grundet personlige erfaringer med de forskellige miljøer, overvejelser om fremtidig rekruttering, eller nogle bestemte tekniske finurligheder om performance eller integrationer?

  • 0
  • 0
Sune Marcher

Nu er der ikke meget licens omkostninger i C# og desuden hvis de bruger .NET Core så kan de lave det på Linux.

Som jeg har forstået det kører de på Windows og med MSSQL, og der bliver ikke nævnt Core nogetsteds.

Det kunne også være interessant at høre om de har holdt sig i nærheden af Core feature-sættet, og om der er non-Core eller Windows-specifikke ting de har brug for i dele af løsningen der ligger udenfor C#/.NET.

  • 0
  • 0
Michael Cederberg

Det kunne også være interessant at høre om de har holdt sig i nærheden af Core feature-sættet, og om der er non-Core eller Windows-specifikke ting de har brug for i dele af løsningen der ligger udenfor C#/.NET.

Det her er server software. Hvis blot de bruger SQL Server som en "dum" database så er deres kode relativt nem at flytte. Problemet for deres eksisterende system er at det er skrevet i PL/1 til at køre på en mainframe for 40 år siden. Den slags systemer er svære at flytte uden at skulle skrive det hele om. Af samme grund er jeg også skeptisk over hvorvidt den konverterede kode kan vedligeholdes.

For server applikationer ligner Windows og Linux hinanden tilstrækkeligt meget til at det ikke er noget stort problem at flytte kode fra den ene platform til den anden. Så længe man blot bruger SQL, CPU, Filesystem og netværk. Det synes at være relativt nemt når man kommer fra en mainframe.

  • 0
  • 0
Log ind eller Opret konto for at kommentere