Un système d’exploitation où l’autorité est détenue, pas présumée
Presque toutes les intrusions fonctionnent pareil : un programme atteint quelque chose qu’il n’aurait jamais dû toucher. ParanoidBSD est un système d’exploitation construit pour qu’il ne le puisse pas. Chaque programme ne reçoit que ce dont il a besoin, et tout le reste n’est pas seulement interdit — il est hors de portée. Bâti sur HardenedBSD, réécrit en C++ moderne, avec l’original conservé à côté pour que chaque changement puisse être vérifié contre lui.
Ce que c’est, en une minute
Un système d’exploitation se trouve sous tout le reste de ce qu’une organisation fait tourner. La plupart reposent sur des décennies de code ancien, et laissent n’importe quel programme demander n’importe quoi — le système décide après coup s’il autorise. C’est pour ça qu’une seule faille dans quelque chose d’anodin, comme le code qui dessine une police à l’écran, peut finir en mots de passe volés.
ParanoidBSD change, dès le départ, ce qu’un programme est capable de demander. Plutôt que de vérifier la permission après la demande, il remet à chaque programme une courte liste de ce qu’il peut toucher, et ne lui donne aucun moyen de nommer autre chose. Une faille dans une partie cesse d’être un chemin vers le reste.
Les fournisseurs de la défense et de l’État à qui l’on demande désormais du logiciel écrit dans des langages plus sûrs. Les équipements qui restent des années sur le terrain et qu’on ne peut pas corriger vite — automates d’usine, machines médicales, matériel des réseaux publics. Les enseignants et les chercheurs qui veulent un vrai système d’exploitation, assez petit pour être lu de bout en bout.
L’autorité ambiante est le bug qu’on ne peut pas corriger
Sur un Unix classique, un processus ne détient pas le droit d’ouvrir
/etc/master.passwd. Il se contente de demander, et le noyau tranche ensuite, selon l’identité que le processus revendique. Tout processus peut nommer n’importe quelle ressource du système. L’espace de noms est global et ambiant ; le contrôle n’est qu’une arrière-pensée tardive.
C’est pourquoi un seul bug d’analyse dans un moteur de rendu de polices peut devenir un vol d’identifiants. Le moteur de rendu n’a jamais eu besoin du fichier de mots de passe — mais rien dans l’architecture ne l’empêchait de le demander.
HardenedBSD fait déjà un travail sérieux ici : la randomisation de la disposition de l’espace d’adressage (ASLR), qui charge un programme à un endroit différent à chaque fois pour qu’un attaquant ne puisse pas deviner où se trouve quoi ; l’intégrité du flot de contrôle (CFI), qui empêche de détourner un programme vers du code qu’il n’a jamais été conçu pour exécuter ; et, à côté, des protections dérivées de PaX, SafeStack et des allocateurs mémoire durcis. PBSD garde tout cela et change la forme de la question sous-jacente — de “ce processus a-t-il le droit ?” à “ce processus détient-il un descripteur vers cela ?”
Deux façons de répondre à un même appel système
// Ambient authority — the traditional path int fd = open("/etc/master.passwd", O_RDONLY); // kernel walks a global namespace, then // checks uid/gid/MAC after the fact // Handle nucleus — the PBSD path auto f = dir_handle.open("master.passwd", Rights::Read); // there is no global namespace to walk. // no handle, no name, no operation.
Forme illustrative de la différence, pas une liste littérale des appels qu’un programme adresse au noyau — son interface de programmation applicative, ou API. Le modèle qui fait foi se trouve dans docs/.
Suivez un appel système à travers le noyau
Donnez des descripteurs au processus, choisissez ce qu’il doit tenter, et basculez entre les deux modèles d’autorité. Le verdict et le raisonnement sont calculés en direct dans votre navigateur — ceci est un modèle pédagogique de la conception, pas un émulateur de noyau.
Noyau de capacités — moniteur de référence
Le processus tente…
Trace
Descripteurs détenus par le processus
Verdict
“Atteignable” compte combien des opérations listées ce processus pourrait seulement effectuer sous le modèle courant. Sous l’autorité ambiante, l’atteignabilité est décidée par l’identité ; sous le noyau, par les descripteurs qu’il détient réellement.
pbsd/; la spécification est dans
docs/specs/.
Quatre étapes, et un modèle qui ne se certifie jamais lui-même
Porter à la main l’espace utilisateur et le noyau d’une Berkeley Software Distribution (BSD) vers C++23, c’est dix ans de travail. Le porter en demandant à un modèle de langage de réécrire les fichiers, c’est un moyen rapide de produire des ordures plausibles. PBSD ne fait ni l’un ni l’autre.
Inventaire
tools/inventory_c_sources.py et clang_cxx23_port.py notent chaque fichier C par difficulté et écrivent c_inventory.csv. Rien n’est deviné quant au périmètre.
Passes déterministes
run_todo_passes.py applique des réécritures mécaniques sûres, par paliers 0–4. Aucun modèle n’intervient. Tout ce qu’une passe refuse est consigné dans
refusals.jsonl plutôt que forcé.
Boucle d’agent
pbsd.py remplit les fichiers ébauchés et refusés avec DeepSeek Flash, en escaladant vers Pro à effort de raisonnement maximal — 48 workers Flash et 24 Pro par défaut.
C’est ce que finance le Kickstarter.
Contrôle de vérification
Compilation, ASan, UBSan, exécution différentielle et comparaison au niveau de la représentation intermédiaire (IR) du compilateur. Un fichier qui ne fait que compiler est
non vérifié. Les échecs atterrissent dans
agent_port_failures.jsonl.
Un portage est une affirmation d’équivalence
Dire qu’un fichier a été porté, c’est dire que le nouveau se comporte comme l’ancien. C’est une affirmation, et une affirmation demande des preuves. Une réécriture C++23 qui compile est un fil de fer à l’air plausible ; ce n’est pas encore le même démon.
Le signe égal est donc le contrôle. L’exécution différentielle lance les deux et compare le comportement observable. La comparaison d’IR vérifie qu’ils veulent dire la même chose pour le compilateur. Tant que l’un des deux n’est pas passé, le fichier reste ouvert dans le journal de migration et ne compte pas dans l’avancement — aussi fini qu’il en ait l’air.
Les règles auxquelles le dépôt est réellement tenu
Aucun fichier n’est fini tant que la vérification différentielle ou par IR n’est pas passée
Porter fidèlement — ne pas “corriger” en silence les bugs de l’original
L’outillage déterministe d’abord ; les modèles ne remplissent que le reste
Le C++ du noyau est autonome : -fno-exceptions -fno-rtti
docs/specs/KERNEL_CXX_ABI.md pour qu’un contributeur puisse savoir ce qui est légal en contexte noyau sans avoir à deviner.
Chaque module a besoin d’une entrée de provenance avant d’être compté comme fini
docs/PROVENANCE.md consigne d’où vient chaque module et sous quelle licence. C’est ce qui rend la déclaration de licence ci-dessous vérifiable plutôt que déclarative — vous pouvez contrôler, module par module, quel code est dérivé de HardenedBSD et lequel est du nouveau travail PBSD.
Deux licences, honnêtement séparées
Le nouveau code PBSD — le cœur du noyau, les modules C++23, l’outillage — est proposé aux conditions habituelles d’Imortek : la licence publique générale GNU Affero (AGPL-3.0+), gratuite pour l’usage personnel, les associations, l’enseignement et les organisations à moins de 50 000 dollars australiens (AUD) par an, avec une licence commerciale par paliers au-delà.
Le code dérivé de HardenedBSD reste sous sa licence BSD d’origine. Il ne peut pas être relicencié et Imortek ne prétend pas le faire. docs/PROVENANCE.md est le registre de ce qui relève de l’une ou de l’autre.
Nouveau travail PBSD
pbsd/, tools/, scripts/, le noyau de capacités, UDA, BIFROST, le compositeur et le thème.
Dérivé de HardenedBSD
hbsd/ et chaque fichier porté qui y remonte. Conditions d’origine, attribution d’origine.
Un système d’exploitation plus difficile à pénétrer
La plupart des intrusions exploitent le même genre d’erreur : un programme qui atteint de la mémoire qu’il n’aurait jamais dû toucher. ParanoidBSD reconstruit un système éprouvé dans un langage qui rend cette erreur bien plus difficile, et ne remet à chaque programme que les accès dont il a réellement besoin.
Fournisseurs de la défense et des administrations
Les acheteurs commencent à exiger des logiciels écrits dans des langages qui ferment des classes entières d’attaques. Repartir de zéro coûte dix ans. Ici, on fait plutôt traverser un système éprouvé, en gardant une trace écrite de chaque fichier modifié et de la façon dont ce changement a été contrôlé.
Des équipements qui restent des années sur le terrain
Automates d’usine, machines médicales, matériel de réseau public. Quand une faille apparaît, on ne peut souvent pas se contenter de pousser une mise à jour. Ceci limite jusqu’où va un intrus une fois entré, parce qu’aucun programme ne peut aller au-delà de ce qu’on lui a remis.
Universités et chercheurs en sécurité
Un vrai système d’exploitation, assez petit pour être lu de bout en bout, avec l’original à côté pour comparer. Utile pour enseigner et pour tester des idées sur quelque chose qui tourne vraiment.
Le portage tourne sur du calcul qu’il n’a pas
Les passes déterministes sont gratuites. La boucle d’agent qui remplit le résidu — et les exécutions de vérification qui la contrôlent — ne le sont pas. C’est toute la demande.