Âûáèðàé : Ïîêóïàé : Èñïîëüçóé
0

Îáùèé ñáîð ïðîãðàììèñòîâ. Ñîçäàòåëü C++ ïðèçâàë ðàçðàáîò÷èêîâ çàùèòèòü ÿçûê îò íàïàäîê ôàíàòîâ Python, Rust, Java è Go

Àâòîð ÿçûêà ïðîãðàììèðîâàíèÿ C++ îáðàòèëñÿ ê ñîîáùåñòâó ïðîãðàììèñòîâ ñ ïðèçûâîì çàùèòèòü Ñ è C++ îò íàïàäîê ñî ñòîðîíû ëþáèòåëåé áîëåå ñîâðåìåííûõ è áåçîïàñíûõ ÿçûêîâ, à òàêæå ñî ñòîðîíû ñïåöèàëèñòîâ ïî èíôîðìàöèîííîé áåçîïàñíîñòè. Ýòè ÿçûêè èçâåñòíû òåì, ÷òî íå óìåþò áåçîïàñíî ðàáîòàòü ñ ïàìÿòüþ, è ïîòîìó âñå ÷àùå âûñêàçûâàþòñÿ èäåè ïî ïîëíîìó îòêàçó îò íèõ â ïîëüçó Rust, Java, Go è ðÿäà äðóãèõ, áîëåå íàäåæíûõ ÿçûêîâ.

Ñïàñèòå, ïîìîãèòå

Ñîçäàòåëü ÿçûêà ïðîãðàììèðîâàíèÿ 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 ýêñïåðòû, îäíàêî, ïîëàãàþò, ÷òî ïîëíûé îòêàç îò ýòèõ ÿçûêîâ â îáîçðèìîì áóäóùåì íåâîçìîæåí, ïîñêîëüêó ñëèøêîì ìíîãî ñòðîê êîäà íàïèñàíî íà íèõ. Îíè ïðåäëàãàþò îòêàçàòüñÿ îò ðåâîëþöèè â ïîëüçó ýâîëþöèè è ìîäåðíèçèðîâàòü Ñ è Ñ++, ïîâûøàÿ óðîâåíü èõ áåçîïàñíîñòè.

Êîììåíòàðèè