FrankenSuite research program · A shareable brief

FrankenLibC Rewriting the C Library Without Replacing It

A shareable brief from the FrankenSuite research program. Every claim below traces to the assessed repository; sources are linked at the end. Assessment pinned September 22, 2026.

Assessment pinned September 22, 2026 (the assessed commit)·~1,254 words·5 sections·Every claim traceable to a source
Six definitions. NODUS is the program’s four-ring verdict scale (Invest, Pilot, Explore, Monitor) assigned per assessment packet. TRL is technology readiness level, scored 1 to 9 per packet. CI is continuous integration: the project’s automated test runs. The pin is the exact commit the assessment froze on; every claim is evaluated at the pin, not at HEAD. The rider is the license clause withholding all rights, including benchmarking and analysis, from OpenAI, Anthropic, their affiliates, and anyone acting for them. Bus factor is how many people can leave before the project stalls; it is 1 for every repo here.

01 · What it is

What a C library is, and why it is the hardest thing to rewrite

Every program on a Linux machine stands on the C library. When code prints text, allocates memory, copies a string, looks up a domain name, or formats a date, it calls into libc. The standard one is glibc, the GNU C Library, first released in 1992, more than three decades of accumulated behavior, quirks, locale edge cases, and extension APIs that the entire Linux userspace implicitly depends on. Bugs in that layer are load-bearing for everything above it, and memory-unsafety bugs in C code remain a top source of security vulnerabilities. The pressure to fix this at the language level is now official policy: CISA, with the NSA and FBI, urges the industry to move work toward memory-safe languages, naming Rust among them. source

Rewriting a libc is a different sport from rewriting a service. The interface surface is thousands of functions wide. Behavior must be bug-for-bug compatible with programs that were never written correctly. And the failure mode of getting it wrong is everything crashing. So nobody adopts a replacement until it is proven, and it cannot be proven without being adopted. That trap is the whole problem.

02 · Why build it

Why rewrite it in Rust, and why not replace it

The maintainer — Jeffrey Emanuel, a solo developer building a whole suite of Rust reimplementations — answers the trap with interposition instead of replacement. Rather than asking the world to swap out its libc, which no one will do, FrankenLibC ships as a shared library loaded on top of the host glibc with LD_PRELOAD. source Every library call gets intercepted: inputs are validated through a policy "membrane," calls the project has reimplemented are served from Rust, and the rest pass through to the host glibc. The project is explicit about staging this: interpose first, harden next, stand alone only later. A standalone replacement library is roadmap, not product.

The engineering case is real. Rust's compiler rules out the memory bugs that keep appearing in C libraries, and per-call validation at the library boundary catches misuse without recompiling the world. That is an edge over sanitizer tooling, which needs recompiles, and over musl, the clean and widely deployed alternative C library that Alpine Linux runs on. Musl is auditable, but it is still C, not memory-safe.

The counter-argument is physics. LD_PRELOAD cannot see static binaries, setuid binaries, or anything that runs before the preload resolves. Those are permanent limits on every production claim. The shipping artifact, by the maintainer's own documentation, still depends on host glibc. And nearly a third of the 4,119-function surface, 30.7 percent, is served by validating the inputs and then calling the host anyway. The safety claim for that third is bounded by glibc's behavior, the very behavior the project exists to improve on. The headline "memory-safe libc" describes at most the other two-thirds. The dangerous remainder is supervised, not replaced.

03 · What was built

What the project actually built

Start with the actual line count. The tree holds 2.3 million lines of Rust, but roughly a million of those are generated character-encoding tables. One file of CJK conversion data is a quarter-million lines on its own. Excluding generated tables, the hand-written source is around 450,000 lines. That is still an enormous solo build.

What is built is an interposition layer with an unusual conscience. All 4,119 exported symbols are individually classified in a machine-checked matrix: implemented natively, served by direct system call, or wrapped through to the host. That is 69.3 percent native, 30.7 percent host-backed. The policy membrane runs in strict and hardened modes with environment-variable controls. Sixty-six fuzz targets exist. A 71-kernel "runtime math" control plane tunes per-call optimization policy, and it ships with a kill switch so operators can disable the whole thing without rebuilding. The README asks its own hardest question outright: is this real code or naming theater? source

The standout machinery is the measurement discipline. The project separates every claim into four fields: the symbol exists, the semantics match, the replacement level, how fresh the evidence is. So no statement outruns its proof. Its benchmark rule refuses self-comparison: a win counts only if the incumbent glibc runs live in the same process invocation, protected from interception, with the ratio clearing a statistical gate. Everything else is a "self-speedup," meaning maintenance, not a competitive claim. The 41,205-line negative-evidence ledger publishes the losses under the same regime. Memory allocation runs 5.6 times slower than glibc, improved from 6.9, printed next to the banked wins: date formatting at about half glibc's time, wide-character date formatting at a tenth.

That discipline survived its hardest test. In September the project published a self-audit showing that four commits had silently deleted shipped work, including an entire math engine, while three banked benchmark wins stood falsely in the ledger for ten weeks. The project found this itself, retracted the wins, and wrote the rules that would have caught it. That is rarer than a project with no stale wins.

Evidence · CI status

What the project’s own CI said at the pin

the pin = the commit the assessment was pinned to.

  • The main CI (continuous integration: automated checks that run on every change) pipeline was red at the assessed commit: it failed on its first step, and every substantive job was skipped.

The uncomfortable findings

Uncomfortable finding

The curated smoke-test artifact is three and a half months old. The runtime-math control plane is asserted, not demonstrated: no published measurement isolates what the 71 kernels actually buy. The unsafe-code gates are real but scoped: the allocator and the validation-fingerprint modules, the two places where memory safety is actually decided, are exempt from them, as is the entire entry-point crate. And the license is MIT plus a rider naming OpenAI and Anthropic as forbidden parties, barring them from benchmarking, testing, or even analyzing the code — while roughly half of recent commits were co-authored by AI models, most of them Anthropic's.

04 · Where it stands

Where it stands

In our program's terms: TRL 4, NODUS ring Explore. In plain English: the interposition artifact works in the lab. Real binaries run under it, and the benchmarks against live glibc are careful craft. But it is a prototype with red CI, no release, one maintainer, and a license that forbids evaluation by the organizations best equipped to perform it. source

Technology readiness

TRL 4 on a 1-to-9 scale.

NODUS ring

MonitorExplorePilotInvest

The program’s adoption ring for this project.

Verdict key

NODUS ring
Explore: The default for substantive-but-unproven work.
TRL
Technology Readiness Level, a 1-to-9 scale of how proven a technology is. This brief rates the project at TRL 4.
CI
Continuous integration: the project’s automated checks, run on every change.
The pin
The exact commit the assessment was pinned to. “At the pin” means as of that commit.

Evidence tiers

  1. Tier 1 · Verified — Confirmed by direct inspection of a fresh clone, an API response, or a live page read by the analyst.
  2. Tier 2 · CI-observed — Observed executing on live CI pages. Attests the suite runs, not that it is green, unless pass/fail is legible.
  3. Tier 3 · Maintainer claim — Asserted in README or docs by the maintainer; not independently executed or reproduced.
  4. Tier 4 · External — Independent sources: APIs, papers, press, third-party benchmarks. Absence of coverage is reported as a finding.
  5. Tier 5 · Inference — The analyst’s judgment. Always labeled; never presented as fact.

What this verdict rests on. Tier labels are the assessment packet’s own annotations.

  • Tier 1 · Verified: Counts from the clone.
  • Tier 2 · CI-observed: Main CI red at the pin: run #8942 failed on its first step and all substantive jobs were skipped.
  • Tier 3 · Maintainer claim: Nothing was compiled or executed; the measurement regime is the maintainer’s own.
  • Tier 4 · External: No independent coverage: no benchmarks, reviews, deployments, or downstream dependents.
  • Tier 5 · Inference: The Explore ring at TRL 4.

Should you use it?

No.

There is no release artifact and no production deployment story.

Should you learn from it?

Emphatically yes.

The exports worth stealing are the claim-field contract, the benchmark taxonomy, and the silent-deletion audit — methodology that ports to any repository where agents write code.

What would change the verdict, in order

  1. the rider narrowed or removed (the necessary condition), main CI green at a pin with substantive gates executing, a tagged release, an independent benchmark or deployment, a demonstrated standalone library that boots without host glibc

05 · What it teaches

What this teaches about building with agents

The transferable lesson is the benchmark rule: a win requires the incumbent live in the same invocation. Everything else is maintenance.

Most benchmark theater dies under that single sentence. Before-versus-after numbers, tuned harnesses, quiet baseline changes: the project names twelve such reward-hacking patterns as forbidden and encodes the rule in 588 executable gate scripts. A self-speedup can justify a code change. It cannot be quoted as beating anyone. That distinction, enforced mechanically, is worth stealing for any team optimizing with agents, because agents are superb at finding the benchmark-shaped hole in your methodology and climbing through it.

The companion lesson is the silent-deletion audit. At fifty commits a day with half of them agent co-authored, silent deletion is a background process, not an incident: agents add brilliantly and delete quietly, and their commit messages describe what they added. source The defense the project invented is a periodic deletion-excess audit: rank commits by deletions over insertions, adjudicate each against the ledger. Run it on any fast-moving agent-assisted codebase. You will find deletions you did not know about. The project did.

Evidence

This page cites selected evidence. The full claim-by-claim audit is in the assessment packet.

Open a panel to see what each source evidences. Full claim-by-claim audit.

Full claim-by-claim audit with evidence tiers lives in the program's assessment packet.

The repositorygithub.com/Dicklesworthstone/frankenlibc
README

its README

LICENSE

LICENSE

AGENTS.md

AGENTS.md, docs/NEGATIVE_EVIDENCE.md, docs/PERF_FRONTIER_FINAL.md, and support_matrix.json at the assessed commit

glibc history via Wikipedia

glibc history via Wikipedia

musl via the Alpine Linux wiki

musl via the Alpine Linux wiki

memory-safe languages guidance via CISA.

memory-safe languages guidance via CISA.