Christoph Hellwig, maintainer of the DMA subsystem, KVM, Slab Allocator, and PowerPC architecture in the Linux kernel, who at one time was a member of the technical committee of the Linux Foundation and was a plaintiff in a legal dispute with VMware regarding the GPL, refused to accept patches related to supporting driver development in the Rust language. The proposed patches added wrappers over several functions of the DMA subsystem, allowing DMA to be used in drivers written in Rust.
The reason for the refusal mentioned was the complexity of maintaining code when wrappers are present in other languages and the desire to keep the programming interfaces to DMA in a readable form in C, without being obscured by unclear wrappers. Christoph suggested directly calling the original C API of DMA in each Rust driver, to avoid creating additional abstractions that kernel maintainers would have to depend on.
The developers of the patches indicated that they would take on all the work of maintaining the code in Rust, were ready to maintain these patches themselves, and moved the wrappers to a separate subdirectory (rust/kernel/dma.rs). In response, Christoph vetoed ('Nacked-by') the acceptance of Rust-related patches and stated that he did not want another maintainer. Christoph stated that if the wrapper developers want to make Linux maintenance impossible due to mixing several languages in one codebase, they should do it in their own driver and not spread that cancerous growth to the main subsystems of the kernel.
At the same time, Christoph clarified that he has nothing against the Rust language and considers it one of the best new languages, but he is against mixing code in different languages. According to Christoph, he supports the creation of new projects in Rust, but is against mixing Rust with large codebases in C, as such mixing significantly reduces the maintainability of the kernel as an integrated project.
Podstata problémů se správou spočívá v tom, že Rust wrappery činí správce závislé na kódu napsaném v jazyce Rust. Na první pohled se zdá, že wrappery jsou pouze nadstavbami nad C strukturami a funkcemi, které nijak neovlivňují vývoj a údržbu kódu v C. Ale to není pravda. V případě přítomnosti takových wrapperů musí vývojáři subsystémů napsaných v C brát v úvahu vliv svých změn na pokračování funkčnosti wrapperů. Jakákoli změna datových struktur nebo vnitřních funkcí v C může vést k nutnosti změny kódu wrapperů, a proto je třeba sledovat a synchronizovat změny v C kódu, které ovlivňují wrappery, s kódem v Rustu. Mnoho správců není připraveno vzít si na sebe dodatečnou odpovědnost za opravu problémů, které vznikají v kódu v Rustu, a nehodlá trávit svůj čas sledováním stavu Rust wrapperů.
Situace se zhoršením údržby není teoretická. Diskuze se zúčastnil Jason Gunthorpe, udržovatel TPM, VFIO a Infiniband z firmy NVIDIA, který přivedl příklad, kdy Linus Torvalds odmítl pull request se změnami v subsystému správy paměti, protože tato změna vedla k chybě při pokusu o sestavení jádra se zapnutou podporou Rust. Chyba nastala, protože správci kódu v Rustu nepřidali potřebné změny do generátoru wrapperů (bindgen). Tak se správcové subsystému správy paměti stali závislými na volitelném cizím kódu v jádře, za který odpovídají jiní lidé, což mělo za následek dokonce úplnou závislost na kódu, který byl z pohledu C kódu a jádra jako celku zcela správný.
Odmítnutí přijmout kód wrapperu nad DMA voláním postavilo vývojáře projektu Rust for Linux do úzkých, protože bez takových wrapperů bude obtížné vyvinout plnohodnotné ovladače v jazyce Rust. Hector Martin, udržovatel kódu pro podporu ARM čipů Apple a vedoucí projektu Ashai Linux, navrhl jako variantu řešení konfliktu přijmout wrapper přímo přes Linuse Torvaldse, obcházejícího správce subsystému DMA. Pokud Linus souhlasí s takovým porušením subordinační struktury a zavedené praxe, může to vést ke krizi v řízení vývoje jádra, a pokud odmítne, zastaví to postup Rustu v jádře.
Jako možnost zmínil Hector přitažení Christophy k odpovědnosti za porušení kodexu chování kvůli komentáři, ve kterém Christoph přirovnal Rust k rakovinovému nádoru. Dále Hector napsal, že je unavený ze všech byrokratických zdržení, není připraven jednoduše důvěřovat zavedeným procesům a naznačil zapojení sociálních médií. Dave Airlie, udržovatel subsystému DRM, poradil, aby se konflikt nepřeceňoval a pochopil, že toxické chování je nepřijatelné na obou stranách, bez ohledu na to, zda je účastník diskuse v právu nebo ne.
Do diskuse se zapojil Linus Torvalds, který poukázal na to, že problém může být v samotném Hectorovi a jeho přesvědčení, že ví něco lépe než ostatní, nikoli v aktuálním procesu vývoje jádra, který funguje. Proces vývoje jádra má své problémy, ale to je životní realita — v životě není nic dokonalého. Pokusy o šikanu přes sociální média jsou to, co odrazuje Linuse mít cokoli společného s Hectorovým přístupem. Pro Linuse jsou důležité technické diskuse a patche, nikoli tlak prostřednictvím sociálních médií.
V reakci na to Hector poslal žádost o odstranění sebe ze seznamu udržovatelů platformy ARM/APPLE, protože ztratil víru v proces vývoje jádra a přístup k řízení komunity. Také prohlásil, že vývoj platformy ARM/Apple bude pokračovat mimo hlavní jádro Linuxu. Na platformě ARM/Apple v jádře zůstal ještě jeden udržovatel — Sven Peter, který se hodlá nadále starat o podporu platformy v jádře.
Zdroj: opennet.ru
