Rust a Linux-next -ben

Szépen fejlődik a Rust integrációja a Linux kernelben, de még bizonyítania kell ahhoz, hogy a stabil ágba átkerüljön.
Hiszen onnan már a későbbiekben nem célszerű visszavonni.

Ahogy most áll:

 Méret  Filenév
------------------------------------------------
  9269	linux-next/drivers/android/allocation.rs
  2003	linux-next/drivers/android/context.rs
  2622	linux-next/drivers/android/defs.rs
 13719	linux-next/drivers/android/node.rs
 31661	linux-next/drivers/android/process.rs
  5947	linux-next/drivers/android/range_alloc.rs
  2724	linux-next/drivers/android/rust_binder.rs
 32273	linux-next/drivers/android/thread.rs
 10925	linux-next/drivers/android/transaction.rs

 11721	linux-next/drivers/gpio/gpio_pl061_rust.rs

 15459	linux-next/rust/alloc/alloc.rs
 13860	linux-next/rust/alloc/borrow.rs
 59232	linux-next/rust/alloc/boxed.rs
  4394	linux-next/rust/alloc/collections/mod.rs
 24100	linux-next/rust/alloc/fmt.rs
  7228	linux-next/rust/alloc/lib.rs
  4207	linux-next/rust/alloc/macros.rs
 23775	linux-next/rust/alloc/raw_vec.rs
 45698	linux-next/rust/alloc/slice.rs
 85645	linux-next/rust/alloc/string.rs
 21152	linux-next/rust/alloc/str.rs
  5202	linux-next/rust/alloc/vec/drain_filter.rs
  5012	linux-next/rust/alloc/vec/drain.rs
 11665	linux-next/rust/alloc/vec/into_iter.rs
  2736	linux-next/rust/alloc/vec/is_zero.rs
113163	linux-next/rust/alloc/vec/mod.rs
  2667	linux-next/rust/alloc/vec/partial_eq.rs
   819	linux-next/rust/alloc/vec/set_len_on_drop.rs
  5600	linux-next/rust/alloc/vec/spec_extend.rs

   980	linux-next/rust/build_error.rs
  1677	linux-next/rust/compiler_builtins.rs

  1867	linux-next/rust/kernel/allocator.rs
  9385	linux-next/rust/kernel/amba.rs
  1386	linux-next/rust/kernel/bindings.rs
  1622	linux-next/rust/kernel/buffer.rs
  2448	linux-next/rust/kernel/build_assert.rs
  7057	linux-next/rust/kernel/chrdev.rs
  2231	linux-next/rust/kernel/cred.rs
  2868	linux-next/rust/kernel/c_types.rs
  7284	linux-next/rust/kernel/device.rs
  6996	linux-next/rust/kernel/driver.rs
 16191	linux-next/rust/kernel/error.rs
 27340	linux-next/rust/kernel/file_operations.rs
  4986	linux-next/rust/kernel/file.rs
 17529	linux-next/rust/kernel/gpio.rs
  6095	linux-next/rust/kernel/io_buffer.rs
  7185	linux-next/rust/kernel/io_mem.rs
  2070	linux-next/rust/kernel/iov_iter.rs
 15645	linux-next/rust/kernel/irq.rs
  7006	linux-next/rust/kernel/lib.rs
  7530	linux-next/rust/kernel/linked_list.rs
  5441	linux-next/rust/kernel/miscdev.rs
 15993	linux-next/rust/kernel/module_param.rs
  3448	linux-next/rust/kernel/of.rs
  5560	linux-next/rust/kernel/pages.rs
  5559	linux-next/rust/kernel/platdev.rs
  3919	linux-next/rust/kernel/power.rs
   716	linux-next/rust/kernel/prelude.rs
 13621	linux-next/rust/kernel/print.rs
  1458	linux-next/rust/kernel/random.rs
 11343	linux-next/rust/kernel/raw_list.rs
 20746	linux-next/rust/kernel/rbtree.rs
  5610	linux-next/rust/kernel/revocable.rs
  1860	linux-next/rust/kernel/security.rs
  1137	linux-next/rust/kernel/static_assert.rs
  4691	linux-next/rust/kernel/std_vendor.rs
 11150	linux-next/rust/kernel/str.rs
 19535	linux-next/rust/kernel/sync/arc.rs
  4995	linux-next/rust/kernel/sync/condvar.rs
  6115	linux-next/rust/kernel/sync/guard.rs
  4514	linux-next/rust/kernel/sync/locked_by.rs
  3072	linux-next/rust/kernel/sync/mod.rs
  3734	linux-next/rust/kernel/sync/mutex.rs
  5897	linux-next/rust/kernel/sync/revocable_mutex.rs
  7599	linux-next/rust/kernel/sync/seqlock.rs
  6543	linux-next/rust/kernel/sync/spinlock.rs
  5514	linux-next/rust/kernel/sysctl.rs
  5803	linux-next/rust/kernel/task.rs
 13785	linux-next/rust/kernel/types.rs
  6183	linux-next/rust/kernel/user_ptr.rs

  2371	linux-next/rust/macros/helpers.rs
  3379	linux-next/rust/macros/lib.rs
 22417	linux-next/rust/macros/module.rs

  1312	linux-next/samples/rust/rust_chrdev.rs
   843	linux-next/samples/rust/rust_minimal.rs
  4081	linux-next/samples/rust/rust_miscdev.rs
  1979	linux-next/samples/rust/rust_module_parameters.rs
  1852	linux-next/samples/rust/rust_print.rs
  1722	linux-next/samples/rust/rust_random.rs
  5207	linux-next/samples/rust/rust_semaphore.rs
  1091	linux-next/samples/rust/rust_stack_probing.rs
  2359	linux-next/samples/rust/rust_sync.rs

Ez a kódhalmaz lehetővé teszi, hogy a meglevő kernelhez Rust-ban elegáns módon lehessen drivereket írni.
Példa driver is van fent: https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/tre… És ez össze is hasonlítható a C-ben megírttal.
Illetve itt vannak alap példák: https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/tre…

Hozzászólások

Ha ennyire jó a rust, miért nem a sajátjukat csezik fejlesztik? Miért kell egy már működőt szétizélni? Értem, hogy az evangelizációs kommandónak kell a térítés, de ez tipikus homokvárra vizelős hozzáállás.

"Maradt még 2 kB-om. Teszek bele egy TCP-IP stacket és egy bootlogót. "

Miért nyúlnak hozzá egyáltalán a Linuxhoz? Egy diverz, innen is, onnan is,  kókányolt project egy rémálom. Minden egyes nyelvnek máshol van agyrákja, és nem biztos, hogy egy A nyelv fejlesztője  B nyelvben írt exploitot, hibát kiszúrja. Funkcionalitás tekintetében nem ad extrát hozzá a kernelhez, miközben a komplexitását növeli, szétcseszi az amúgy is feleslegesen komplex toolchaint. Egyetlen pozitívuma, hogy a Rozsdáspistikék elmondhatják, hogy "Linuxban is RUST van!" Szóval, ha ennyire brióst akarnak tekerni és ennyi idejük van, akkor építsenek maguknak egy homokozót és abba tegyék.

"Maradt még 2 kB-om. Teszek bele egy TCP-IP stacket és egy bootlogót. "

Ha valami szépen kifejlődött akkor miért akarnak belerondítani? Mintha én belevésnék egy klasszikus szoborba, csak mert véső van a kezemben...
Látod, itt nem a Linux javítása a cél, hanem a hírnév amit a nagyobb homokozó ad. A linux kernel jelentős része legacy kódok, interfacek tömegének a kezelése. Ha ennyire használni akarják, akkor írjanak wrappert a linux kernelmoduloknak a Redoxhoz. Tessék, máris lesz device support és lesz dicsőség is.

"Maradt még 2 kB-om. Teszek bele egy TCP-IP stacket és egy bootlogót. "