Stabiele driverinterfaces zijn onzin
‘Stable API Nonsense’ is de naam van een bestand bij de Linux-kerneldocumentatie waarin de ontwikkelaars aangeven waarom ze stabiele driverinterfaces onzin vinden. De korte en ongenuanceerde versie: het maakt het ontwikkelen en het onderhoud veel makkelijker om drivers en de rest van de kernel samen te duwen in één broncode-boom zonder stabiele driver-API’s (Application Programming Interfaces) te hoeven onderhouden.
De al wat oudere tekst is grotendeels geschreven door Greg Kroah-Hartman, momenteel de op één na belangrijkste Linux-ontwikkelaar. Hij stelt dat de Linux-kernel zich in een enorm tempo ontwikkelt en dat er voortdurend bugs en veiligheidsgaten worden gevonden – ook in de interfaces waar de kernel-drivers met andere delen van de kernel communiceren. Ontwikkelaars kunnen dergelijke dingen in een mum van tijd corrigeren, omdat ze de drivers en koppelpunten tegelijkertijd kunnen aanpassen zonder rekening te hoeven houden met compatibiliteit.
Zelfs vergaande reparaties en verbeteringen kunnen hierdoor snel worden uitgevoerd. Dat is meerdere malen nodig geweest bij de USB-stack: een keer om van een vervelend prestatieprobleem af te komen, en meerdere keren om de code aan te passen aan de eisen van een nieuwe usb-versie.
Zolang er geen onzorgvuldige fouten worden gemaakt, zullen gebruikers het niet merken. Ze krijgen gewoon verbeteringen bij een nieuwe kernel die anders een verbeterde of nieuwe driver-API zouden vereisen. Dan hadden ze misschien pas maanden of jaren later van de verbeteringen geprofiteerd, als de makers van externe drivers die hadden aangepast en verspreid.
De gekozen aanpak maakt het ook makkelijker om snel en effectief beveiligingslekken te verhelpen die soms inherent zijn aan het ontwerp van programmeerinterfaces. In elk geval is alleen een stabiele API niet voldoende om ervoor te zorgen dat fabrikanten hun drivers op zo’n manier aanbieden dat ze werken met het merendeel van huidige en toekomstige Linuxdistributies.
Dat komt omdat de kernel niet alleen een API mist, maar ook een ABI (Application Binary Interface) voor drivers. Zelfs met een stabiele API zouden hardwarefabrikanten hun drivers individueel moeten compileren voor elke distributiekernel. Dat zou enorm veel tijd in beslag nemen en ontwikkelaars volgens Kroah-Hartman al snel tot waanzin drijven, zoals hij zelf heeft moeten ervaren.
De tekst die is opgeslagen onder ‘Documentation / process / stableapi-nonsense.rst’ geeft verdere details en noemt andere redenen, zoals efficiënter testen – omdat men niet talloze mogelijke combinaties van drivers en kernelversies hoeft te testen. De argumenten zullen niet iedereen meteen overtuigen. Maar hoe meer je leert over Linux, des te meer je wellicht de voordelen ziet van het in Linux gebruikte model.
Hoe je er ook over denkt, één ding is duidelijk: Linux heeft de afgelopen dertig jaar veel terreinen veroverd en domineert sommige zelfs. Volgens de kernelontwikkelaars is dat mede te danken aan de keuze om kernel- en drivercode bij elkaar te houden en het te doen zonder een stabiele stuurprogramma-API.