01.05 — Posture politique du projet#
Le Holy Book ne sépare pas la philosophie de la politique du dépôt lui-même. Cinq engagements opérationnels en découlent.
1. Incorruptibilité#
« Transmettre Ocarina, c’est transmettre une voiture dont j’ai fait tout l’entretien moi-même, pour moi-même, donc très précautionneusement. En revanche, elle est et restera transmise telle quelle. C’est ma voiture. »
« J’y ai canalisé toute ma colère, pour y mettre tout mon amour. »
« Ocarina a une direction. Ceux qui souhaitent l’emmener ailleurs avec leurs vues de l’esprit sont libres d’en faire un fork et de ne jamais me contacter. »
Conséquences pratiques :
- Refus des contributions « stylées ». La phrase de DHH est citée comme aval : « Fuck You. »
- Refus assumé des PRs / issues non alignées. « aucun regret à fermer toute PR ou issue inutile. »
- Refus de la « gouvernance démocratique du code ». Le projet est explicitement souverain.
Aucune contribution n’est exclue a priori : la barrière à l’entrée est l’alignement avec la direction.
2. Anti-hype#
« Ce même décembre 2025, cette startup dont le nom sera tu était présentée dans certains médias comme “le test IA No-Code qui ridiculise Selenium et fait trembler BrowserStack”. Rien que ça. »
« Pour autant, rien de cela ne coupera Ocarina d’une vision qui se développe depuis plus de 15 ans, loin de l’arrogance de tous ces enfants de la hype. »
- Aucune dépendance « branchée » sans valeur fondamentale. Une seule dépendance d’exécution (
python-docx). - Le projet revendique sa filiation à un héritage ancien (ISTQB, ROP, λ-calcul).
- Le terme « pamphlet » est revendiqué (« n’importe quel projet “cutting-edge”, quel qu’il soit, démarre d’un pamphlet, est identitaire et passe par une étape de réel anti-marketing. »).
3. Anti-slipologues#
Slipologue = celui qui prétend « tout savoir » sans pratique, et qui pollue les discussions techniques avec des vues de l’esprit.
« Pendant trop longtemps, l’informatique a été prise en otage par une minorité, un “1%”, qui a cru bon de la transformer en terrain de jeux pour initiés : “trucs de geeks”, “techniques de ninjas”, “orienté objet”. Le verdict est sans appel : ça ne tient pas, ou alors très mal. »
Et :
« Tout comme l’IA, qui achève tranquillement de rendre la capacité de nuisance de ce “1%” obsolète. »
Conséquences pratiques :
- Pas d’event-driven programming comme nouvelle religion.
- Pas d’orienté objet déclaratif.
- Pas de Rust « pour la performance » (cf.
03-kiss-and-complexity.md).
4. Anti No-Code, Code is Law#
« Le code est une donnée brute. Auditable. Consultable. Une boîte blanche. Très exactement ce avec quoi l’IA sait travailler depuis ses débuts. »
Et :
« Toujours est-il que le code est ce que l’on a de plus souverain, et qu’une promesse de valeur consistant à nous le retirer nous fait nous pincer le nez. »
Conséquences pratiques :
- Tout le code utilisateur d’Ocarina est du Python : auditable, copiable, exécutable sans plateforme tierce.
- Le framework est explicitement portable « sans installation » : « pour les scénarios les plus extrêmes : Ocarina n’a pas besoin d’être installé. Il se copie, s’adapte, et tourne. »
- Pas de SaaS associé. Pas de cloud runner propriétaire.
5. Refus permanent d’async/await#
« Ocarina ne supporte pas
async/awaitet ne le fera jamais. »
Justifications matérialisées :
| Raison | Détail |
|---|---|
| Selenium est synchrone | Pas d’API async native ; tout async au-dessus serait une couche d’enrobage stérile. |
requests, redis synchrones | L’écosystème ciblé (HTTP, Redis, fichiers) tient en synchrone sans coût. |
| Lisibilité | Un scénario async impose des await au milieu, casse la grammaire visuelle « ouverture → acts → fermeture ». |
| Concurrence couverte par threads | Le ThreadPoolExecutor + le WebDriversPool (Semaphore) couvrent les besoins de parallélisation. Pas besoin d’asyncio. |
| Verrous distribués via Redis | Pour les besoins multi-process, c’est Redis qui coordonne (OTP_SEND_LOCK_KEY, etc.), pas une event loop. |
6. Sécession#
« Aujourd’hui les gens lancent des projets comme on descend de chez soi acheter un paquet de clopes. (…) Ils se croient malins : la réalité est que tout VC, tout LP, tout le monde, en est bien conscient et chacun tient son rôle dans un jeu de dupes. »
Conséquence : Ocarina est publié sous le nom d’auteur d’Igor Casanova, sans entité commerciale derrière, sans promesse de support, sans roadmap publique. Le dépôt est mis à disposition « tel quel » au sens MIT du terme.
« Quant à moi, je n’ai rien à perdre en termes de réputation puisqu’il n’y a pas de réputation à construire sous ce nom. Uniquement un message à livrer, tel qu’il est, sans filtre. »
7. Refus des « tricks/hacks » (côté projet IA)#
Le CLAUDE.md d’ocarina-with-ai-example détaille la mise en pratique :
« No tricks or hacks. JS-clicks to skip hit-testing,
# noqato silence a rule,time.sleepto mask a race,driver.implicitly_waitto patch a timing bug. If a hack is genuinely the only option, document why no clean fix exists and mark it so a reader doesn’t copy the pattern. »
C’est la mise en discipline des principes ci-dessus dans une suite réelle.
Contre-exemple cité :
« The JS-click-for-logout incident is the canonical anti-example:
ElementClickInterceptedExceptionhad a clean polling fix; the JS click hid the problem. »
Tableau de synthèse#
| Refus | Mécanisme code | Lien |
|---|---|---|
async/await | Threads + Semaphore + Redis | ../02-ocarina/10-infra/01-drivers-pool.md, ../07-ocarina-example/08-caches-locks.md |
| Plugin pytest | Runner intégré (bootstrap) | ../02-ocarina/11-opinionated/06-bootstrap-launcher.md |
| DSL textuel | DSL Python embedded | ../02-ocarina/03-railway/ |
| Programmation réactive dans les scénarios | Cache + clés réservées | ../07-ocarina-example/08-caches-locks.md |
# noqa muet | Toujours explicite et local | pyproject.toml#tool.ruff |
| Contributions « stylées » | Modèle MIT take it or fork it | — |
| JS-click pour bypasser le hit-testing | Polling propre | ../08-ai-example/ |
time.sleep pour masquer une race condition | Polling explicite via WebDriverWait | id. |
driver.implicitly_wait patché hors framework | Géré uniquement par --wait-timeout du CLI | ../02-ocarina/11-opinionated/03-selenium-cli.md |
Mot de la fin#
« Ocarina n’est pas et ne sera JAMAIS une solution pontifiante. » « Ocarina est et RESTERA une solution pour résoudre des problèmes concrets. »
Cette posture politique a un effet pratique direct sur ce qui mérite d’être lu en profondeur : le code source plutôt qu’un changelog, le Holy Book plutôt qu’un blog post marketing. C’est la promesse d’auditabilité de ../11-independence/02-auditability.md