Overslaan en naar de inhoud gaan

Waarom Torvalds met Linux overstapt op oude programmeerstandaard

De Linux-core schakelt binnenkort over naar een modernere versie van programmeertaal C. Maar niet de nieuwste. Sterker nog: eigenlijk best wel een oude. Hoe belangrijk is het om in eigen organisaties de laatste standaarden aan te houden bij softwareontwikkeling? AG Connect vroeg het een paar kwaliteitsexperts.
Torvalds
© CC BY 2.0 - Flickr
CC BY 2.0 - Flickr

Linus Torvalds is akkoord dat voor het werk aan de Linux-core wordt overgeschakeld van de C89-standaard uit 1989(!), naar de C11-standaard van programmeertaal C die stamt uit 2011. En dat terwijl er ook in 2017 een nieuwe standaard C17 is uitgebracht en er nu over C23 wordt gedebatteerd. De standaarden zijn tot nog toe steeds compatibel geweest met de oudste versie. De nieuwere standaarden brengen wel meer veiligheid en nieuwe functionaliteit.

Zo'n versieproblematiek is niet alleen bij programmeertaal C aan de orde, zegt Jurgen Vinju, hoofd van de groep Software Analysis & Transformation (SWAT) bij het Centrum Wiskunde & Informatica (CWI) en hoogleraar automated software analysis aan de TU Eindhoven. Bij het ophogen van Java 8 naar 8, 11, 13, en 17 bijvoorbeeld, hebben organisaties net zo goed te maken met een aantal overeenkomstige uitdagingen.

Weet wat je gebruikt

Het allerbelangrijkste is volgens Vinju, dat een organisatie precies weet welke compiler en welke versie wordt gebruikt. "Voor elke nieuwe versie zijn er bekende wijzigingen in het gedrag van een compiler en onbekende; het zijn de 'unknown unknowns' die vaak de meeste schade opleveren. Dan is er nog het verschil tussen gedrag dat 'binnen de standaard' verandert en gedrag dat verandert tussen de standaarden. C is notoir in het toelaten van allerlei optimalisaties die gedrag van code veranderen."

Overstappen naar een andere compiler, brengt dus altijd de nodige risico's met zich mee. "Overstappen naar de laatste versie is altijd aan te bevelen mits de risico’s te overzien zijn en de voordelen opwegen tegen de nadelen", stelt Mohammed Bakkar, Senior Technical Consultant bij de Software Improvement Group (SIG). "We zien genoeg organisaties die nog ergens een systeem hebben met Basic of Pascal. De voornaamste reden daarvoor is: angst voor breaking changes en geen mogelijkheden om regressietests te draaien."

Testen, testen, testen

Eigenlijk blijkt hier weer dat bij het ontwikkelen van software het tegelijkertijd ontwikkelen van uitgebreide testsets minstens zo belangrijk is. Vinju: " Als je al weet dat je testset niet toereikend is, dan is dat een geweldige reden om niet altijd de laatste versie te gebruiken." Vervolgens ontstaat dan het probleem dat hoe langer je achterblijft bij de ontwikkeling, hoe hoger de kosten om de achterstand weer in te halen. "Een grote versie-jump in een compiler, bijvoorbeeld naar een nieuwe standaard, kan ook allerlei 'collateral damage' met zich meebrengen in veranderd gedrag 'binnen de spec', waar je oude code toevallig wél van afhing."

Dan is het van belang voor een versiewijziging eerst ook de kwaliteit van de testset in kaart te brengen, bijvoorbeeld met 'mutation testing'. Dan worden steeds kleine wijzigingen in de software aangebracht en wordt bepaald hoe goed de tests deze mutaties opsporen.

Geen bochten afsnijden

"Als je al een paar versies achterloopt dan is het bijzonder onverstandig om de tussenliggende versies over te slaan tijdens een inhaalslag. Je komt daarmee namelijk op onbekend terrein, dat ook niet door de makers is verkend, maar ook niet door je collega's in het veld." De enige constructieve manier is, denkt Vinju, om versie-voor-versie, stap-voor-stap op te hogen. Daarbij komen nieuwe problemen naar boven. Daarvoor moeten nieuwe tests komen. "Vervolgens moeten de problemen worden opgelost en pas dan kun je weer verder gaan."

Hoewel de kosten daardoor hoog zijn, denken zowel Bakkar als Vinju dat het vaak wel zin heeft omdat de voordelen van upgraden opwegen tegen de nadelen. Vinju: "De nieuwe compilers zijn vaak beter in het genereren van snelle code voor de huidige hardware, en ze zijn bruikbaarder omdat foutmeldingen zijn verbeterd en/of aangescherpt."

Begrip voor Torvalds

Bakkar heeft toch wel begrip voor de keuze van Torvalds. "De code van de Linux-kernel is zelf niet van hoogwaardige kwaliteit, maar het doet goed wat het moet doen. De overweging om aan C89 vast te houden voor Torvalds is dat dit de de facto standaard was (ANSI C) toen de eerste kernel werd geschreven. De wijzigingen in C99 of de versies daarna werden niet zo belangrijk of voordelig geacht om over te stappen." En dat hoefde ook niet omdat de C-compilers over het algemeen backwards compatible zijn met de optie om voor de ene of de andere versie te compileren. "Er is dus geen echte dwang om het te doen." Vinju kan ook wel meevoelen met Torvalds: "Linus is met recht zeer voorzichtig geweest vanwege de enorme verantwoordelijkheid die komt met een enorme user base van deze code. Elke onvoorziene nieuwe bug kan zijn gebruikers enorme schade toebrengen."

Reacties

Om een reactie achter te laten is een account vereist.

Inloggen Word abonnee

Bevestig jouw e-mailadres

We hebben de bevestigingsmail naar %email% gestuurd.

Geen bevestigingsmail ontvangen? Controleer je spam folder. Niet in de spam, klik dan hier om een account aan te maken.

Er is iets mis gegaan

Helaas konden we op dit moment geen account voor je aanmaken. Probeer het later nog eens.

Maak een gratis account aan en geniet van alle voordelen:

Heb je al een account? Log in

Maak een gratis account aan en geniet van alle voordelen:

Heb je al een account? Log in