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

Rust – ýòî ÿä, à íå ëåêàðñòâî. Ðàçðàáîò÷èêè Linux: îòêàç îò Ñ è ïåðåõîä íà äðóãîé ÿçûê – ïóòü â áåçäíó

Ðàçðàáîò÷èêè ÿäðà Linux ïðîäîëæàþò ñîïðîòèâëÿòüñÿ åãî ïåðåâîäó íà ÿçûê Rust. Ñðåäè íèõ íàøëèñü òå, êòî ñðàâíèë âíåäðåíèå â ÿäðî êîäà íà Rust ñ ðàêîâîé îïóõîëüþ. Âïðî÷åì, ïðîöåññ îòêàçà îò Ñ êàê îò îñíîâíîãî ÿçûêà â Linux è áåç òîãî ñèëüíî çàìåäëèëîñü – êëþ÷åâîé ðàçðàáîò÷èê Rust for Linux îñòàâèë ïðîåêò â ñåíòÿáðå 2024 ã.

Ïîëüçà èëè âðåä

Ðàçðàáîò÷èêè, ïûòàþùèåñÿ äîáàâèòü êîä Rust â ÿäðî ??Linux, ïðîäîëæàþò ñòàëêèâàòüñÿ ñ ïðîòèâîäåéñòâèåì ñî ñòîðîíû ñïåöèàëèñòîâ ïî ïîääåðæêå Linux, êîòîðûå ñ÷èòàþò, ÷òî èñïîëüçîâàíèå íåñêîëüêèõ ÿçûêîâ â êîäå ÿäðà, â ÷àñòíîñòè, Rust, ÿâëÿåòñÿ íåæåëàòåëüíûì è ðèñêîâàííûì óñëîæíåíèåì. Êàê ïèøåò The Register, íîâûå àðãóìåíòû ïðîòèâ ÷àñòè÷íîãî èëè ïîëíîãî îòêàçà îò Ñ â ÿäðå â ïîëüçó Rust ïðèâåë ñïåöèàëèñò ïî ïîääåðæêå ÿäðà Êðèñòîô Õåëëâèã (Christoph Hellwig).

«Íå çàñòàâëÿéòå ìåíÿ èìåòü äåëî ñ âàøèì áëåñòÿùèì ÿçûêîì äíÿ, - çàÿâèë îí. – Ïîääåðæêà ìíîãîÿçûêîâûõ ïðîåêòîâ – ýòî áîëü, ñ êîòîðîé ìíå íåèíòåðåñíî èìåòü äåëî. Åñëè âû õîòèòå èñïîëüçîâàòü ÷òî-òî, ÷òî íå íà C, áóäü òî àññåìáëåð èëè Rust, âû ïèøåòå íà C èíòåðôåéñû è ðàçáèðàåòåñü ñ íåñîîòâåòñòâèÿìè ñàìîñòîÿòåëüíî».

Òàêæå Õåëëâèã íàïèñàë: «Åñëè âû õîòèòå ñäåëàòü ïîääåðæêó Linux íåâîçìîæíîé èç-çà êðîññ-ÿçûêîâîé êîäîâîé áàçû, äåëàéòå ýòî â ñâîèõ äðàéâåðàõ è íå ðàñïðîñòðàíÿéòå ýòó ðàêîâóþ îïóõîëü íà îñíîâíûå ïîäñèñòåìû». Êàê ïèøåò The Register, ïîä «ðàêîâîé îïóõîëüþ» Õåëëâèã, âåðîÿòíî, èìåë â âèäó íå ñàì ÿçûê Rust, à èìåííî êðîññ-ÿçûêîâóþ êîäîâóþ áàçó.

Âìåñòî òîãî, ÷òîáû ñîîáùà äåëàòü ÿäðî Linux ëó÷øå, ðàçðàáîò÷èêè òðàòÿò âðåìÿ íà áàòàëèè êîììåíòàðèÿõ

Ïîääåðæêà êîäà Rust â ÿäðå Linux ïîÿâèëàñü 3 îêòÿáðÿ 2022 ã., âñêîðå ïîñëå òîãî, êàê òåõíè÷åñêèé äèðåêòîð Microsoft Azure Ìàðê Ðóññèíîâè÷ (Mark Russinovich) çàÿâèë, ÷òî íîâûå ïàò÷è äëÿ ÿäðà ñëåäóåò ïèñàòü íà Rust, à íå íà C èëè C++. «Â öåëÿõ áåçîïàñíîñòè è íàäåæíîñòè îòðàñëü äîëæíà îáúÿâèòü ýòè ÿçûêè óñòàðåâøèìè», – äîáàâèë îí.

Ê ñëîâó, â 2001 ã. Linux ñ ðàêîâîé îïóõîëüþ ñðàâíèë ñîîñíîâàòåëü è áûâøèé ãåíäèðåêòîð Microsoft Ñòèâ Áàëìåð (Steve Balmer). «Linux – ýòî ðàêîâàÿ îïóõîëü, êîòîðàÿ â ñìûñëå èíòåëëåêòóàëüíîé ñîáñòâåííîñòè ïðèêðåïëÿåòñÿ êî âñåìó, ê ÷åìó ïðèêàñàåòñÿ», çàÿâèë Áàëìåð.  ÷åì-òî îí áûë ïðàâ – ñïóñòÿ ãîäû â Windows ïîÿâèëàñü âñòðîåííàÿ ïîäñèñòåìà äëÿ çàïóñêà Linux – Windows Subsystem for Linux).

Ìèíè-äðàéâåð êàê òðèããåð äëÿ õåéòåðîâ

Âñå ïðèâåäåííûå êîììåíòàðèè Õåëëâèãà îòíîñÿòñÿ ê íåáîëüøîìó ïàò÷ó äëÿ ÿäðà Linux, êîòîðûé ïîçâîëÿåò íàïèñàííûì íà Rust äðàéâåðà èñïîëüçîâàòü ôóíêöèþ C API DMA dma_alloc_coherent() äëÿ âûäåëåíèÿ è îòîáðàæåíèÿ áîëüøèõ îáëàñòåé ïàìÿòè ñ öåëüþ ïðÿìîãî äîñòóïà ê ïàìÿòè ñî ñòîðîíû îáîðóäîâàíèÿ.

Óâèäåâ ýòîò ïàò÷, Õåëëâèã òóò æå ïîòðåáîâàë, ÷òîáû ðàçðàáîò÷èêè «íå äîáàâëÿëè êîä Rust â kernel/dma» (No Rust code in kernel/dma, please). Ïî äàííûì The Register, Õåëëâèã îøèáñÿ – ïàò÷ äîáàâèë êîä â ðàçäåë rust/kernel èñõîäíîãî äåðåâà Linux, à íå â kernel/dma.

Ìèãåëü Îõåäà (Miguel Ojeda) èç ïðîåêòà Rust for Linux ïîïðîñèë Õåëëâèãà ïðåäëîæèòü àëüòåðíàòèâó. Õåëëâèã îòâåòèë åìó: «Ñîõðàíÿéòå îáîëî÷êè â ñâîåì êîäå, âìåñòî òîãî ÷òîáû óñëîæíÿòü æèçíü äðóãèì», è ïðîäîëæèë óòâåðæäàòü, ÷òî «èíòåðôåéñû ê API DMA äîëæíû îñòàâàòüñÿ â ÷èòàåìîì êîäå C, à íå â ñòðàííûõ ïðèâÿçêàõ, ÷òîáû îí îñòàâàëñÿ ïðèãîäíûì äëÿ ñîïðîâîæäåíèÿ».

Ê áåñåäå ïîïûòàëñÿ ïîäêëþ÷èòüñÿ ïðîãðàììèñò èç Red Hat Äàíèëî Êðóììðèõà (Danilo Krummrich), ó÷àñòâóþùèé â ïðîåêòå Rust for Linux, íî Õåëëâèã ÿñíî äàë åìó ïîíÿòü, ÷òî îí ïðîñòî íå õî÷åò èìåòü äåëî ñ êîäîì Rust.

Êðóììðèõ ïîïûòàëñÿ îáúÿñíèòü àäåïòó ÿçûêà Ñ, ÷òî óñèëèÿ ïðîåêòà Rust for Linux íàïðàâëåíû íà ñîçäàíèå êîäà Rust, êîòîðûé àáñòðàãèðóåò API C äëÿ âñåõ äðàéâåðîâ Rust è ïîääåðæèâàåòñÿ ðàçðàáîò÷èêàìè Rust. Îäíàêî âñå åãî äîâîäû Õåëëâèãà íå âïå÷àòëèëè, è îí ïðîäîëæèë ñòîÿòü íà ñâîåì.

Ïðîòèâîïîëîæíîå ìíåíèå

 ïîääåðæêó êîäà íà Rust â ñîñòàâå ÿäðà Linux âûñòóïàþò î÷åíü ìíîãèå ðàçðàáîò÷èêè, è â èõ ÷èñëå – Êèñ Êóê (Kees Cook) èç Google. Îíè íàïèðàþò íà òî, ÷òî Rust – ãîðàçäî áîëåå áåçîïàñíûé ÿçûê â ñðàâíåíèè ñ Ñ, è ýòî ïîäòâåðæäàþò ìíîãèå ÈÁ-êîìïàíèè.

Ïî ìíåíèþ Êóêà, èç-çà èñïîëüçîâàíèÿ Ñ â ÿäðå Linux ñêîïèëîñü ñëèøêîì ìíîãî óÿçâèìîñòåé. Æåëàþùèå ïåðåïèñàòü õîòÿ áû ÷àñòü ÿäðà Linux íà Rust, êàê è Êèñ Êóê, òîæå ñòðåìÿòñÿ ñäåëàòü åãî áîëåå áåçîïàñíûì.  ýòîì æå íàïðàâëåíèè ðàáîòàåò è ïðîåêò Rust for Linux, ñóùåñòâóþùèé ñ 2020 ã.

Îäíàêî â íàñòîÿùåå âðåìÿ ñàìî ñóùåñòâîâàíèå ïðîåêòà íàõîäèòñÿ ïîä óãðîçîé. CNews ïèñàë, ÷òî â ñåíòÿáðå 2024 ã. îò íåãî îòêðåñòèëñÿ ñîôòâåðíûé èíæåíåð Microsoft Âåäñîí Àëìåéäà Ôèëüî (Wedson Almeida Filho), ñòîÿâøèé ó èñòîêîâ Rust for Linux. Îí ïðÿìî çàÿâèë, ÷òî óñòàë îò «áåñïîëåçíîé íåòåõíè÷åñêîé åðóíäû» è äèñêóññèé íå ïî òåìå, ïðåîáëàäàþùèõ â ñîîáùåñòâå.

Êòî-òî íå ñëåäèò çà ñëîâàìè

Õåëëâèã ïðîäîëæèë âûñêàçûâàòü ñîìíåíèÿ ïî ïîâîäó íåîáõîäèìîñòè ïåðåâîäà ÿäðà Linux íà Rust. «Êàæäûé äîïîëíèòåëüíûé áèò, êîòîðûé âêðàäûâàåòñÿ â äðóãîé ÿçûê, ðåçêî ñíèæàåò ïîääåðæèâàåìîñòü ÿäðà êàê èíòåãðèðîâàííîãî ïðîåêòà. Åäèíñòâåííàÿ ïðè÷èíà, ïî êîòîðîé Linux óäàëîñü âûæèòü òàê äîëãî, çàêëþ÷àåòñÿ â îòñóòñòâèè âíóòðåííèõ ãðàíèö, è äîáàâëåíèå äðóãîãî ÿçûêà ïîëíîñòüþ íàðóøàåò ýòî. Âàì ìîæåò íå ïîíðàâèòüñÿ ìîé îòâåò, íî ÿ ñäåëàþ âñå âîçìîæíîå, ÷òîáû ýòî ïðåêðàòèòü. Ýòî íå ïîòîìó, ÷òî ÿ íåíàâèæó Rust. Õîòÿ ýòî è íå ìîé ëþáèìûé ÿçûê, ýòî îïðåäåëåííî îäèí èç ëó÷øèõ íîâûõ ÿçûêîâ, è ÿ ïðèçûâàþ ëþäåé èñïîëüçîâàòü åãî äëÿ íîâûõ ïðîåêòîâ, ãäå îí ïîäõîäèò. ß íå õî÷ó, ÷òîáû îí áûë ãäå-òî ðÿäîì ñ îãðîìíîé áàçîé êîäà C, êîòîðóþ ìíå íóæíî ïîääåðæèâàòü».

 îòâåò íà ýòî Ãåêòîð Ìàðòèí (Hector Martin), ðóêîâîäèòåëü ïðîåêòà Ashai Linux, çàÿâèë, ÷òî çàìå÷àíèÿ Õåëëâèãà ïðåäñòàâëÿþò ñîáîé íàðóøåíèå Êîäåêñà ïîâåäåíèÿ. Ïðè ýòîì îí âûðàçèë ñîìíåíèå, ÷òî ïðîòèâ íåãî áóäóò ïðèíÿòû êàêèå-ëèáî äèñöèïëèíàðíûå ìåðû. Æóðíàëèñòû The Register ñïðîñèëè Ìàðòèíà, íàìåðåí ëè îí ïîäàòü æàëîáó íà Õåëëâèãà çà íàðóøåíèå Êîäåêñà ïîâåäåíèÿ, íî íå ïîëó÷èëè îòâåòà.

Ïîñëåäíåå ñëîâî çà Òîðâàëüäñîì

Ìàðòèí óòâåðæäàåò, ÷òî ðàçðàáîò÷èêàì Rust for Linux ñëåäóåò ïðîèãíîðèðîâàòü îïàñåíèÿ Õåëëâèãà è ïðåäñòàâèòü ñâîé ïàò÷ íà óòâåðæäåíèå ñîçäàòåëþ Linux Ëèíóñó Òîðâàëüäñó (Linus Torvalds). «Åñëè Ëèíóñ ïðèìåò pull request, òî òî, ÷òî ñêàæåò Êðèñòîô, íå èìååò çíà÷åíèÿ. Åñëè Ëèíóñ íå ïðèìåò åãî, òî ïðîåêò Rust for Linux ïî ñóòè ìåðòâ, ïîêà Ëèíóñ èëè Êðèñòîô íå ñäåëàþò ñâîé øàã. Âñå îñòàëüíîå – õîæäåíèå âîêðóã äà îêîëî», – ñêàçàë Ìàðòèí.

The Register ñïðîñèë Õåëëâèãà, õî÷åò ëè îí äàòü äîïîëíèòåëüíûå êîììåíòàðèè, íî òîò îòêàçàëñÿ.

Êîììåíòàðèè