Кристоф Хелвиг (Christoph Hellwig), поддоменный мейнтейнер DMA, KVM, Slab Allocator и архитектуры PowerPC в ядре Linux, ранее входивший в управляющий технический комитет Linux Foundation и выступавший истцом в судебном разбирательстве с 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 request от Линус Торвалдс с промени в подсистемата за управление на паметта, тъй като тази промяна водеше до сбой при опит за компилиране на ядрото с включена поддръжка на Rust. Сбойът възникваше, защото поддържащите кода на Rust не са добавили необходимите промени в генератора на обвързвания (bindgen). Така, поддържащите подсистемата за управление на паметта, при проследяване на промяната, напълно коректна от гледна точка на кода на C и самото ядро, се оказаха зависими от опционален външен код в ядрото, за който отговарят други хора.
Отказът да се приеме кодът на обвивките над повикванията за DMA остави разработчиците на проекта Rust for Linux в задънена улица, тъй като без подобни обвивки разработването на изцяло функционални драйвери на езика Rust ще бъде затруднено. Хектор Мартин, мейнтейнер на кода за поддръжка на ARM чиповете на Apple и лидер на проекта Ashai Linux, предложи като вариант за разрешаване на конфликта да постигне приемането на обвивката директно чрез Линус Торвальдс, заобикаляйки поддържача на подсистемата DMA. Ако Линус се съгласи на подобно нарушение на субординацията и установената практика, това може да доведе до криза в управлението на разработката на ядрото, а ако откаже — да спре напредъка на Rust в ядрото.
Гектор спомена възможността да привлече Кристоф към отговорност за нарушаване на кодекса на поведение, след като той сравни Rust с ракова тумор. Освен това, Гектор изрази умора от всички бюрократични пречки и не беше готов просто да се довери на установените процеси, намеквайки за привличане на общественото внимание в социалните мрежи. Дейв Ейрли, поддържащият подсистемата DRM, посъветва да не се разширява конфликтът и да се разбере, че токсичното поведение е недопустимо и от двете страни, независимо от това дали участникът в дискусията е прав или не.
В дискусията се включи и Линус Торвальдс, който посочи, че проблемът може би е в самия Хектор и неговата самоувереност, че знае нещо по-добре от другите, а не в текущия процес на разработка на ядрото, който функционира. Процесът на разработка на ядрото има проблеми, но това е житейска реалност — в живота няма нищо перфектно. Опитите за водене на кампания чрез социалните мрежи отбиват желанието на Линус да има нещо общо с подхода на Хектор. За Линус важат техническите дискусии и пачовете, а не оказването на натиск чрез социалните мрежи.
В отговор Хектор изпрати искане за премахване на себе си от списъка на поддържачите на платформата ARM/APPLE, тъй като е загубил вяра в прилагания в ядрото процес на разработка и подхода към управлението на обществото. Той също така заяви, че разработката на платформата ARM/Apple ще продължи извън основното ядро на Linux. На платформата ARM/Apple в ядрото остава още един мейнтейнер — Свен Питер, който има намерение да продължи поддръжката на платформата в ядрото.
Източник: opennet.ru
