Navigácia
Inovácie

Rust a bezpečnosť pamäte: Prečo sa kritický softvér presúva od C a C++

15 októbra, 2026 techy.sk

Podľa dlhoročných analýz výrobcov softvéru súvisí približne 70 % bezpečnostných zraniteľností vo veľkých kódových základoch s chybami pri práci s pamäťou. Nejde o zložité útoky na šifrovanie, ale o banálne omyly: program číta alebo zapisuje tam, kam nemá. Programovací jazyk Rust je navrhnutý tak, aby veľkú časť takýchto chýb zachytil ešte pred spustením programu. To vysvetľuje jeho nástup v operačných systémoch. Neznamená však, že Rust je bezchybný.

Čo je bezpečnosť pamäte a prečo spôsobuje toľko chýb

Ako vznikajú chyby s pamäťou

V jazykoch C a C++ si programátor spravuje pamäť sám: určuje, kedy si ju vyžiada, kedy ju uvoľní a ako dlho smie na ňu ukazovať. Ak sa pomýli, vznikajú dva typické problémy. Pri pretečení vyrovnávacej pamäte program zapíše dáta mimo vyhradeného priestoru. Pri chybe „použitie po uvoľnení“ pracuje s pamäťou, ktorá už patrí inému. Útočník dokáže takéto chyby zneužiť na pád systému alebo na spustenie vlastného kódu.

Ako Rust tieto chyby zachytáva

Rust zavádza pravidlá vlastníctva. Každá hodnota má práve jedného vlastníka a po jeho zániku sa pamäť uvoľní. Hodnotu možno požičať, no pravidlo pripomína požičanú knihu: buď ju môže naraz čítať viac ľudí, alebo ju môže upravovať jediný človek, nikdy oboje. Kontroluje to súčasť kompilátora nazývaná borrow checker. Ak program tieto pravidlá porušuje, jednoducho sa neskompiluje. Chyba sa teda objaví pri písaní, nie u používateľa.

Čo ukazujú dáta z praxe

Najčastejšie citované čísla pochádzajú z mobilného operačného systému Android. Podľa údajov jeho vývojárov klesol podiel zraniteľností spôsobených pamäťovými chybami zo 76 % v roku 2019 na 24 % v roku 2024. Celkový počet týchto zraniteľností zároveň klesol z viac než 200 na menej než 50. Autori pripisujú pokles súboru postupov nazvaných Safe Coding, ku ktorým okrem Rustu patria aj iné bezpečné jazyky, statická analýza a bezpečnejší návrh rozhraní.

Dôležitý je ďalší poznatok: starý kód sa neprepisoval. Zraniteľnosti v ňom s časom miznú, keď sa opravujú alebo kód starne, a preto nové chyby vznikajú najmä v novom kóde. Ak sa nový kód píše v bezpečnejšom jazyku, počet chýb klesá. Tvrdenie, že ide o zásluhu samotného Rustu, tak treba čítať s touto nuansou. Vývojári navyše uvádzajú, že zmeny napísané v Ruste sa museli vracať späť menej než polovičnou frekvenciou ako zmeny v C++.

Rust v jadre Linuxu

Podpora Rustu sa do jadra Linuxu dostala vo verzii 6.1 koncom roka 2022 ako experiment: ak by sa neosvedčil, mal sa odstrániť. Na stretnutí správcov jadra v roku 2025 sa účastníci zhodli, že experiment je ukončený a Rust v jadre ostane. Vývojár, ktorý projekt vedie, v tejto súvislosti poslal úpravu dokumentácie. Jeden zo správcov jadra uviedol, že ovládače písané v Ruste sa zatiaľ ukazujú ako výrazne bezpečnejšie než ich verzie v C.

Rozsah je však stále malý. Rust sa v jadre používa najmä pre nové ovládače a podľa dostupných údajov ide o zlomok objemu jadra napísaného v C. Kód v Ruste sa predvolene zatiaľ nezostavuje. Správca grafickej časti jadra naznačil, že o približne rok by mohol byť pripravený zákaz nových ovládačov v C, no ide o jeho vyjadrenie, nie o schválené rozhodnutie.

Prechod veľkých firiem: čo je plán a čo vízia

Pri veľkých softvérových firmách treba rozlišovať. Po oznámení jedného vysokého inžiniera, že cieľom je do roku 2030 odstrániť z jeho firmy každý riadok C a C++, nasledovalo vysvetlenie: ide o výskumný projekt jeho tímu zameraný na automatizovaný prenos kódu medzi jazykmi, nie o stratégiu prepísať celý operačný systém. Firma už pritom používa Rust v niektorých častiach kódu, no úplný prepis systému podľa dostupných informácií neplánuje. Rozhodnutia, ktoré sa dnes opierajú o dáta, sú teda skôr postupné: nový kód v bezpečnejšom jazyku, existujúci kód sa mení opatrne.

Tlak vychádza aj od štátnych inštitúcií. Americká Národná bezpečnostná agentúra už v roku 2022 vyzvala organizácie, aby prechádzali na jazyky s bezpečnou správou pamäte, a novšie odporúčania spolu s agentúrou CISA túto výzvu zopakovali.

Limity Rustu: kde bezpečnosť končí

Blok unsafe a prvá zraniteľnosť v jadre

Rust má aj režim, v ktorom kompilátor niektoré kontroly nevykonáva. Označuje sa kľúčovým slovom unsafe a je nevyhnutný napríklad pri komunikácii s kódom v C. Zodpovednosť za správnosť tu preberá programátor. V decembri 2025 vznikla prvá zraniteľnosť (CVE) priradená kódu v Ruste v jadre Linuxu. Týkala sa ovládača prepísaného z C a súvisela s blokom unsafe. Dôvodom, prečo to nie je argument proti Rustu, je pomer: v ten istý deň bolo pre časť jadra v C vydaných 159 záznamov CVE.

Čo kompilátor nezachytí

Bezpečnosť pamäte nezaručuje správnu logiku programu. Chybný výpočet, nesprávne nastavené oprávnenia alebo slabé zabezpečenie môžu vzniknúť v ktoromkoľvek jazyku. Prechod tiež vyžaduje čas: projekty musia dať vývojárom priestor na zaškolenie a rozhranie medzi starým a novým kódom je ďalšou rizikovou oblasťou, ktorú vývojári Androidu vnímajú ako jednu z hlavných výziev.

Čo to znamená pre bežného používateľa

Používateľ si zmenu jazyka nevšimne priamo. Dôsledok je nepriamy: systémy, ovládače a komponenty postavené na bezpečnejších základoch by mali obsahovať menej chýb, ktoré sa dajú zneužiť. Rozhodujúce zostáva, ako rýchlo sa nový kód dostane do produktov a ako dôsledne ostane starý kód udržiavaný a aktualizovaný.

Záver

Rust rieši konkrétny a veľmi častý typ chýb, a to tak, že ich presúva z fázy prevádzky do fázy kompilácie. Dáta z Androidu a skúsenosti z jadra Linuxu naznačujú, že to funguje najlepšie pri novom kóde. Označenie „nepriestrelný“ však nesedí: unsafe bloky, logické chyby a rozhrania s existujúcim kódom ostávajú rizikom. Reálny obraz je preto postupný prechod, nie revolúcia.

Zdieľať článok

Mohlo by vás zaujímať