From 54ccc130dd42692945ce46ac793fdad4fc708b66 Mon Sep 17 00:00:00 2001 From: sergio Date: Fri, 19 Jun 2026 19:12:12 -0400 Subject: [PATCH] recipes/uutils: coreutils Rust-nativo (Etapa C pieza 1) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Primera pieza del userland Rust-nativo (Etapa C): adopta uutils/coreutils 0.9.0 (MIT) como receta Cargo — el patrón de hammerd/arje-zero, no recompila C ni se escribe de cero. Multicall static-musl (12 MB) + 79 symlinks por applet (ls/cp/cat…), drop-in de busybox/GNU coreutils. - Esquiva el miscompile de zig por construcción: codegen rustc/LLVM, zig cc sólo como linker. - `--bin coreutils` (no `-p`): el paquete tiene lib+bin y `cargo rustc -- flags` exige un único target (gotcha vs arje-zero). - Install custom (sólo esa fase; configure/compile siguen auto-Cargo) crea los symlinks con `coreutils --list`. Construido + sellado + verificado funcional (ls/cat/echo vía dispatch argv0). Co-Authored-By: Claude Opus 4.8 --- recipes/uutils.toml | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 recipes/uutils.toml diff --git a/recipes/uutils.toml b/recipes/uutils.toml new file mode 100644 index 00000000..04e33986 --- /dev/null +++ b/recipes/uutils.toml @@ -0,0 +1,32 @@ +# uutils/coreutils 0.9.0 — coreutils en Rust (reemplazo Rust-nativo de busybox/GNU coreutils). +# +# Primera pieza de la Etapa C (userland Rust-nativo): adopta una reimplementación MADURA (MIT) como +# receta Cargo, el mismo patrón que hammerd/arje-zero — no se escribe de cero. Multicall: un binario +# `coreutils` + un symlink por applet (ls/cp/mkdir/…). Esquiva el bug de zig por construcción: el +# codegen lo hace rustc/LLVM, no el path C de zig (sólo se usa `zig cc` como linker). +# +# Fuente git pinned al tag 0.9.0 (ADR 0006); uutils commitea su Cargo.lock ⇒ vendor + `--locked` +# bit-reproducible. Estático musl con zig cc (sin loader del host). + +name = "uutils" +version = "0.9.0" + +[source] +repo = "https://github.com/uutils/coreutils" +commit = "9eefc3705093910ad8e8bbcf7e5f84a49720340f" + +[build] +compiler = "zig-cc" +target = "x86_64-linux-musl" +link = "static" +# `--bin coreutils`: el paquete coreutils tiene lib + bin; `cargo rustc -- ` exige UN solo +# target (a diferencia de arje-zero, que tiene un único bin y bastaba `-p`). Seleccionamos el binario +# multicall. Default features ⇒ el set estándar de applets embebido. +flags = ["--bin", "coreutils"] + +# Install custom (sólo esta fase; configure/compile siguen auto-Cargo): instala el multicall en +# /usr/bin/coreutils y crea un symlink RELATIVO por applet (ls→coreutils, cp→coreutils, …), igual +# layout que busybox/GNU-coreutils multicall ⇒ drop-in. `--list` lo da el propio binario (static +# musl, corre en el sandbox). El loop cubre los 79 applets embebidos por las default features. +[build.phases] +install = "mkdir -p /out/usr/bin && cp target/release/coreutils /out/usr/bin/coreutils && for u in $(/out/usr/bin/coreutils --list); do ln -sf coreutils /out/usr/bin/\"$u\"; done"