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

11. december 2019 kl. 05:097
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.
Artiklen er ældre end 30 dage
Manglende links i teksten kan sandsynligvis findes i bunden af artiklen.

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.

Artiklen fortsætter efter annoncen

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.

Billede af PL1-kode

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.

Artiklen fortsætter efter annoncen

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

Systemdiagram

Det var ikke kun kildekoden, som skulle transformeres fra PL/1 til C# for at få det færøske skattesystem til at køre på Windows. Der skete også en konvertering af DB2 til SQL Server.

Det omliggende runtime-miljø og services som CICS og JCL til batchkørsler skulle også flyttes over på Windows. Det er ikke en fuldstændig CICS-version, der kører på Windows, men kun de CICS-services, som PL/1-programmerne anvendte.

BaseELK er PL/1-datatyper og strukturer implementeret i C#.

ELKSecurity er en erstatning for CA's Top Secret mainframe-sikkerhedssystem, som minder lidt om RACF.

NeoBatch og JAMS er to standardprodukter, der håndterer batchjobs på Windows, som JCL og CA Scheduler gjorde på mainframen.

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.

Artiklen fortsætter efter annoncen

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.

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.

7 kommentarer.  Hop til debatten
Denne artikel er gratis...

...men det er dyrt at lave god journalistik. Derfor beder vi dig overveje at tegne abonnement på Version2.

Digitaliseringen buldrer derudaf, og it-folkene tegner fremtidens Danmark. Derfor er det vigtigere end nogensinde med et kvalificeret bud på, hvordan it bedst kan være med til at udvikle det danske samfund og erhvervsliv.

Og der har aldrig været mere akut brug for en kritisk vagthund, der råber op, når der tages forkerte it-beslutninger.

Den rolle har Version2 indtaget siden 2006 - og det bliver vi ved med.

Debatten
Log ind eller opret en bruger for at deltage i debatten.
settingsDebatindstillinger
7
16. december 2019 kl. 09:11

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.

6
12. december 2019 kl. 15:56

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.

5
12. december 2019 kl. 13:15

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

4
12. december 2019 kl. 12:36

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?

3
12. december 2019 kl. 10:02

valget af den nye platform?

Jeg tror det var en fordel at vælge C# fremfor fx Mono. Men det burde have været muligt at vælge postgresql i stedet for MS-SQL.

2
11. december 2019 kl. 21:09

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

1
11. december 2019 kl. 17:17

+10 herfra til både Alfred Joensen og resten af holdet.