Linus Torvalds forbereder sig på at flytte Linux-kernen til moderne C

0
125

Steven Vaughan-NicholsSkrevet af Steven Vaughan-Nichols, senior bidragydende redaktør Steven Vaughan-Nichols Steven Vaughan-Nichols Senior bidragende redaktør

Steven J. Vaughan-Nichols, aka sjvn, har skrevet om teknologi og teknologiens forretning siden CP /M-80 var banebrydende, pc-operativsystem; 300bps var en hurtig internetforbindelse; WordStar var den nyeste tekstbehandler; og vi kunne lide det.

Fuld bio Udgivet i Linux og Open Source den 25. februar 2022 | Emne: Enterprise Software

Vi ved alle, at Linux er skrevet i C. Hvad du måske ikke ved, er, at det er skrevet på en forældet C-dialekt: 1989-versionen af ​​C-sprogstandarden, C89. Dette er også kendt som ANSI X3.159-1989, eller ANSI C. Linus Torvalds har besluttet, at nok er nok og vil flytte Linuxs officielle C til 2011's C11-standard.

Dette er ikke så stor en overgang, som det kan se ud. C89 har stadig næsten universel understøttelse. Fordi enhver C-kompiler er bagudkompatibel med tidligere versioner, vil du ikke have nogen problemer med at kompilere eller køre et C89-program. Så en C11-kompatibel compiler vil ikke have nogen problemer med nogen C89-legacy-kode.

Så hvorfor gider det? Ændringen, der foretages, inkluderer ikke nyttige funktioner, der vises i nyere versioner.

Situationen kom til Torvalds opmærksomhed, da et andet problem blev afsløret i patchen for at rette et potentielt sikkerhedsproblem med kernens primitive spekulative-udførelsesfunktioner med linkede liste. Mens han fikse dette, indså Torvalds, at i C99 skal iteratoren, der er overført til listegennemløbsmakroerne, erklæres i et omfang uden for selve loopet.

Torvalds skrev til Linux Kernel Mailing List (LKML), at “hele grunden til, at denne form for ikke-spekulativ fejl kan ske, er, at vi historisk ikke har haft C99-stil 'deklarationsvariabler i sløjfer.” Så list_for_each_entry() – og alle de andre – lækker grundlæggende altid den sidste HEAD-indgang ud af løkken, simpelthen fordi vi ikke kunne erklære iteratorvariablen i selve løkken.”

Svaret? Endelig , flyt fra C89 til en nyere standard C, der gør, at denne form for problemer ikke kan opstå. Så “tiden var inde til at se på at flytte til C99-standarden – den er stadig over 20 år gammel, men er i det mindste ny nok for at tillade variabeldeklarationer på blokniveau.”

Linux-kerneudvikler, Arnd Bergmann, var enig i, at dette kunne lade sig gøre. Han tilføjede, at det burde være muligt at rykke op til 2011's C11-standard. Da C99 aldrig var så populær, og C11 introducerede standardiseret multithreading-understøttelse og gjorde sproget en lille smule mere sikkert, lyder det som et godt træk.

Dette ville også være et nemt træk at foretage. Linux-kernens minimum C-compiler, GCC version 5.1 understøtter allerede C11. Dette virker for Torvalds. “Jeg ville virkelig elske endelig at komme videre med dette, i betragtning af at det har været under opsejling i mange mange år.”

Derefter, efter at have sikret sig, at den nye standard C skulle fungere uden problemer i kernen, besluttede Torvalds at trykke på aftrækkeren. “Lad os bare prøve dette tidligt i 5.18-fletningsvinduet.” Da 5.18-fletningsvinduet næsten er her, kan vi have C11-kode i kernen allerede i marts.

Eller ej. Linux-kerneudvikler og journalist Jonathan Corbet advarer: “Det er dog værd at huske på, at der kan ske en masse ting mellem flettevinduet og 5.18-udgivelsen. Flytning til en ny version af sprogstandarden kan afsløre et vilkårligt antal overraskelser på dunkle steder i kernen; det ville ikke tage mange af dem at få ændringen til at blive vendt tilbage for nu. Men hvis alt går vel, vil skiftet til C11 ske i den næste kerneudgivelse.”

Relaterede historier:

Slemme Linux-kernefejl fundet og rettet Oprydning af Linux-kernens 'Dependency Hell': Denne udvikler foreslår 2.200 commit-ændringerRust tager et stort skridt fremad, da Linux' andet officielle sprog Linux | Sky | Big Data Analytics | Innovation | Teknik og arbejde | Samarbejde