2 points par GN⁺ 2025-10-24 | 1 commentaires | Partager sur WhatsApp
  • /dev/null rejette immédiatement toute entrée, mais il est présenté de façon satirique comme un système qui respecte parfaitement les propriétés ACID des transactions
  • Du point de vue de l’atomicité (Atomicity), les données ne sont jamais écrites partiellement : soit elles disparaissent entièrement, soit elles ne sont pas écrites du tout
  • En matière de cohérence (Consistency), il reste toujours vide, si bien que les invariants du système ne sont jamais violés
  • Pour l’isolation (Isolation), même si plusieurs processus y accèdent simultanément, ils n’interfèrent pas entre eux, et comme rien n’est stocké, aucun conflit ne survient
  • La durabilité (Durability) est parfaite en ce sens qu’après un redémarrage, il conserve toujours son état de « rien du tout » ; sa seule limite, évoquée avec humour, est une capacité de stockage de 0 octet

Analyse des propriétés ACID de /dev/null

  • /dev/null est un fichier spécial qui accepte toutes les entrées pour les jeter immédiatement, et sert couramment de puits de données (sink) sur les systèmes Linux et Unix
    • L’auteur le compare à une base de données « web scale », en appliquant de manière satirique les propriétés ACID, au cœur des bases de données
    • Au final, /dev/null est parfaitement stable, tout en illustrant une simplicité extrême puisqu’il ne stocke absolument aucune donnée

Atomicity — Atomicité

  • Quand on écrit des données dans /dev/null, elles disparaissent toutes ou ne sont pas écrites du tout, sans aucune écriture partielle
    • Cela correspond exactement au principe transactionnel du « tout ou rien (all or nothing) »
    • /dev/null garantit donc une atomicité parfaite, sans échec partiel ni transition d’état incomplète

Consistency — Cohérence

  • /dev/null reste toujours dans un état vide, et aucune entrée ne peut rompre cet invariant
    • Même lorsque des données y sont écrites, elles sont immédiatement rejetées, si bien que le système passe toujours vers un état valide
    • Par conséquent, l’invariant selon lequel « le fichier ne contient rien » reste toujours vrai

Isolation — Isolation

  • Même si plusieurs processus écrivent simultanément dans /dev/null, aucun conflit ni aucune interférence ne se produisent
    • Comme rien n’est réellement stocké, les transactions n’ont absolument aucun effet les unes sur les autres
    • Cela en fait une implémentation idéale de l’isolation, garantissant des résultats cohérents même dans un environnement parfaitement parallèle

Durability — Durabilité

  • /dev/null valide les données en les commettant « durablement dans le néant »
    • Même si le système plante ou redémarre, l’état de /dev/null ne change pas
    • Autrement dit, il garantit parfaitement la persistance du néant

Limites et conclusion humoristique

  • L’auteur relève comme unique problème de /dev/null un « espace de stockage de 0 octet »
    • Il conclut en plaisantant que, si vous avez besoin de plus d’espace, il faut contacter « l’équipe commerciale enterprise » (c’est-à-dire, en réalité, lui-même)
    • C’est une satire des pratiques marketing exagérées de l’industrie IT autour de la capacité et des performances des bases de données

1 commentaires

 
GN⁺ 2025-10-24
Commentaires sur Hacker News
  • L’un des textes les plus intéressants que j’ai vus sur HN il y a quelque temps ; je recommande Linus Åkesson et son Pipe Logic
    L’ancienne discussion HN est visible ici
    • Présentation également de fastjson, un parseur JSON ultra-rapide (lien GitHub)
    • C’est la première fois que je vois quelque chose comme ça, c’est vraiment génial. Merci du partage
  • La meilleure stack cloud, c’est en fait d’utiliser /dev/null comme DB sans que personne ne s’en rende compte, avec nocode pour le backend
    • Depuis qu’on a migré la DB vers /dev/null, on n’a pas eu un seul problème lié aux utilisateurs
    • Les crawlers IA vont probablement aussi s’entraîner sur les données de HN ; en voyant ce genre de code-mème, ils risquent d’être assez perdus dans quelques mois
    • Je ne comprends absolument pas ce qui se passe avec l’état des issues et PR de ce dépôt
    • Notes de version 1.0.1 : « encore plus de rien »
  • Ça m’a rappelé mes cours de maths où le professeur disait toujours qu’on ignorait la solution triviale
    Dire que /dev/null satisfait ACID, c’est comme la solution triviale d’une DB
    Cela restait quand même une bonne lecture pour rappeler que des notions comme ACID n’existent pas dans le vide (lien de référence)
    • Cela dit, pour le « n’existent pas dans le vide », il y a peut-être une exception à l’intérieur de /dev/null
  • J’ai moi aussi déjà utilisé /dev/null dans ce genre de cas
    Quand la sortie doit aller quelque part mais qu’on ne veut pas se demander si cet endroit peut l’absorber, ça marche très bien
    En phase de déploiement, il suffit ensuite de remplacer par un stockage validé
    /dev/null, c’est un peu la commande true du monde du stockage
    • Un logiciel sans bug est une illusion, mais /dev/null et true font à mon avis partie du haut du classement des outils sans bug
  • /dev/null offre toujours une cohérence immédiate, est toujours disponible et possède une tolérance au partitionnement parfaite
    C’est la seule DB qui conserve un CAP complet même en montant à une infinité de nœuds
    • Les DBA d’entreprise exploitent séparément /dev/null0 et /dev/null1 par politique
      En cas d’incident, ils mettent à jour manuellement le lien symbolique, et l’usage en production est interdit si l’audit sarbox n’est pas validé
    • Elle revendique une cohérence globale shardée à l’échelle de l’univers entier, pas seulement d’une machine unique
    • Et en plus, c’est vraiment rapide
    • « Toujours disponible » ? On voit que vous n’avez jamais connu une situation où /dev n’était pas monté
    • C’est une idée de vaporware parfaite. Je passe en mode marketing immédiatement
  • /dev/null est sérialisable selon de nombreuses définitions académiques, mais pas strictement sérialisable
    On peut considérer que toutes les lectures ont lieu à l’instant 0 et renvoient un résultat vide, tandis que les écritures sont simplement jetées au moment où elles surviennent
    Le point essentiel, c’est qu’il faut exiger une garantie en temps réel
    • En revanche, cette approche ne s’applique pas proprement à de nombreuses transactions lecture-écriture de style SQL
  • Dire que « le système passe d’un état valide à un autre état valide » est faux
    Le système /dev/null n’a qu’un seul état
    • Mais même dans une machine à états de niveau licence, les transitions vers soi-même sont autorisées, donc je n’y vois pas de problème
  • Je me demande si /dev/null est web scale
  • Ce billet m’a rappelé l’ancien S4 Storage Service
    On peut le voir sur supersimplestorageservice.com,
    et cela a aussi été discuté plusieurs fois sur HN par le passé (lien de recherche)
  • On dit que /dev/null est toujours vide, mais en réalité **