Christoph Hellwig, întreținător al subsistemelor DMA, KVM, Slab Allocator și arhitecturii PowerPC în nucleul Linux, care la un moment dat a fost membru al comitetului tehnic de conducere al organizației Linux Foundation și a acționat ca reclamant într-o dispută judiciară legată de GPL cu VMware, a refuzat să confirme corecțiile legate de suportul dezvoltării driverelor în limbajul Rust. Corecțiile propuse adăugau învelișuri peste mai multe funcții ale subsistemului DMA, permițând utilizarea DMA în driverele scrise în Rust.
Ca motiv pentru refuz, s-a menționat complicarea întreținerii codului în prezența învelișurilor în alte limbaje și dorința de a păstra interfețele software către DMA într-o formă lizibilă în limbajul C, fără a le estompa cu învelișuri neclare. Christoph a propus să se adreseze direct API-ului sursă C al DMA în fiecare driver scris în Rust, pentru a nu crea abstracții suplimentare de care trebuie să depindă cei care întrețin nucleul.
Dezvoltatorii corecțiilor au afirmat că își asumă întreaga muncă de întreținere a codului în Rust, sunt pregătiți să întrețină aceste corecții alternativ și au mutat învelișurile într-un subdirector separat (rust/kernel/dma.rs). Ca răspuns, Christoph a impus un veto («Nacked-by») asupra acceptării corecțiilor legate de Rust și a subliniat că nu are nevoie de un alt întreținător. Christoph a spus că dacă dezvoltatorii învelișurilor doresc să realizeze imposibilitatea întreținerii Linux din cauza amestecării mai multor limbaje într-o singură bază de cod, ar trebui să facă acest lucru în driverul lor, și nu să răspândească această tumoră malignă asupra subsistemelor principale ale nucleului.
În același timp, Christoph a precizat că nu are nimic împotriva limbajului Rust și îl consideră unul dintre cele mai bune limbaje noi, dar este împotriva amestecării codului în diferite limbaje. Conform lui Christoph, este în favoarea creării de noi proiecte în Rust, dar împotriva amestecării Rust în baze de cod mari în C, deoarece o astfel de amestecare reduce considerabil confortul întreținerii nucleului, ca proiect integrat.
Esentialele problemelor cu mentenanța constau în faptul că wrapper-urile Rust depind de codul scris în Rust. La prima vedere, pare că wrapper-urile sunt doar suprastructuri asupra structurilor și funcțiilor C, care nu afectează în niciun fel dezvoltarea și întreținerea codului C. Dar nu este așa. Având asemenea wrapper-uri, dezvoltatorii subsistemelor scrise în C trebuie să țină cont de influența modificărilor lor asupra continuității funcționalității wrapper-urilor. Orice modificare a structurilor de date sau a funcțiilor interne în C poate duce la necesitatea modificării codului wrapper-urilor, astfel că modificările privind wrapper-urile în codul C trebuie monitorizate și sincronizate cu codul în Rust. Mulți mentenanți nu sunt pregătiți să își asume responsabilitatea suplimentară pentru corectarea problemelor care apar în codul în Rust și nu intenționează să își petreacă timpul urmărind starea wrapper-urilor Rust.
Situația cu complicarea mentenanței nu este pur teoretică. La discuție s-a alăturat Jason Gunthorpe, mentenent TPM, VFIO și Infiniband din compania NVIDIA, care a dat un exemplu al refuzului lui Linus Torvalds de a accepta un pull request cu modificări în subsistemul de gestionare a memoriei, întrucât acea modificare provoca o eroare atunci când se încerca compilarea nucleului cu suport pentru Rust. Eroarea a apărut deoarece mentenanții codului în Rust nu au adăugat modificările necesare în generatorul de wrapper-uri (bindgen). Astfel, mentenanții subsistemului de gestionare a memoriei s-au văzut dependenți de codul opțional de terță parte din nucleu, pentru care răspund alte persoane, în timp ce avansau o modificare care era perfect validă din perspectiva codului în C și a nucleului în ansamblu.
Refuzul de a accepta codurile wrapper pentru apelurile DMA a pus dezvoltatorii proiectului Rust for Linux într-o situație fără ieșire, deoarece fără aceste wrapper-uri dezvoltarea driverelor complete în Rust va fi îngreunată. Hector Martin, mentenent al codului pentru suportul cipurilor ARM de la Apple și liderul proiectului Ashai Linux, a propus ca soluție pentru conflict acceptarea wrapper-ului direct prin Linus Torvalds, ocolind mentenanța subsistemului DMA. Dacă Linus va accepta o astfel de încălcare a ierarhiei și a practicii stabilite, ar putea conduce la o criză de conducere în dezvoltarea nucleului, iar dacă va refuza, va opri avansarea Rust în nucleu.
Ca variant, Hector a menționat atragerea lui Christoph la răspundere pentru încălcarea codului de conduită din cauza unui comentariu în care Christoph a comparat Rust cu o tumoră canceroasă. În plus, Hector a scris că s-a săturat de toate birocrațiile, nu este dispus să aibă încredere în procesele stabilite și a sugerat implicarea rețelelor sociale. Dave Airlie, întreținătorul subsistemului DRM, a sfătuit să nu se exagereze conflictul și să se înțeleagă că comportamentul toxic nu este acceptabil din niciuna dintre părți, indiferent dacă participantul la discuție are sau nu dreptate.
La discuție s-a alăturat Linus Torvalds, care a indicat că problema ar putea fi chiar la Hector și în încrederea sa excesivă că știe ceva mai bine decât alții, nu în procesul actual de dezvoltare a nucleului, care funcționează. Procesul de dezvoltare a nucleului are probleme, dar aceasta este o realitate de viață - în viață nu există nimic perfect. Încercările de hărțuire prin rețelele sociale sunt ceea ce îi reduce lui Linus dorința de a avea de-a face cu abordarea lui Hector. Ceea ce contează pentru Linus sunt discuțiile tehnice și patch-urile, nu presiunea exercitată prin rețelele sociale.
Ca răspuns, Hector a trimis o solicitare de a fi eliminat din lista celor care susțin platforma ARM/APPLE, deoarece a pierdut încrederea în procesul de dezvoltare aplicat în nucleu și în abordarea managementului comunității. El a afirmat, de asemenea, că dezvoltarea platformei ARM/Apple va continua în afara nucleului principal Linux. Platforma ARM/Apple mai are un întreținător în nucleu - Sven Peter, care intenționează să continue menținerea platformei în nucleu.
Sursa: opennet.ro
