gioser

sergio/takana

> Una distribución Linux construida con un laboratorio funcional y hermético en el > sótano, y una terminal mutable, clásica y anárquica en el piso de arriba — diseñada > desde el suelo para que una IA programadora entienda, modifique y co…

TOML 1184Shell 70Rust 62Markdown 501503 Definitions

recipes/uutils: coreutils Rust-nativo (Etapa C pieza 1)

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 <noreply@anthropic.com>

54ccc130dd42692945ce46ac793fdad4fc708b66 · by sergio · (4 months ago) · parent 5f12692cc · browse the tree at this commit

Semantic delta

No definition changed: this change is text, documentation or data.

1 files · +32 −0

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 -- <flags>` 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"