Binder psaný v C má z jádra Linuxu zmizet ve verzi 7.4
Ovladač Binder, přes který si aplikace na Androidu povídají se systémovými službami, je součástí Linuxu od prosince 2009. Commit nazvaný „binder: rm -f binder.c“ ho teď maže i s alokátorem, binderfs a testy: dvacet souborů, 11 470 ubraných řádků jazyka C. Zůstat má jen přepis do Rustu, který přibyl ve verzi 6.18.

Když aplikace na Androidu požádá systémovou službu o polohu, o seznam kontaktů nebo o vykreslení okna, projde ten dotaz Binderem. Je to ovladač meziprocesové komunikace, tedy obdoba roury nebo socketu, jen postavená tak, aby volání metody v cizím procesu stálo co nejmíň. Do jádra Linuxu přišel v prosinci 2009 s verzí 2.6.32, a to do adresáře drivers/staging/android mezi kód, který zatím nesplňoval nároky na plnohodnotný ovladač. Mezi ostatní ovladače se přestěhoval až v únoru 2015 s jádrem 3.19.
Commit se jmenuje rm -f binder.c
Inženýr Googlu Carlos Llamas poslal 12. září 2026 patch, který soubor binder.c odstraňuje. Greg Kroah-Hartman ho o pět dní později zařadil do větve char-misc-next, tedy do stromu, ze kterého se změny znakových a různých ovladačů posílají do hlavní řady. Jádro 7.3 je zatím ve fázi kandidátů na vydání a Binder psaný v C v něm pořád je; vyřazení míří na merge window jádra 7.4.
Zpráva u commitu je na poměry jádra nezvykle osobní. V překladu z angličtiny: „Ten den konečně nastal. Zahazujeme starou implementaci ovladače Binder v jazyce C ve prospěch jeho verze v Rustu. Přes patnáct let rostla céčková verze do složitosti, kvůli které bylo čím dál bolestivější ji udržovat a přidávat do ní nové věci, aniž by člověk zakopl o zranitelnost.“ Llamas k tomu píše, že Alice Ryhl dostala za poslední dva roky rustový Binder nejen na plnou shodu funkcí, ale ukázala i to, že výkonem céčkovou verzi dorovná a často ji předčí. Žádná čísla u commitu nestojí; je to tvrzení autora patche, ne měření, které by si čtenář mohl otevřít.
Jedenáct tisíc řádků dolů
Commit sahá na dvacet souborů, ubírá 11 470 řádků a devět přidává. Vedle binder.c mizí alokátor binder_alloc.c, pseudosouborový systém binderfs.c, obsluha netlinku, tracepointy, bitmapa dbitmap.h i sada testů KUnit nad alokátorem. Těch devět přidaných řádků jsou samé drobnosti: podmínka navíc v Kconfigu, přejmenované cíle v Makefilech a změněné jméno volby v rustovém kódu, v hlavičce pro bindgen i v selftestu.
Co zůstává, je adresář drivers/android/binder, který se v jádře objevil ve verzi 6.18. Je v něm 25 zdrojových souborů a v nich 10 104 řádků Rustu, tedy o něco míň, než kolik teď z jádra odchází.
Rustový Binder není celý v Rustu
Vedle rustových souborů leží v tom adresáři 1 234 řádků jazyka C a hlaviček: rust_binderfs.c, rust_binder_events.c a tři hlavičkové soubory. Binderfs, přes který vznikají zařízení /dev/binder, tak zůstává v C i po přepisu. Totéž platí pro tracepointy, ze kterých čtou ladicí nástroje. Přepsané je jádro ovladače, ne všechno kolem něj.
Binder se bez rustového překladače neobejde
Nejvíc pozná změnu ten, kdo si jádro sestavuje sám. V jádře 6.18 stály v Kconfigu dvě volby vedle sebe: ANDROID_BINDER_IPC pro céčkovou verzi a ANDROID_BINDER_IPC_RUST, kterou šlo zapnout jen tehdy, když ta první zapnutá nebyla. Llamasův commit je slil do jediné volby a nechal jí jméno té céčkové, jenže s novou podmínkou depends on RUST.
To by tiše vyplo Binder každému, kdo měl v konfiguraci zapnutou tu rustovou: její jméno by ze stromu zmizelo a sestavení by ovladač prostě nepostavilo. Kroah-Hartman proto ještě týž den přidal opravu, která volbu přejmenovala zpátky na ANDROID_BINDER_IPC_RUST. V jejím popisu píše, že pro tenhle vývojový cyklus má název zůstat, jak je, a přípona se může zahodit někdy později.
Podmínka depends on RUST ale platí dál a sahá dál než k jednomu ovladači. Volba RUST chce architekturu, která rustový překladač v jádře umí, a k tomu dostupný toolchain. Takových architektur je osm: arm, arm64, loongarch, powerpc, riscv, s390, um a x86. U třinácti dalších, mezi nimi mips, sparc i m68k, Binder nově zapnout nejde. U 32bitového armu přibývají další podmínky, protože rustový překladač je tam vázaný na little endian, na ARMv7 a na sestavení bez KASANu.
Druhá skupina omezení je bezpečnostní. RUST se vylučuje s randomizací struktur, a to jak s volbou RANDSTRUCT, tak s její podobou coby zásuvného modulu GCC; KASAN si žádá překladač Clang. Kdo tyhle ochrany zapíná, o Binder přijde, a naopak. Randomizace struktur přitom v testovacích sestaveních jádra 7.3 ustoupila právě Rustu.
Merge window jádra 7.4 se otevře, teprve až vyjde 7.3, takže se změna hlavní řady zatím nedotkla. Na zařízeních s Androidem podle Llamase rustový Binder běží už delší dobu; vyřazení céčkové verze tedy spíš dohání stav, ve kterém se Android nachází. Podrobnosti k commitu a jeho zařazení popsal také server Phoronix.