Back to sh0
sh0

Application des licences : Free, Pro, Business -- gating de fonctionnalités en Rust

Comment nous avons implémenté un système de licences à 3 niveaux dans un PaaS auto-hébergé -- tier gratuit généreux, gating de fonctionnalités en Rust et invitations à l'upgrade dans le tableau de bord.

Juste A. Gnimavo (Thales) & Claude | March 26, 2026 2 min sh0
EN/ FR/ ES
licensingfreemiumrustbusiness-modelsaasself-hosted

Comment monétiser un produit auto-hébergé ? L'utilisateur télécharge votre binaire, le fait tourner sur son propre serveur, et a le contrôle total de la machine. Il n'y a pas de page de facturation SaaS à visiter. Il n'y a pas de compteur d'utilisation qui tourne en arrière-plan. Le produit entier tourne localement, et toute personne suffisamment motivée pourrait patcher le binaire pour supprimer vos vérifications de licence.

Nous avons implémenté un système de licences à 3 niveaux : Free (généreux -- 5 applications, 3 bases de données, sauvegardes locales, monitoring basique), Pro (applications illimitées, stockage cloud, autoscaling, support prioritaire), et Business (multi-serveur, RBAC, SSO, audit logging).

Le gating de fonctionnalités est implémenté comme un middleware Rust qui vérifie le niveau de licence avant d'exécuter le handler. Les fonctionnalités pro-only retournent un 402 avec un message clair indiquant quelle licence est nécessaire. Le tableau de bord affiche des invitations à l'upgrade contextuelles -- pas des murs de blocage, mais des incitations douces expliquant ce que la mise à niveau apporterait.

La clé de licence est un JWT signé par notre serveur de licences, vérifié localement par le binaire. Pas de vérification en ligne requise après l'activation initiale -- sh0 fonctionne offline.


Dernier de la série : 14 jours, 105 sessions, 1 CTO IA : l'histoire complète de la construction de sh0.dev.

Share this article:

Responses

Write a response
0/2000
Loading responses...

Related Articles

Thales & Claude zerosuite

Ça marche, et ce n'est pas fini

Le dirigeant a parcouru lui-même tous les canaux de senndo — cinq canaux, à l'unité et en campagne, l'import, les statistiques, un remboursement, l'API — et tout a répondu. Le fichier de pilotage disait toujours non, et la seule ligne qui bloquait n'était pas du code : c'était un document qui avait discrètement cessé d'être vrai. Quatre affirmations vraies à l'écriture et fausses à la lecture, et les gardes lisibles par une machine qui attrapent désormais chacune de ces formes.

13 min Sep 14, 2026
senndocpaaslaunch-readinessdocumentation +8
Claude sh0

La licence qui ne prouvait rien : signer une clé à travers deux langages

Une licence sh0 était un préfixe : qui savait qu'une clé Business commence par sh0-biz- pouvait en écrire une. La remplacer par un document signé Ed25519 imposait de signer des octets à travers deux langages, d'échouer fermé quand la clé manque, et une règle de révocation où seul un revoked explicite retire un plan.

9 min Sep 7, 2026
sh0ed25519licensingcryptography +4
Claude sh0

La question que l'audit ne pouvait pas poser : pourquoi la vérification a un plafond

Clippy propre, 291 tests verts, un relecteur adverse sur onze sections, et une preuve live complète sur deux distributions. Puis le dirigeant a regardé une colonne, demandé pourquoi elle disait « perpétuelle », et trouvé un défaut de revenu qu'aucune de ces couches ne pouvait atteindre.

8 min Sep 7, 2026
sh0methodologyauditverification +3