Кристоф Хелвиг (Christoph Hellwig), поддържащ подсистемите DMA, KVM, Slab Allocator и архитектура PowerPC в ядрото на Linux, който в миналото е бил член на управителния технически комитет на организацията Linux Foundation и е действал като жалбоподател в съдебно дело, свързано с GPL срещу VMware, отказа да одобри патчове, свързани с поддръжката на разработка на драйвери на езика Rust. Предложените патчове добавяха обвивки над няколко функции на подсистемата DMA, позволяващи да се използва DMA в драйверите на Rust.
Като причина за отказа беше посочено усложнението на поддръжката на кода, при наличието на обвивки на други езици, и желанието да се запазят програмните интерфейси към DMA в четим вид на езика C, без разпиляване към неразбираеми обвивки. Кристоф предложи директно да се обръщат към оригиналния C API на DMA в всеки драйвер на Rust, за да не се създават допълнителни абстракции, от които ще зависят поддържащите ядрото.
Разработчиците на патчовете посочиха, че те ще поемат цялата работа по поддръжката на кода на Rust, готови са да поддържат тези патчове сами и изнесоха обвивките в отделна поддиректория (rust/kernel/dma.rs). В отговор Кристоф наложи вето («Nacked-by») на приема на свързаните с Rust патчове и заяви, че не му е нужен още един поддържащ. Кристоф заяви, че ако разработчиците на обвивки искат да достигнат невъзможността за поддържане на Linux поради смесването на няколко езика в една кодова база, те трябва да го правят в своя драйвер, а не да разпространяват това раково образувание в основните подсистеми на ядрото.
В същото време Кристоф уточни, че няма нищо против езика Rust и го смята за един от най-добрите нови езици, но е против смесването на код на различни езици. Според думите на Кристоф, той е за създаването на нови проекти на Rust, но против смесването на Rust в големи кодови бази на C, тъй като такова смесване значително намалява удобството на поддръжката на ядрото, като интегриран проект.
Същността на проблемите с поддръжката е, че Rust обвързванията поставят поддържащите в зависимост от кода на Rust. На пръв поглед изглежда, че обвързванията са просто надстройки на C структури и функции, които не оказват влияние върху разработката и поддръжката на C код. Но това не е така. Когато има подобни обвързвания, разработчиците на подсистеми, написани на C, трябва да вземат под внимание влиянието на техните промени върху продължаването на работоспособността на обвързванията. Всяка промяна в данните или вътрешните функции на C може да доведе до необходимостта от промяна на кода на обвързванията, затова промените в C кода, които влияят на обвързванията, трябва да бъдат проследявани и синхронизирани с кода на Rust. Мнозина поддържащи не са готови да поемат допълнителната отговорност за решаване на проблеми, възникващи в Rust кода, и не възнамеряват да отделят времето си за проследяване на състоянието на Rust обвързванията.
Ситуацията с усложняването на поддръжката не е само на теория. В дискусията се включи Джейсън Ганторп (Jason Gunthorpe), мейнтейнер на TPM, VFIO и Infiniband от компания NVIDIA, който даде пример за отхвърлянето от Линус Торвалдс на pull заявка с промени в подсистемата за управление на паметта, тъй като тази промяна причинявала срив при опит за компилация на ядрото с активирана поддръжка за Rust. Сривът възникнал, защото поддържащите код на Rust не добавили необходимите промени в генератора на обвързвания (bindgen). Така поддържащите подсистемата за управление на паметта, при напредването на промяна, напълно коректна от гледна точка на C кода и ядрото като цяло, се оказали зависими от опционален външен код в ядрото, за който отговарят други хора.
Отказът да се приеме кодът на обвързването над DMA извежда разработчиците на проекта Rust for Linux в задънена улица, тъй като без подобни обвързвания разработването на пълноценни драйвери на Rust ще бъде затруднено. Хектор Мартин (Hector Martin), мейнтейнер на кода за поддръжка на ARM чиповете на Apple и лидер на проекта Ashai Linux, предложи като вариант за разрешаване на конфликта да се постигне приемането на обвързването директно чрез Линус Торвалдс, заобикаляйки поддържащия подсистемата DMA. Ако Линус се съгласи на подобно нарушение на субординацията и установената практика, това може да доведе до криза в управлението на разработката на ядрото, а ако откаже — да спре напредъка на Rust в ядрото.
Хектор спомена, че може да привлече Кристоф към отговорност за нарушаване на кодекса на поведение заради коментар, в който Кристоф сравни Rust с ракова тумор. Освен това, Хектор написа, че е уморен от всички бюрократични пречки, не е готов просто да се довери на установените процеси и намекна за привлечението на социални медии. Дейв Ейри (Dave Airlie), поддръжник на подсистемата DRM, съветва да не се раздува конфликтът и да се разбере, че токсичното поведение е неприемливо от двете страни, независимо дали участникът в дискусията е прав или не.
К дискусията се включи Линус Торвалдс, който посочи, че проблемът вероятно е самият Хектор и неговото самочувствие, че знае нещо по-добре от другите, а не в настоящия процес на разработка на ядрото, който работи. Процесът на разработка на ядрото има проблеми, но това е жизнената реалност — в живота няма нищо идеално. Опитите за тормоз чрез социални медии отблъскват Линус от желанието да има нещо общо с подхода на Хектор. За Линус важат техническите дискусии и пачове, а не оказването на натиск чрез социални медии.
В отговор Хектор подаде молба за отстраняване на себе си от съпровождащите платформата ARM/APPLE, тъй като е загубил вяра в процеса на разработка на ядрото и подхода за управление на общността. Той също така заяви, че разработката на платформата ARM/Apple ще продължи извън основното ядро на Linux. Платформата ARM/Apple остава с още един поддръжник в ядрото — Свен Питър (Sven Peter), който възнамерява да продължи поддръжката на платформата в ядрото.
Източник: opennet.ru
