Door Anoniem: Door Anoniem: De meeste van dit soort fouten komen voor bij een gebrek aan programmeerdiscipline. En het is onvermijdelijk dat het gebeurt omdat mensen soms fouten maken en de kernel bijzonder complex is. Een taal als Rust helpt met het opleggen van de discipline. En men is al bezig om Rust te gaan gebruiken in de Linux kernel.
Je slaat in mijn ogen de plank mis als je alles tot discipline reduceert, of misschien noem jij iets discipline dat voor mij geen discipline is omdat het over de grenzen gaat van wat een mens kan. Ik kan bijvoorbeeld niet vanaf het parkeerterrein op mijn balkon springen, drie etages omhoog, als ik maar genoeg discipline heb. Zo hoog kan ik domweg niet springen, althans niet zonder hulpmiddelen (waarmee ik het nog niet zou durven ;-) ).
Rust bevat hulpmiddelen om bepaalde categorieën fouten af te vangen, en de extra discipline die je nodig hebt om Rust te gebruiken komt voort uit het feit dat Rust door die hulpmiddelen zelf een complexer hulpmiddel is geworden dan talen die daar niet in voorzien. Je springt echt niet opeens twee keer zo hoog als de wereldkampioen omdat je discipline geweldig is. Met een geschikt hulpmiddel lukt dat wel. Hulpmiddelen zijn iets anders dan discipline, al kan je discipline nodig hebben om een hulpmiddel goed te gebruiken.
Dat er iets verkeerd is gedaan om deze fout in de code te doen belanden is natuurlijk evident, maar het is een fout die kennelijk zo moeilijk te herkennen was dat die door meerdere mensen niet is gezien (want het ontwikkelproces van de Linux-kernel is sterk gericht op code reviews, je komt er niet zomaar ongezien doorheen) en vervolgens jarenlang niet is opgemerkt. Dan is het knap waarschijnlijk dat die fout niet door gebrek aan discipline erin is geslopen maar door die grenzen aan wat mensen nou eenmaal nog weten te overzien.
In dit geval was het niet met de discipline die het hulpmiddel Rust oplegt te voorkomen. Het was een fout in de berekening, die is onstaan door het patchen van een ander probleem, en later gefixed, beide onder het Github account van Torvalds.
https://kimmo.cloud/ipv6_frag_escape/#how-the-exploitation-chain-worksJe kunt hem moeilijk een gebrek aan discipline verwijten, de materie zelf is simpelweg ontzettend complex.
Dat andere ontwikkelaars het ook niet hebben opgemerkt maakt wel dat je je kunt afvragen of de code zelf niet duidelijker kan. Omdat het is geschreven in C staat het vol met goto commando's. Dan moet je als ontwikkelaar wel de concentratieboog vol kunnen houden (discipline) om dat elke keer te blijven volgen.
Maar ik vermoed dat men niet van C wil wijken vanwege de code size, performance en de mate van controle die C geeft, maar dan moet je inderdaad zoveel borden in de lucht houden dat het eigenlijk niet vol te houden is.
Overigens deel ik niet de mening dat Rust extra discipline kost. Wanneer een programmeur zijn ego opzij werkt het borrow checker systeem juist enorm in het voordeel, het leidt tot kwalitatief betere software waarvoor uiteindelijk minder discipline nodig is van de programmeur.