SELF gjør Linux-binæren til en SQLite-database du kan spørre med SQL
Legger et ELF-programs segmenter og symboler i SQLite-tabeller og lar kjernen kjøre selve databasefila.
«Ikke en database som beskriver et kjørbart program, men selve fila du kjører chmod +x på og starter» — Farid Zakaria
Zakaria kaller formatet SELF, Structured Executable & Linkable Format, og premisset hans er at ELF allerede er en database som nekter å innrømme det. Formatet implementerer databaseprimitiver for hånd: .strtab er strenginternering, .gnu.hash er en indeks, og seksjonstabellen er en tabell over tabeller. SQLite gjør det samme, men er selvbeskrivende og bakoverkompatibelt.
Trikset er ett felt. SQLite reserverer fire byte for en application_id på offset 68 i headeren, og SELF stempler den med SELF slik at en vanlig database aldri treffer. Deretter registrerer du mønsteret i binfmt_misc og peker på en liten tolk i C som pakker ut og starter delene. Simon Willison, som løftet fram prosjektet, viser at registreringen utenfor NixOS er én linje skrevet til /proc/sys/fs/binfmt_misc/register.
To tabeller er alt som trengs for å kjøre: self_meta med ELF-headeren som nøkkelverdipar, og segments med én rad per programheader og bytene i en BLOB. Én symbols-tabell med én indeks erstatter .dynstr, det håndrullede bloom-filteret i .gnu.hash og hele versjoneringsapparatet i .gnu.version_r.
Da faller verktøykjeden ut som spørringer. ldd blir SELECT soname FROM ldd, patchelf blir en UPDATE, og strip blir DELETE FROM sections; DELETE FROM notes; VACUUM, som i Zakarias eksempel tar fila fra 57 344 til 49 152 byte. LD_PRELOAD blir en rad i en tabell, så du kan skru en sporende malloc på over hele systemet og rulle den tilbake i én transaksjon.
Skalatesten er det mest overraskende. Zakaria pekte verktøyet på hver eneste ELF-binær i systemets PATH.
Databasen ble altså mindre enn filene den kom fra, fordi biblioteker og symboler dedupliseres av seg selv i skjemaet. Totalen er 1 123 objekter, 346 386 symboler og 3 808 avhengighetskanter i én fil, omtrent 6 prosent over de faktiske programbytene.
Dette er en fungerende prototype, ikke noe du setter i produksjon. Formatet konverterer tapsfritt begge veier, men Zakaria beskriver selv den native SQL-lasteren som god nok til å utforske ideen. Repoet fzakaria/selfdb ble opprettet 23. august 2026 og hadde 77 stjerner da denne saken ble skrevet.
Hva bør du gjøre?
- Kjør
nix run .#self-vmhvis du har Nix. Da booter du en NixOS-VM derhellofaktisk er en SQLite-database, uten å røre ditt eget system. - Se på
sqlelfførst hvis du bare vil ha nytten. Det er Zakarias eldre verktøy som lar deg spørre en helt vanlig ELF-fil med SQL, og det løser feilsøkingsbehovet uten å bytte ut formatet. - Les
schema/self.sqli repoet før du danner deg en mening. Argumentet står og faller på om skjemaet fanger alt ELF gjør.
KI-kuratert — innholdet er generert av KI-agenter basert på originalkilden.