← Vissza

news.bsdnet.hu

Greg Kroah-Hartman - Rust és Linux: Hogyan segíti majd a Rust nyelv a Linux jövőbeli sikerét

HUP 2026-07-20 14:29
Greg Kroah-Hartman megnyitó előadása az Open Source Summit India rendezvényen: AI-átirat: 0:00Üdv, Greg vagyok. Kernelfejlesztő vagyok, és olyan kódokról fogok beszélni, amelyek ténylegesen működnek, méghozzá determinisztikusan. 0:08Eredetileg a Rust és a Linux volt a téma. Linus tegnap beszélt egy keveset a Rustról. Én a C-ről és a Rustról fogok beszélni a Linuxban, mert a kernel a Rust felé halad. A Git is a Rust felé halad. Rengeteg projekt kezd el a Rust felé mozdulni. 0:23Mindezt azzal vezetném fel, hogy néhány évvel ezelőtt az egyik barátom azt mondta: – Ki kell próbálnod ezt az új nyelvet. Rustnak hívják. Én meg: – Mi? Nem, a C nagyszerű. Mire ő: – Nem, nem, nem. Újra szórakoztatóvá teszi a programozást. Én pedig: – Ugyan, C-ben is teljesen jó programozni. Igaza volt. Már akkor hallgatnom kellett volna rá. A Rust tényleg szórakoztató. Szórakoztatóvá teszi a programozást. Sok olyan dolog miatt nem kell többé aggódnod, amelyet a fordító megoldhat helyetted, és egy kicsit jobbá teszi a kódot. 0:48Ezért azzal kezdem: ha még nem próbáltad a Rustot, és a C-hez vagy a C++-hoz szoktál, próbáld ki. Lehet, hogy tényleg jó lesz. 0:55Tehát beszéljünk a Linuxról. A Linux ott van középen, alul. A Linux teljes feladata a hardver elvonatkoztatása. Ezt az emberek nem veszik észre. Hardverfüggetlennek láttatja a rendszert. 1:09Bármit betehetsz alá: ARM-ot, RISC-V-öt, x86-ot, S390-et. A legapróbb eszközöktől a világ legnagyobb szuperszámítógépeiig skálázódunk. Fölötte pedig megírhatod ugyanazt az alkalmazást, és Linuxon egyszerűen működik. 1:22A Linux a közvetítő réteg középen. Hardverfüggetlen. A mi feladatunk kijavítani a hardver összes hibáját, hogy nektek ne kelljen foglalkoznotok velük. Tehát középen egy kisebb káoszban vagyunk. 1:34Nagyok is vagyunk. A közösségünk tudomásom szerint a legnagyobb nyílt forráskódú közösség. Ezek a tavalyi számaink: több mint 5000 fejlesztő és legalább 375 vállalat. Nem igazán követtük pontosan. Valószínűleg már 450 körül járunk. Ezt alaposabban meg kellene vizsgálnunk. 1:49És gyorsan is haladunk. Ez a változtatási ütemünk. A legtöbb szoftverprojekt változtatási üteme kezdetben nagyon magas, mert próbálják megoldani a problémát. Ezután visszaesik, mert megoldották a problémát, és átállnak egy kellemes karbantartási üzemmódra. Ez a hagyományos modell. 2:03A Linux nem ilyen. Már 10–15 éve közel óránként kilenc változtatással haladunk. Ez őrület. Nagyon-nagyon gyorsan haladunk. 2:14Ennek oka, hogy a világ változik. Rengeteg munkába kerül létrehozni azt a kis hardverfüggetlen réteget, amely a felhasználói tér számára hardverfüggetlennek mutatja a rendszert. Új hardverek, új hálózati sebességek, új felhasználási módok és új energiagazdálkodási problémák jelennek meg. Rengeteg munkát végzünk odalent, és ezt újra meg újra elvégezzük. 2:33A Linux addig nem készül el, amíg a hardver fejlődése meg nem áll. 2:38A stabil ágainkon még mindig napi 40 változtatás történik. Az idők során sok különböző stabil ágat tartottunk fenn. Próbáljuk csökkenteni a stabil ágak számát, mert fontos, hogy idővel frissítsetek és naprakészek maradjatok. 2:51Napi körülbelül 13 CVE-nél járunk. Azt hiszem, mostanra talán már 14-nél. Ez nagyjából normális. Más operációs rendszereknél ugyanez a helyzet. Mi valójában egy kicsit ez alatt vagyunk. 3:02És ahogy Linus mondta, nyolc-kilenc hetente adunk ki új verziót. Ezt már több mint húsz éve így csináljuk. Nagyon determinisztikus. Órát lehet hozzá igazítani. Egyszerűen sorra gyártjuk a kiadásokat. Óraműpontossággal működik, lehet rá számítani. 3:17Erről tartottam egy teljes, nagy előadást, illetve volt egy 90 perces interjúm is. Keressetek rá: „Pragmatic Engineer Linux”. Nagyon jó interjú egy kiváló podcasterrel arról, hogyan csináljuk mindezt. 3:27És természetesen a Linux mindenhol ott van. Mindenben benne van. Android: eszközök milliárdjain és milliárdjain fut Linux. A világon minden más szinte csak kerekítési hiba. A szerverek apró kerekítési hibát jelentenek. 3:36Debian. A Debian futtatja a szervereket. Tehát két nyílt forráskódú projekt, az Android és a Debian működteti a világot. 3:43Chrome OS: azt hiszem, körülbelül 15 éve a legnagyobb példányszámban eladott laptopplatform. A Linux a desktopon már régóta itt van, csak senki sem vette észre. 3:52Az összes Wi-Fi-routeretek, az én mosógépem, és a kedvenceim, az automata tehénfejő gépek is Linuxot futtatnak. 4:02Rendben. Tehát ezt csináljuk. Most beszéljünk a kódról. 4:03Itt van némi C-kód. Ez valódi kernelkód. Hibás kernelkód. 4:12Gond nélkül lefordul, gond nélkül működik, és már régóta fut. A legfelső sorban azonban fogunk egy pointert, majd dereferáljuk anélkül, hogy ellenőriznénk, valóban érvényes-e. 4:24Itt a javítás. Hozzá kell adnunk egy ellenőrzést: ha nincs p, akkor hibát adunk vissza, elengedjük a lockot, és megyünk tovább. 4:32Ez egy CVE. Az operációs rendszer általunk kezelt rétegében – vagy az egész stackben – található hiba sebezhetőséggé válik, mert ha össze tudod omlasztani a rendszert, az sebezhetőség. Ha újra tudod indítani a rendszert, az sebezhetőség. Ha dereferálni tudsz egy pointert, az sebezhetőség. Ez egy CVE. Ezt még 2024-ben javítottuk. 4:50Ez azonban gyakori. Naponta 13 ilyet javítunk. Folyamatosan ilyen apró, triviális kis hibákat. Ostoba, parányi dolgokat. Ezeket javítjuk. 5:00Amikor tehát látjátok ezt a rengeteg CVE-t és ezt a sok nagy ügyet, valójában nincs szó semmi komolyabbról. Egyszerűen ilyenekről van szó. 5:07És a lock elengedéséről is. Emlékeznünk kell arra, hogy elengedjük a lockot, oda ugorjunk, majd továbbmenjünk. Ez egy másik nagyon gyakori problémánk. 5:14Itt van egy másik, 2024-es CVE. A Xen egy nagyon elterjedt virtualizációs megoldás, amelyet az AWS még mindig használ. Elfelejtették elengedni a lockot. Ha hiba történt, a rendszer megakadhatott. Ez megint sebezhetőség. 5:30Itt egy másik. Egy Wi-Fi-driver. 5:36A lockok elengedése miatt folyamatosan fejben kell tartanunk: dereferáltam ezt vagy sem? Elengedtem azokat a lockokat, amelyeket megszereztem? 5:45A kernelben és a fordítókban ezért olyan módszereket dolgoztunk ki, amelyekkel ez automatikusan kezelhető. Amikor kilépsz a hatókörből, a lockok automatikusan elengedésre kerülnek. 5:51A Rust ezt nagyon-nagyon jól csinálta. Átvettük az ötletet a Rustból, és beletettük a C-be. Most már van egy guard nevű megoldásunk. 5:58Ez a kód kijavítja a hibát. Ha elfelejtettük elengedni a lockot, akkor utána egyszerűen megfelelően elvégzi a takarítást. 6:08Ezt vettük át a Rustból. Ha a Rust holnap eltűnne, akkor is jobbá tettük vele a C-kódot. Ez fontos. A Rust ezt automatikusan elvégzi helyetted. 6:17Itt van néhány további, hasonló takarítás, egy másik típusú driverben. Lefoglalunk valamennyi memóriát, majd elfelejtjük felszabadítani. Vagy lefoglaltuk, és fel is szabadítottuk. Ezeket most már automatikusan kezelhetjük. 6:30Használhatunk például automatikus felszabadítást, majd visszaadhatjuk a pointert, miközben közben egyszerűen megfelelően elvégzi a takarítást, és kész. 6:39Ezt csináljuk most a kernelben: olyan automatikus felszabadítási megoldásokat, amelyekkel más nyelvek már régóta rendelkeznek. Most végre a C-ben is megvannak. A Rust arra késztetett bennünket, hogy újraértékeljük ezt, és jobban csináljuk. 6:50Most tehát a C-ben is vannak hatókörhöz kötött lockjaink és erőforrás-foglalásaink. Ez jó dolog. 6:55Megtanultuk, hogy ezek az apró, triviális hibák mindig megtörténnek. Vissza kell mennünk, és ki kell javítanunk őket. Amikor hibás kódot találunk a kernelben, hozzáadjuk ezeket a megoldásokat. Az újonnan érkező kódban pedig már eleve ezeket használjuk. 7:05Nem írjuk újra a régi kódot. A régi kód változatlan marad. Nem akarjuk folyamatosan felforgatni és módosítani. Az új erőforrás-kezelési megoldásokat azonban használjuk. Egyszerűbbé teszik a kódolást. 7:15Reviewerként nem kell folyamatosan fejben tartanom, hogy valóban elengedted-e ezt a lockot, vagy megfelelően felszabadítottad-e az erőforrást. 7:21Ez fontos, mert ennyi fejlesztő mellett a legértékesebb erőforrásaink a karbantartók és a reviewerek. Sokkal több fejlesztőnk van, mint reviewerünk, és több reviewerre lenne szükségünk. 7:32Ha egy reviewer feladatainak egy részét automatikussá tudod tenni, az jó. Könnyebben befogadhatom a változtatásaidat, és a kód ismét bekerülhet. 7:40Könnyebb review, kevesebb hiba, mindenki boldog. Azt akarjátok, hogy a karbantartók boldogok legyenek. Van nélkülük is elég más problémánk. 7:48Térjünk vissza ahhoz a régi Bluetooth-kódhoz. Ez C-ben van. Ha Rustban írnánk újra, így nézne ki. Szinte teljesen azonos, kivéve azt a kis kérdőjelet az első sor végén. 7:58Ha az a kérdőjel nincs ott, a fordító megáll. A kérdőjel azt mondja: ha hiba történik, kezeld. Visszaadja a hibát, és ennyi. 8:08Ha nincs ott a kérdőjel, a fordító megáll. Ez fontos. Olyan kódot akarunk írni, amely fordítási időben fogja meg a hibákat – nem a review során, nem futási időben, hanem fordítási időben. 8:21Ezt teszi meg nekünk a Rust. Kijavítja a kódot. Így ezekbe az apró, ostoba hibákba egyszerűen lehetetlen belefutni. Ha lefordul, működik. 8:30Lehetnek benne logikai hibák, de az összes ilyen apró hibánál, amelyben folyton elbotlunk, egyszerűen működni fog. 8:36A Rust a lockoknál is ezt teszi. Itt van némi Rust-kód. A struktúrában található értékhez kizárólag a lock megszerzésével férhetsz hozzá. 8:47A fordító nem engedi, hogy a lock megszerzése nélkül hozzáférj az értékhez. Egyszerűen megáll. Nem fordul le. 8:54Így tudod, hogy megfelelően megszerezted, majd megfelelően elengedted a lockot, és minden működik. Ez jó. Ezt akarjuk látni. 9:04E két dolog miatt teljes alrendszerek kezdik használni a Rustot. Az összes apró hibánk többségéért ez a két dolog felel: az erőforrás-foglalás és a lockkezelés. Lényegében ezeket csinálja egy kernel, és ez most megfelelően kezeli őket helyettünk. 9:14A Rust mindezeket a biztonsági problémákat már fordításkor megelőzheti, nem csak a review során. Ez nagyon-nagyon fontos. 9:22Ha lefordul, reviewerként tudom, hogy rendben van. Foglalkozhatok a logikával. 9:27Örülnék, ha logikai hibáink lennének. Örülnék, ha a biztonsági problémák valóban logikai hibák lennének. Az annyira kedves és kellemes lenne. 9:34A Rust esetében tehát ismét ugyanaz a mantra: egyszerűbb, könnyebb a review, kevesebb a hiba, és szórakoztatóbb. Mindenki boldog. 9:43Ahogy mondtam, sokkal több fejlesztőnk van, mint karbantartónk. Több mint 5000 fejlesztőnk van. A listán 700 karbantartó szerepel. Valójában körülbelül 150 központi karbantartónk van, akik a kód nagy részét átnézik. 9:57Ez rengeteg munka. Nagy az aránytalanság a reviewerek és a fejlesztők száma között, ezért egyszerűbbé akarjuk tenni a munkát. 10:03A reviewerekre optimalizálunk. Nem a fejlesztőkre optimalizálunk, mert fejlesztőből rengeteg van. 10:10Tehát ismét: ezért haladunk a Rust felé. Ki tudja kényszeríteni a nem megbízható adatok teljes ellenőrzését. Ez szintén nagyon fontos. 10:18Minden adat gonosz. Ez a mantra. Minden bemenet gonosz. A Microsoft ezt már régen megfogalmazta. A biztonság érdekében ellenőrizned kell az adatokat. A Rust ezt ki tudja kényszeríteni. 10:28Kikényszerítheted a memória-élettartam szabályait, a lockkezelési szabályokat, a hibakezelést és a típusbiztonságot. Ismét: fordítási időben. Nem futási időben, nem a review során, hanem fordítási időben. Ez nagyon-nagyon fontos. 10:40És íme az én állításom. Teljesen tudománytalan. Láttam a kernel összes CVE-jét az elmúlt 25 évben. Szerintem ezek 80 százaléka egyszerűen eltűnne, mert a Rust megfogná őket. 10:50Ezért akarom a Rustot. A valódi logikai CVE-ket jelentő 20 százalékot akarom. Azokat nem fogjuk kijavítani a Rusttal, mert logikai hibák. 10:58A Rust is teljesen jól össze tud omlani. Rustban is lehet elképesztően ostoba dolgokat csinálni. A Rust azonban kezeli helyettünk az összes apró, ostoba, triviális dolgot. 11:07A Rust valójában ugyanolyan csúnyán összeomolhat, mint a C. A Rust nem csodafegyver. 11:11Ez a memóriabiztonság valójában nem jelent megoldást a kernelben, mert ha túlcsordítasz egy puffert, vagy túlfutsz egy vektor végén, a kernel összeomlik. 11:22Amikor a Rust kezeli ezeket, a memóriabiztonság összeomlást jelent. Ez rendben van. Az összeomlás jó. Jobb, mint egy kompromittált gép, de attól még összeomlik. Továbbra is sebezhetőség, továbbra is CVE. 11:33Ez azonban logikai hiba. Örülnék, ha már csak logikai hibáink lennének. Sokkal egyszerűbbé tenné az életemet. 11:39Hadd összpontosítsak kizárólag a logikai hibákra, ne pedig a többi triviális hibára. 11:42A Rust tehát már ma is benne van a kernelben. Rengeteg munkát fektettek bele. 11:47Az emberek eredetileg azt mondták: – Írjunk egyszerűen egy drivert Rustban. Szép, önálló egység lesz. 11:53Csakhogy a driverek olyanok, mint egy fa levelei: minden mást felhasználnak. 11:57Egy drivernek foglalkoznia kell a lockkezeléssel, az erőforrás-kezeléssel, az interfészekkel, a felhasználói tér felé biztosított API-val – mindennel. 12:04Ezért C–Rust kötéseket kellett írnunk, hogy működjön. Sokunkat ez aggasztott igazán. 12:09Attól tartottunk, hogy nem fog megfelelően illeszkedni egymáshoz a C-s drivermodellünk és referenciaszámlálásunk, valamint a Rust referenciaszámlálása. 12:17A Rust-közösségből néhány igazán, igazán okos ember csatlakozott hozzánk, és segített elvégezni ezt a munkát. Jól oldották meg. A kötések ma már rendelkezésre állnak. 12:24Ma 113 000 sornyi Rust van a kernelben. Ennek többsége egyszerűen olyan kötés, amely a C-kódot a Rust-kódhoz illeszti. 12:34Egyes alrendszerekben az új drivereket már csak Rustban fogjuk elfogadni. Nézzétek meg a grafikus alrendszert. Ma ott vannak a létező legösszetettebb driverek. Azok kizárólag Rustban készülnek majd. Ez jelenti a munka nagy részét. 12:46A Binder, amely az Android része – az Android pedig működteti a világot –, most már Rustban van megírva. 12:52Jelenleg egyszerre két verzió található a kernelben. Egy időben futtatják őket, hogy ellenőrizzék, minden megfelelően működik-e. 12:57A C-verzió hamarosan eltűnik. A Rust-verzió marad, és a jövőben ez lesz az összes Android-eszköz alapja. Ez Rustban van. Eljutunk oda. 13:09Az idővel bekerülő új dolgokat tehát már Rustban lehet megírni. 13:13A Google készített erről egy nagy tanulmányt. Azt mondják: hagyjátok békén a régi kódot. Az új dolgokat írjátok memóriabiztos nyelven, például Rustban. Biztonsági szempontból ez a legjobb. 13:20Nem akarjátok megérinteni azt, ami már régóta létezik és működik. Ne írjátok újra. 13:25Mi sem fogunk semmit újraírni. Egyszerűen fokozatosan fejlődünk. 13:28Ahogy új driverek érkeznek, a régi dolgok eltűnnek, mert a hozzájuk tartozó hardvert már nem használják. A kernel idővel fejlődni fog, és működni fog. 13:35A Rust szinte az összes olyan architektúrához elérhető, amelyen a Linux működik. 13:39Azon a néhány architektúrán pedig, amelyhez nincs Rust-támogatás, a GCC-n dolgoznak. Van GCC-alapú Rust-fordító. A céljuk az, hogy le tudják fordítani és el tudják indítani vele a Linux kernelt. Azt hiszem, már majdnem eljutottak idáig. Ennek egy részhalmazán dolgoznak majd. 13:55Maga a Rust-közösség is felvette a Linuxot a tesztcsomagjába. A nyelvbe bekerülő minden egyes commit lefordítja és elindítja a Linux kernelt, majd ellenőrzi, hogy megfelelően működik-e. 14:03A Rust-közösség csodálatos. Ezek az emberek igazán, igazán okosak. Használjuk ki a segítségüket, amíg itt vannak. Rengeteg nagyszerű munkát végeznek nekünk. 14:11A változás nehéz. Sokan panaszkodnak ezekre a dolgokra. 14:15Szeretem a C-t. Nagyon-nagyon-nagyon sok éve programozom C-ben. Régebb óta, mint amióta az itt jelenlévők közül sokan egyáltalán élnek. 14:24Nehéz, de ahogy a barátom már régen mondta: szórakoztató. A Rust újra szórakoztatóvá teszi a programozást. 14:30Azt tapasztaltam, hogy nem kell többé azon aggódnod: hol vannak a referenciáim? Megfelelően szereztem meg a lockokat? Ezt megcsináltam? Azt megcsináltam? 14:39A logikára összpontosíthatok. Ez benne a nagyszerű. 14:41A logikára összpontosíthatsz, azokra a dolgokra, amelyekben programozóként jó vagy, mert tudod, milyen problémát kell megoldanod. A többivel nem kell foglalkoznod: a fordító elintézi helyetted, vagy szól, amikor elrontottad. 14:51Gyakran elrontod, de fordításkor szól róla. Ez fontos. 14:55Fordításkor kijavítod, és ha lefordul, akkor rendszerint talán még működni is fog. Ez igazán jó dolog. 15:01Újra szórakoztatóvá teszi a programozást, és erre egyre többen jönnek rá. Mi pedig fokozatosan fejlődünk. 15:08A Rust azonban arra is rákényszerített bennünket, hogy újraértékeljük a C-kódunkat. 15:11Rengeteg kód azért van bizonyos módon megírva a kernelben, mert az egész C-ben készült. 15:17Amikor megpróbálták ezt leképezni Rustra, kiderült, hogy vannak benne bonyodalmak. Egyes dolgokat egyszerűen azért csináltunk úgy C-ben, mert ott egyszerű volt. 15:23Kiderült, hogy ugyanehhez több ezer sornyi Rustot kellene írni. 15:27Leültünk a fejlesztőkkel, és azt mondtuk: – Nem. Hozzáadhatunk még egy sor C-t, és megszabadulhatunk attól a több ezer sortól. Mire ők: – Rendben, nagyszerű. 15:32Így közösen fejlesztettük tovább ezeket az API-kat. 15:36A kernel Rust API-jainak célja az, hogy ne lehessen helytelenül csinálni a dolgokat, ha a kód megfelelően lefordul. Ha megfelelően lefordul, akkor tudhatod, hogy rendben leszel. 15:44A C-ben rengeteg implicit dolog van. Például: rendben, ezt meg kell vizsgálnom, vagy ahogy korábban mutattam, megfelelően kell kezelni a lockokat. 15:51Ahhoz azonban, hogy ezek a kötések megfelelően működjenek, meg kellett vizsgálnunk a C API-jainkat. 15:53Mára rengeteg C-kódot módosítottunk a kernelben, és a kernel jobb lett tőle. 15:59Hozzáadtuk a guardokat és a hatókörhöz kötött referenciaszámlálást a C-hez, mert a Rust megmutatta, hogy ezt megtehetjük. 16:05Rengeteg típusbiztonsági megoldást adtunk hozzá. Sokkal több memóriabiztonsági megoldást építettünk a kernelbe és más API-kba, mert a Rust ráébresztett bennünket arra, hogy ezt megtehetjük. Megbízhatóbbá és jobbá tettük a C-kódot. 16:17Ha a Rust holnap eltűnne, a kernel akkor is jobb helyzetben lenne miatta. 16:21Ez a kísérlet tehát már nem kísérlet. 16:24A kernelközösség karbantartói tavaly összegyűltek. Minden évben találkozunk, és azt mondtuk: a Rust-kísérlet véget ért. Ez valódi. A jövőben elfogadjuk. 16:32A kernelközösségben jelentkeztek emberek a karbantartására, és nem fognak eltűnni. 16:38Csináljuk meg, haladjunk előre, és fejlődjünk megfelelően az idők során. 16:43A változás lehet jó. Szerintünk ez jó ötlet. 16:46Szerintem ez jó irány a Linux jövője számára, mert biztonságosabbá teszi a dolgokat. Erősebbé, biztonságosabbá és megbízhatóbbá teszi. 16:55A Linuxnak változnia kell az új hardverek miatt. A változás megtörténik. A Linux változása tehát jó dolog. Rendben leszünk. 17:02A változás megkönnyítheti a karbantartást, ami sokkal fontosabb. Ismét: kevesebb a karbantartó, mint a fejlesztő. A karbantartás egyszerűbbé válik. 17:10Azt akarom, hogy a fordító végezze el a munkát. A fordító a védelem első vonala. Ebben nagyon jól teljesít. 17:17A Rust tehát szórakoztatóbbá teheti a karbantartók munkáját, a felhasználók számára pedig biztonságosabbá teheti a Linuxot. Összességében ez a legfontosabb. 17:24És természetesen a világuralom a tervek szerint halad. 17:28Nagyon szépen köszönöm. trey @ gépház
Eredeti cikk megtekintése →