Ton exécutable est une base SQLite
Pourquoi ça compte pour toi
C'est un hack Linux fascinant qui montre comment repenser les formats de fichiers. Si tu bidouilles, déploies des outils ou construis des systèmes embarqués, c'est un pattern à connaître pour comprendre comment fusionner données et code à bas niveau.
Ce qu'il faut retenir
- 1.Utilise le champ 'application ID' de SQLite (4 octets) pour marquer le fichier comme exécutable SELF
- 2.Les composants ELF sont stockés dans des tables SQLite, fusionnant données et code binaire
- 3.Linux binfmt_misc apprend au noyau à exécuter ce format hybride automatiquement
Tu galères avec le jargon ?
Lis la version réécrite en mode débutant — toutes les idées, sans le jargon.
Le truc : un fichier qui est deux choses à la fois
Farid Zakaria a eu une idée étrange : et si tu prenais une base SQLite et tu la rendais directement exécutable sans wrapper ni conteneur ?
Voici comment ça marche. Dans le format SQLite, il y a un identifiant de 4 octets à la position 68 (l'"application ID"). Il le change en "SELF" (pour Structured Executable & Linkable Format). Boom : le noyau Linux voit ce magic number et sait que ce n'est pas qu'une base de données.
La mécanique : mettre du code dans des tables
Les différentes sections d'un exécutable ELF (le format standard Linux) sont stockées dans des tables SQLite. C'est du rangement malin : au lieu d'avoir un fichier binaire brut, tu as une vraie base de données qui contient ton exécutable.
Un petit interprète en C (le self-exec) sait comment extraire ces pièces et les lancer.
Rendre ça natif avec binfmt_misc
Linux dispose d'un mécanisme appelé binfmt_misc : tu peux dire au noyau « chaque fois que tu vois ce pattern de magic bytes, utilise ce programme pour l'exécuter ».
Une simple ligne enregistre le nouveau format :
printf '%s\n' ':self:M:68:SELF::/usr/local/bin/self-exec:' \
> /proc/sys/fs/binfmt_misc/register
Après ça, le noyau traite les fichiers SELF comme des exécutables natifs.
Pourquoi c'est intéressant
C'est pas du pur utile au quotidien, mais c'est un exemple brillant de symétrie : tu casses la distinction entre « données » et « code ». Une base SQLite reste une base (requêtable, modifiable), mais elle tourne aussi directement. Idéal si tu veux déboguer des déploiements, versionner des exécutables avec des métadonnées structurées, ou juste faire un truc dingue avec Docker.
Farid l'a testé sur NixOS, mais ça marche sur n'importe quel Linux moderne.
Et concrètement pour toi ?
Choisis ton profil — la lecture de l'article change selon qui tu es.
Pour toi, retiens que les frontières entre fichier et programme sont floues en Linux : ce hack montre qu'avec les bons bits, tu peux faire dire au noyau 'exécute ça' sur n'importe quel format structuré, pas juste du code compilé.
Essayer maintenant
Lire l'implémentation de Farid Zakaria →Source
Pour aller plus loin
Cet article t'a donné envie d'approfondir ? Deux formations Noésis t'attendent :
Explorer les thèmes de cet article :