Rust al nucli de Linux

No fa gaire, la idea que un altre llenguatge important seria compatible amb el nucli de Linux hauria estat risible. Linux va ser el fill del pòster de C. Per descomptat, hi ha hagut esforços per introduir altres idiomes al nucli, sobretot C++. Van fallar. Malament. Com va dir una vegada el creador de Linux, Linus Torvalds, “C++ és un llenguatge horrible”. Aleshores, per què Torvalds està donant la benvinguda a Rust al nucli? Escolta, amic meu, i t’ho diré.

Rust va començar com un projecte de la Fundació Mozilla. El propòsit d’aquest nou llenguatge construït per scratch era incorporar la sintaxi expressiva i la flexibilitat d’un llenguatge d’alt nivell amb el control i el rendiment excel·lents d’un llenguatge de baix nivell. En particular, estava pensat per millorar el rendiment, la paral·lelització i la seguretat de la memòria.

És la combinació de rendiment i seguretat de memòria la que cridaria l’atenció dels desenvolupadors de Linux. Tot i que no hi ha dubte que C permet als programadors escriure codi molt ràpid, tampoc no hi ha dubte que C també fa que sigui massa fàcil cometre errors de memòria.

Dècades després que C arribés a l’escena, els errors de memòria amb programes C semblen ser els més comuns de tots els errors de seguretat de codificació. El 2019, Microsoft va confessar que el 70% dels seus problemes de seguretat de vulnerabilitats i exposicions comunes (CVE) havien estat causats pels desenvolupadors que van cometre errors de corrupció de memòria en el seu codi C i C++.

Per molt que em mofo de Microsoft pels seus errors de seguretat, aquest no és només el problema de l’empresa. Són tots els que fan servir C. Tal com van dir Alex Gaynor i Geoffrey Thomas a la Linux Security Summit de 2019, dos terços de les vulnerabilitats del nucli de Linux provenen de problemes de seguretat de la memòria. És pràcticament igual a tot arreu. Sempre que hi hagi un problema de memòria, és probable que trobeu C o C++.

Aviat va quedar clar per als desenvolupadors del nucli de Linux que estaven disposats a mirar més enllà de K&R C que Rust podria ser la resposta. És cert que podeu provar d’escriure programes segurs per a la memòria en C amb variants de llenguatge com SEI CERT C o utilitzar directrius més segures com les directrius bàsiques de C++. Però, al final del dia, encara hi ha un munt d’errors de memòria C al codi de producció.

El primer pas per unir Rust i Linux, que malauradament va arribar massa aviat, va ser el mòdul del nucli Linux de Taesoo Kim de 2013. Les empreses estaven veient el desenvolupament de Rust i arribaven a la conclusió que en ell hi havia el futur de la programació de sistemes.

Amazon, Google i Microsoft van arribar a aquesta conclusió a finals dels anys 2010 i principis dels 2020. El 2018, Amazon Web Services (AWS) havia utilitzat Rust for Firecracker, la virtualització de codi obert darrere d’AWS Lambda i les seves altres ofertes sense servidor. El 2020, AWS havia llançat Bottlerocket, un sistema operatiu de contenidors basat en Linux.

Al mateix temps, Google treballava per introduir Rust a la distribució mòbil de Linux Android. Com van dir els enginyers de Google el 2021, la millora del codi d’Android “és una prioritat màxima per a la seguretat, l’estabilitat i la qualitat de cada versió d’Android”. Tot i així, “els errors de seguretat de la memòria en C i C++ continuen sent els més difícils d’abordar”.

Tot i que Google inverteix un “gran esforç i recursos per detectar, arreglar i mitigar aquesta classe d’errors”,… els errors de seguretat de la memòria continuen sent un dels principals factors que contribueixen als problemes d’estabilitat i representen constantment el 70% de la seguretat d’alta gravetat d’Android. vulnerabilitats.: Per tant, com que “els llenguatges segurs per a la memòria són el mitjà més rendible per prevenir errors de memòria,” ens complau anunciar que el Projecte de codi obert d’Android (AOSP) ara admet el llenguatge de programació Rust per desenvolupar el el propi sistema operatiu.”

Al mateix temps, els desenvolupadors del nucli de Linux, que sovint eren empleats de Google, van començar a explorar si Rust es podia introduir al propi Linux. Miguel Ojeda, un desenvolupador del nucli de Linux, va liderar aquests esforços. Va crear el projecte Rust for Linux per portar mòduls Rust fora de l’arbre a Linux el 2019.

Però realment va començar el 2020.

Rust per a Linux

Primer, l’abril de 2021, Ojeda va presentar una sol·licitud de comentari (RFC) sobre la incorporació de Rust a Linux a la llista de correu del nucli de Linux (LKML). Això va ser seguit el juliol de 2020 per Nick Desaulniers, un enginyer de programari de Google a Google que treballava en la compilació del nucli de Linux amb Clang i LLVM, i va suggerir una sessió “dins de l’arbre” per a la Conferència de lampistes de Linux (LPC) del 2020. Això va donar lloc a la xerrada de l’agost de 2020 sobre “Barreres a l’òxid de l’arbre”. Això, al seu torn, va traslladar la idea de Rust a Linux al gravador frontal.

També va ajudar que Ojeda rebé suport financer de l’Internet Security Research Group (ISRG) i Google. L’ISRG està invertint en això perquè el seu objectiu principal és promoure la programació segura per a la memòria per a sistemes operatius i programes crítics d’Internet com Linux, Apache i OpenSSL.

Aleshores, el 20 de setembre de 2021, Ojeda va enviar la primera sol·licitud d’extracció del projecte Rust per a Linux. Això va afegir el suport inicial de Rust, inclosa la integració de Kbuild, el suport inicial de mòduls integrats i l’inici de la caixa del nucli amb les abstraccions de Safe Rust d’Alex Gaynor i Geoffrey Thomas.

Sylvestre Ledru, un desenvolupador de Debian Linux, va portar una versió Rust de Coreutils a Linux mitjançant la infraestructura del compilador LLVM i la seva infraestructura d’eines i front-end del llenguatge Clang C el setembre de 2021. Coreutils són les utilitats bàsiques de l’intèrpret d’ordres GNU. Amb aquests, Ledru va arrencar Linux i va poder executar els paquets Debian més populars.

Al març de 2021, la idea ha agafat prou empenta que quan vaig parlar amb Torvalds i el mantenidor del nucli estable de Linux Greg Kroah-Hartman, sobre Rust a Linux, Torvalds va dir, “de cap manera estava “empentant” Rust, [but] Estic obert a això tenint en compte els avantatges promesos i evitant alguns inconvenients de seguretat, però també sé que de vegades les promeses no funcionen.

Kroah-Hartman també va ser prudentment optimista: “Tot es reduirà a la interacció entre les estructures bàsiques del nucli i les regles de vida útil que s’escriuen en C a les estructures Rust i les regles de vida útil perquè els conductors de Rust puguin utilitzar-los. ells correctament. Això requerirà una gran feina acurada per part dels desenvolupadors que vulguin connectar-ho tot, i els desitjo la millor de les sorts”.

Altres eren més optimistes. Wedson Almeida Filho, de l’equip d’Android de Google, va dir que “Entenem que Rust ara està preparat per unir-se a Cas com a llenguatge pràctic per implementar el nucli. Ens pot ajudar a reduir el nombre d’errors potencials i vulnerabilitats de seguretat en el codi privilegiat mentre juguem bé amb el nucli bàsic i conservem les seves característiques de rendiment”.

L’equip de Rust in Linux sabia que seria molta feina. Com va dir Ojeda el juny de 2022, “El nucli és un projecte enorme amb moltes parts interessades. Des del principi, estava clar que afegir un segon llenguatge “principal” al nucli tindria reptes tant tècnics com de gestió”.

Van demostrar estar a l’alçada del repte. El setembre de 2022, Torvalds em va dir: “A menys que passi alguna cosa estranya, això [Rust] el convertirà en 6.1”. El nucli de Linux 6.1, i Rust en ell, apareixeran a principis de 2023 o, amb sort i bon treball, a finals de 2022.

Ara, Rust, va dir Torvalds, “només tindrà la infraestructura bàsica (és a dir, encara no hi ha cap cas d’ús seriós)”. No us equivoqueu, però. Aquest és un gran pas endavant.

El primer treball Rust que veureu als nuclis de Linux Next serà, va dir Ojeda, “abstraccions de Rust per a subsistemes i controladors d’escriptura i altres mòduls” al LKML.

Finalment, Rust serà un segon idioma totalment integrat al nucli de Linux. No us penseu que, per un moment, això vol dir que els més de 30 milions de línies del nucli es reescriuran a Rust. Això no està passant aquest costat del 2050. Després, però, no hi apostis. Rust fa que qualsevol programa en què estigui escrit sigui inherentment més segur que els seus homòlegs C.

Grup Creat amb Sketch.

Leave a Comment

Your email address will not be published. Required fields are marked *