Ñïàñèòå, ïîìîãèòå
Ñîçäàòåëü ÿçûêà ïðîãðàììèðîâàíèÿ C++ Áüÿðíå Ñòðàóñòðóï (Bjarne Stroustrup) ïðèçâàë ñîîáùåñòâî ðàçðàáîò÷èêîâ íà C++ çàùèòèòü èõ ëþáèìûé ÿçûê ïðîãðàììèðîâàíèÿ, êîòîðûé â ïîñëåäíèå ãîäû ïîäâåðãàþò êðèòèêå Àãåíòñòâà ïî êèáåðáåçîïàñíîñòè ÑØÀ è ÈÁ-ñïåöèàëèñòîâ, ïèøåò The Register. Ïðåòåíçèè ó âñåõ îäíè è òå æå – íè C++, íè Ñ íå óìåþò áåçîïàñíî ðàáîòàòü ñ ïàìÿòüþ, ÷òî â ïîñëåäíåå âðåìÿ ñòàíîâèòñÿ ïðîáëåìîé ââèäó íàëè÷èÿ öåëîãî ñïèñêà ÿçûêîâ, òàêèì óìåíèåì ðàñïîëàãàþùèõ.
C++ è òåì áîëåå Ñ – ýòî ñòàðûå ïî ñîâðåìåííûì ìåðêàì ÿçûêè ïðîãðàììèðîâàíèÿ. Îíè âûøëè â 1985 è 1972 ãã. ñîîòâåòñòâåííî, òî åñòü ïåðâîìó 40 ëåò, à âòîðîìó – 53. Ñîâðåìåííûå ïðîãðàììèñòû âñå ÷àùå îòäàþò ïðåäïî÷òåíèå íîâûì ÿçûêàì – Rust (2012 ã.) Java (1995 ã.), JavaScript (1995 ã.), Go (2009 ã.), Python (1991 ã.) è ïð.
 îòëè÷èå îò íèõ, C è C++ òðåáóþò ðó÷íîãî óïðàâëåíèÿ ïàìÿòüþ, ÷òî è ïðèâîäèò ê ðåãóëÿðíûì îøèáêàì áåçîïàñíîñòè ïàìÿòè, î êîòîðûõ íå ìåíåå ðåãóëÿðíî ãîâîðÿò ÈÁ-ñïåöèàëèñòû. Ýòî ïðèâîäèò ê ïîÿâëåíèþ óÿçâèìîñòåé â ïðîãðàììàõ, êîòîðûå çàòåì íàõîäÿò è ýêñïëóàòèðóþò õàêåðû.
Êàê ïèøåò The Register, íåðåäêî ýêñïëóàòàöèÿ äûð, ïåðâîïðè÷èíîé êîòîðûõ ÿâëÿþòñÿ îñîáåííîñòè Ñ è Ñ++, íåðåäêî ïðèâîäèò ê ôèíàíñîâûì ïîòåðÿì.  ðåçóëüòàòå Îòðàñëåâûå è ïðàâèòåëüñòâåííûå ýêñïåðòû ïî êèáåðáåçîïàñíîñòè â òå÷åíèå ïîñëåäíèõ òðåõ-÷åòûðåõ ëåò îòãîâàðèâàþò âñåõ îò èñïîëüçîâàíèÿ C è C++, ïðîïàãàíäèðóÿ ÿçûêè ñ ëó÷øåé áåçîïàñíîñòüþ ïàìÿòè.
Ïîêà íè÷åãî íå ïîìîãàåò
Çà ãîäû, ÷òî C è C++ ïîäâåðãàþòñÿ êðèòèêå çà íåáåçîïàñíîñòü, ñîîáùåñòâî ðàçðàáîò÷èêîâ ïðåäñòàâèëî íåñêîëüêî èõ áîëåå áåçîïàñíûõ àëüòåðíàòèâ. Ñðåäè íèõ – ôîðêè TrapC è Mini-C., îäíàêî íè îäèí èç íèõ ê ìîìåíòó âûõîäà ìàòåðèàëà íå áûë ïðèíÿò â êà÷åñòâå ñòàíäàðòà â ðàçðàáîòêå.
Äðóãèìè ñëîâàìè, ýòè ìåòîäû «îáåëåíèÿ» Ñ è Ñ++ ïîêà íå ðàáîòàþò.  íà÷àëå ôåâðàëÿ 2025 ã. Ñòðàóñòðóï ïóáëè÷íî îáðàòèëñÿ ê êîìèòåòó ïî ñòàíäàðòàì C++ (WG21), ïðèçâàë ïðèíÿòü ñðî÷íûå ìåðû ïî óëó÷øåíèþ ðåïóòàöèè Ñ è Ñ++, à òàêæå ïðåäëîæèë ïåðåéòè íà èñïîëüçîâàíèå ñðåäû ðàçðàáîòêè Profiles ñ öåëüþ óëó÷øåíèÿ áåçîïàñíîñòè.
 ñâîåì îáðàùåíèè Ñòðàóñòðóï íàïèñàë: «Êàê ÿ óæå ãîâîðèë ðàíåå, ýòî õîðîøàÿ âîçìîæíîñòü, ïîñêîëüêó áåçîïàñíîñòü òèïîâ è áåçîïàñíîñòü ðåñóðñîâ (âêëþ÷àÿ áåçîïàñíîñòü ïàìÿòè) áûëè öåëÿìè öåëÿìè C++ ñ ñàìîãî íà÷àëà». (As I have said before, this is also an opportunity because type safety and resource safety (including memory safety) have been key aims of C++ from the very start).
Âëàñòè íàñòðîåíû ðåøèòåëüíî
Ïîêà ðàçðàáîò÷èêè íèêàê íå ìîãóò «ïî÷èíèòü» áåçîïàñíîñòü Ñ è Ñ++, âëàñòè ÑØÀ âñå áîëåå æåñòêî êðèòèêóþò ýòè ÿçûêè.  ÷àñòíîñòè, Àãåíòñòâî ïî êèáåðáåçîïàñíîñòè è èíôðàñòðóêòóðå ÑØÀ (CISA) â îêòÿáðå 2024 ã. ïîòðåáîâàëî îò ðàçðàáîò÷èêîâ ÏÎ ëèáî çàêðûòü, íàêîíåö, âñå äûðû, ñâÿçàííûå ñ íåáåçîïàñíîé ðàáîòîé ñ ïàìÿòüþ, ëèáî îòêàçàòüñÿ îò Ñ è Ñ++ â ïîëüçó áîëåå áåçîïàñíûõ ÿçûêîâ ïðîãðàììèðîâàíèÿ. Ñðîê èñïîëíåíèÿ òðåáîâàíèÿ – äî 1 ÿíâàðÿ 2026 ã. – ê ýòîìó äíþ êîìïàíèÿì íóæíî, ïî ìåíüøåé ìåðå, ïîäãîòîâèòü äîðîæíûå êàðòû ïåðåõîäà íà áåçîïàñíûå ÿçûêè.
Ñîôòâåðíûå êîðïîðàöèè òîæå òåðÿþò èíòåðåñ ê ðàçðàáîòêå íà Ñ è Ñ++, òàê, â 2022 ã. òåõíè÷åñêèé äèðåêòîð Microsoft Azure Ìàðê Ðóññèíîâè÷ (Mark Russinovich) ïðèçâàë ïðîãðàììèñòîâ «ïðåêðàòèòü ðàçðàáîòêó ëþáûõ íîâûõ ïðîåêòîâ íà C/C++ è èñïîëüçîâàòü Rust äëÿ òåõ ñöåíàðèåâ, ãäå òðåáóåòñÿ ÿçûê, íå ñîáèðàþùèé ìóñîð» (to halt starting any new projects in C/C++ and use Rust for those scenarios where a non-garbage collected language is required).  íà÷àëå 2024 ã. CNews ïèñàë î íàìåðåíèè Microsoft ïåðåïèñàòü êîä îáëà÷íîãî ñåðâèñà íà Rust.
Ñîîáùåñòâî Linux è âîâñå ðàçäåëèëîñü íà äâà ëàãåðÿ.  îäíîì èç íèõ îêàçàëèñü ñòîðîííèêè ïåðåïèñûâàíèÿ êîäà ÿäðà öåëèêîì íà Rust, â äðóãîì – èñêðåííèå àäåïòû Ñ è Ñ++. Ñîçäàòåëü Linux Ëèíóñ Òîðâàëüäñ (Linus Torvalds) ê ìîìåíòó âûïóñêà ìàòåðèàëà íå ìîã ðåøèòü, êàêóþ èç ñòîðîí åìó ïðèíÿòü – îí òî õàìèò òåì, êòî âûáèðàåò Rust, òî â ïðèâàòíîé áåñåäå ñ ãëàâíûì ïðîòèâíèêîì Rust çàÿâëÿåò, ÷òî áóäåò ïðèíèìàòü ïàò÷è íà Rust â îáõîä ìåéíòåéíåðîâ, ãîëîñóþùèõ çà Ñ.
Èíòåðíåò-ãèãàíò Google, ñîçäàòåëü áåçîïàñíîãî ÿçûêà Golang, îí æå Go, òîæå ðàòóåò çà îòêàç îò Ñ è Ñ++ ââèäó èõ îïàñíîñòè. Îïðîøåííûå The Register ýêñïåðòû, îäíàêî, ïîëàãàþò, ÷òî ïîëíûé îòêàç îò ýòèõ ÿçûêîâ â îáîçðèìîì áóäóùåì íåâîçìîæåí, ïîñêîëüêó ñëèøêîì ìíîãî ñòðîê êîäà íàïèñàíî íà íèõ. Îíè ïðåäëàãàþò îòêàçàòüñÿ îò ðåâîëþöèè â ïîëüçó ýâîëþöèè è ìîäåðíèçèðîâàòü Ñ è Ñ++, ïîâûøàÿ óðîâåíü èõ áåçîïàñíîñòè.



