{"id":11368,"date":"2026-08-27T19:27:21","date_gmt":"2026-08-27T23:27:21","guid":{"rendered":"https:\/\/gillesenvrac.ca\/carnet\/?page_id=11368"},"modified":"2026-10-18T19:40:38","modified_gmt":"2026-10-18T23:40:38","slug":"protocole-at-et-bluesky","status":"publish","type":"page","link":"https:\/\/gillesenvrac.ca\/carnet\/trad\/protocole-at-et-bluesky\/","title":{"rendered":"Ce que j\u2019aurais aim\u00e9 que quelqu\u2019un me dise au sujet du protocole AT et de Bluesky"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Traduction de <a href=\"https:\/\/blog.ricci.io\/what-i-wish-someone-had-told-me-about-at-protocol-and-bluesky-2wjwbg2\">What I Wish Someone Had Told Me About AT Protocol and Bluesky<\/a> par Rob Ricci le 25 ao\u00fbt 2026<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c7a fait environ un an que je m\u2019int\u00e9resse \u00e0 <a href=\"https:\/\/atproto.com\/\">atproto<\/a> (le protocole sur lequel fonctionnent Bluesky, Blacksky et de nombreuses autres applications \u2014 dont <a href=\"https:\/\/pckt.blog\/\">pckt<\/a>, o\u00f9 ce blogue est h\u00e9berg\u00e9! \u2014). Je ne suis en aucun cas un expert, mais j\u2019ai lu beaucoup de documentation et de discussions, examin\u00e9 diverses versions des sch\u00e9mas architecturaux et pass\u00e9 beaucoup de temps \u00e0 r\u00e9fl\u00e9chir aux implications en mati\u00e8re d\u2019\u00e9volutivit\u00e9, de d\u00e9centralisation et d\u2019autres aspects de la conception et de l\u2019exploitation. Je g\u00e8re mon propre PDS. J\u2019ai \u00e9crit quelques clients qui r\u00e9cup\u00e8rent les flux de donn\u00e9es provenant des relais et analysent ces donn\u00e9es. Je pensais avoir une assez bonne ma\u00eetrise du sujet.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Et puis, un dimanche matin, certains services de Bluesky ont connu une panne pendant quelques heures. On en apprend beaucoup plus sur un syst\u00e8me \u00e0 partir de ses d\u00e9faillances qu\u2019\u00e0 partir de son fonctionnement normal, et j\u2019ai appris que bon nombre des choses que je croyais savoir n\u2019\u00e9taient pas \u2013 pas tout \u00e0 fait fausses, mais tout de m\u00eame incompl\u00e8tes pour comprendre comment cet \u00e9cosyst\u00e8me fonctionne r\u00e9ellement dans la pratique.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Je me suis senti un peu b\u00eate d\u2019avoir mis autant de temps \u00e0 apprendre certaines de ces choses, ou du moins \u00e0 vraiment en saisir la port\u00e9e. Ce ne sont pas des secrets, ni rien de ce genre. Il ne s\u2019agit pas non plus de laver le linge sale de l\u2019\u00e9cosyst\u00e8me en public. Beaucoup de gens savaient d\u00e9j\u00e0 tout \u00e7a. Mais moi, je ne le savais pas, et peut-\u00eatre que vous non plus, et c\u2019est pour \u00e7a que je les note ici.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Quand on s\u2019initie au Web, on apprend souvent le HTML, le CSS, le HTTP(s), et cela suffit pour cr\u00e9er et h\u00e9berger des applications Web. Mais ensuite, quelque chose ne fonctionne pas, et\u2026 on d\u00e9couvre le DNS. Parce que <a href=\"https:\/\/isitdns.com\/\">c\u2019est toujours le DNS<\/a>. Non pas parce que le DNS est mauvais (bon, peut-\u00eatre un peu, \u00e0 certains \u00e9gards), mais parce qu\u2019il est au c\u0153ur du syst\u00e8me et qu\u2019il constitue l\u2019un des endroits o\u00f9 se cache une grande partie de la complexit\u00e9 d\u2019Internet. Quand \u00e7a fonctionne, c\u2019est g\u00e9nial. Quand \u00e7a ne fonctionne pas \u2013 ou que \u00e7a fonctionne comme pr\u00e9vu, mais pas comme vous le pensiez \u2013, eh bien, c\u2019est le moment de vous familiariser avec le DNS. D\u00e9sol\u00e9.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ceci ne sera pas un aper\u00e7u d\u2019atproto, et n\u2019a pas non plus pour but d\u2019en offrir une vue d\u2019ensemble exhaustive. Je vais \u00e9crire en supposant que vous (pensez) conna\u00eetre l\u2019architecture \u00e0 un niveau comparable, disons, \u00e0 celui de l\u2019article de Dan Abramov intitul\u00e9 \u00ab <u>There Are No Instances In atproto<\/u> \u00bb<sup id=\"mfn-content-00000000000008600000000000000000_11368-1\" class=\"modern-footnotes-footnote modern-footnotes-footnote--hover-on-desktop \" data-mfn=\"1\" data-mfn-post-scope=\"00000000000008600000000000000000_11368\"><a href=\"javascript:void(0)\"  role=\"button\" aria-pressed=\"false\" aria-describedby=\"mfn-content-00000000000008600000000000000000_11368-1\">1<\/a><\/sup><span role=\"tooltip\" class=\"modern-footnotes-footnote__note\" tabindex=\"0\" data-mfn=\"1\">Voir <a href=\"https:\/\/gillesenvrac.ca\/carnet\/pas-dinstances-dans-atproto\/\">ma traduction<\/a> GB<\/span>, qui est une excellente lecture.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Je tiens \u00e0 pr\u00e9ciser, encore une fois, que je ne suis pas un expert en la mati\u00e8re. J\u2019ai observ\u00e9 des comportements, lu du code, examin\u00e9 des sp\u00e9cifications, mais il y a d\u2019autres personnes qui connaissent ce sujet bien mieux que moi. Je suis ouvert aux corrections, aux nuances suppl\u00e9mentaires, etc., et je mettrai ce billet \u00e0 jour. Je tiens \u00e9galement \u00e0 pr\u00e9ciser que je d\u00e9cris le fonctionnement <em>actuel<\/em>, au mieux de mes capacit\u00e9s. D\u2019apr\u00e8s ce que j\u2019ai compris en discutant avec certains membres de l\u2019\u00e9quipe atproto, ce n\u2019est pas n\u00e9cessairement ainsi que le syst\u00e8me est <em>con\u00e7u<\/em> pour fonctionner, et certains \u00e9l\u00e9ments ici sortent, en quelque sorte, du cadre d\u2019atproto lui-m\u00eame pour \u00eatre sp\u00e9cifiques \u00e0 Bluesky. Mais on dispose du syst\u00e8me qu\u2019on <em>construit<\/em>, et non de celui qu\u2019on <em>con\u00e7oit<\/em>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Voyons donc ce qui a \u00e9t\u00e9 mis en place.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Le PDS ne se trouve pas tout \u00e0 fait l\u00e0 o\u00f9 je le pensais<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Dans le sch\u00e9ma architectural standard, on voit un r\u00e9f\u00e9rentiel (repo) dans un PDS, les donn\u00e9es circulent (peut-\u00eatre via un relais) vers un AppView qui agr\u00e8ge les donn\u00e9es provenant de plusieurs r\u00e9f\u00e9rentiels, et l\u2019application elle-m\u00eame communique avec l\u2019AppView pour obtenir cette\u2026 euh, vue.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cette derni\u00e8re \u00e9tape omet quelque chose.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dans bien des cas (mais pas toujours!), l\u2019application communique en fait avec le PDS, et non (directement) avec l\u2019AppView.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Le PDS <em>agit comme interm\u00e9diaire<\/em> pour le trafic de l\u2019application vers l\u2019AppView. Lorsqu\u2019une application souhaite effectuer un appel d\u2019API vers l\u2019AppView, elle communique avec le PDS de l\u2019utilisateur, qui, la plupart du temps (attendez, j\u2019y reviendrai dans une minute), transmet cet appel \u00e0 l\u2019AppView et renvoie la r\u00e9ponse.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il y a de bonnes raisons de proc\u00e9der ainsi. L\u2019une des principales est l\u2019authentification : l\u2019utilisateur, par l\u2019interm\u00e9diaire de l\u2019application, s\u2019authentifie aupr\u00e8s du PDS, qui d\u00e9tient les cl\u00e9s permettant d\u2019authentifier l\u2019utilisateur aupr\u00e8s du reste du r\u00e9seau. Ainsi : une requ\u00eate arrive de l\u2019application, le PDS sait qu\u2019elle provient bien de l\u2019utilisateur puisqu\u2019elle s\u2019inscrit dans une session authentifi\u00e9e. Le PDS g\u00e9n\u00e8re un jeton capable de prouver \u00e0 l\u2019AppView que la demande provient bien de l\u2019utilisateur, et l\u2019envoie avec la demande. Le client n\u2019a ainsi pas \u00e0 se soucier de toute une s\u00e9rie de d\u00e9tails complexes li\u00e9s aux cl\u00e9s, aux port\u00e9es, aux audiences, etc. G\u00e9nial! Vous avez une application complexe qui doit communiquer, de mani\u00e8re authentifi\u00e9e, avec toute une s\u00e9rie de services diff\u00e9rents? C\u2019est le probl\u00e8me du PDS. S\u2019assurer que les jetons n\u00e9cessaires pour communiquer avec chaque service restent valides avant leur expiration? C\u2019est le probl\u00e8me du PDS.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mais il y a une chose \u00e0 laquelle le sch\u00e9ma architectural standard ne vous pr\u00e9pare peut-\u00eatre pas : si votre PDS est hors service ou ne fonctionne pas correctement, l\u2019une des cons\u00e9quences possibles est que vous ne pourrez plus communiquer avec l\u2019AppView, m\u00eame si vous \u00eates d\u00e9j\u00e0 connect\u00e9.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Rien n\u2019<em>emp\u00eache<\/em> l\u2019application de communiquer directement avec l\u2019AppView, et, en fait, c\u2019est souvent ce qu\u2019elle fait pour les appels ne n\u00e9cessitant pas d\u2019authentification. Vous pouvez \u00e9galement demander au PDS de vous fournir les jetons n\u00e9cessaires, afin de les transmettre vous-m\u00eame \u00e0 l\u2019AppView. Mais certaines applications, du moins l\u2019application Bluesky (\u00e9galement appel\u00e9e \u00ab social-app \u00bb), sont con\u00e7ues pour utiliser le proxy.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Le PDS d\u00e9pend de l\u2019AppView de Bluesky \u2013 en quelque sorte<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">J\u2019ai parl\u00e9 de \u00ab l\u2019 \u00bb AppView, et j\u2019esp\u00e8re que cela vous a agac\u00e9, car, non, il n\u2019y a pas <em>l\u2019<\/em> AppView. Dans le cas particulier d\u2019une application ind\u00e9pendante de type Bluesky (comme Blacksky), plusieurs AppViews sont en cours d\u2019ex\u00e9cution et peuvent \u00eatre utilis\u00e9es. D\u2019une mani\u00e8re plus g\u00e9n\u00e9rale, d\u2019autres applications peuvent mettre en \u0153uvre leurs propres AppViews, dont les API sont tr\u00e8s diff\u00e9rentes de celles de l\u2019AppView de Bluesky, ou peuvent fonctionner sans aucune AppView.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mais.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il existe des appels que l\u2019on peut effectuer vers <em>une<\/em> AppView qui ressemble \u00e0 celle de Bluesky, par l\u2019interm\u00e9diaire du PDS, et qui sont vraiment utiles. Et donc, bien s\u00fbr, les applications les utilisent. Probablement m\u00eame si l\u2019application en question n\u2019est <em>pas<\/em> Bluesky, m\u00eame si (en fait, surtout si) l\u2019application ne dispose pas de sa propre AppView.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Un bon exemple en est <a href=\"https:\/\/endpoints.bsky.app\/#bluesky-app\/tag\/appbskyactor\/GET\/xrpc\/app.bsky.actor.getProfile\">getProfile<\/a> : les donn\u00e9es circulant dans Atmosphere font r\u00e9f\u00e9rence aux comptes par l\u2019entremise de leur did. Mais vous ne voulez pas voir le did dans l\u2019interface utilisateur; vous voulez voir des \u00e9l\u00e9ments comme le pseudonyme de l\u2019utilisateur et probablement obtenir d\u2019autres renseignements, comme son nom d\u2019affichage. Qui peut vous fournir ces renseignements? Eh bien, une solution consiste \u00e0 demander \u00e0 une AppView! Elle dispose d\u2019un point de terminaison d\u2019API qui vous le dira!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Comment le PDS sait-il \u00e0 quelle AppView envoyer cette demande? Eh bien\u2026<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Chaque demande comporte un <a href=\"https:\/\/atproto.com\/specs\/xrpc\">en-t\u00eate<\/a>, d\u00e9fini par l\u2019application, qui indique o\u00f9 elle doit \u00eatre achemin\u00e9e. Mais que se passe-t-il si l\u2019application omet cet en-t\u00eate? Le PDS de r\u00e9f\u00e9rence, fourni par Bluesky, a une AppView par d\u00e9faut configur\u00e9e \u2014 c\u2019est celle de Bluesky, bien s\u00fbr, mais vous pouvez la reconfigurer pour qu\u2019elle pointe vers une autre. Certaines autres impl\u00e9mentations de PDS semblent pr\u00e9senter ce m\u00eame comportement par d\u00e9faut \u2014 mais pas toutes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En effet, le fait que le PDS utilise par d\u00e9faut une AppView particuli\u00e8re lie en quelque sorte ce PDS \u00e0 cette AppView, n\u2019est-ce pas? D\u2019une certaine mani\u00e8re, cela surprend beaucoup la plupart des gens qui h\u00e9bergent leur propre PDS, et va \u00e0 l\u2019encontre de la vision du monde selon laquelle \u00ab il n\u2019y a pas d\u2019instances dans ATProto \u00bb.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Supposons que je mette en place mon propre PDS.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Je laisse les param\u00e8tres par d\u00e9faut tels quels. Eh bien, de nombreuses applications \u2014 y compris beaucoup qui ne sont pas Bluesky \u2014 finiront par envoyer une multitude d\u2019appels d\u2019API \u00e0 l\u2019AppView de Bluesky si elles n\u2019en ont pas sp\u00e9cifiquement demand\u00e9 une autre. Si l\u2019AppView de Bluesky est hors service, alors ces applications <em>ne fonctionnent pas chez moi \u00e0 cause d\u2019un param\u00e8tre de mon PDS.<\/em> Hum.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mais voyons \u00e0 quoi ressemble r\u00e9ellement ce sc\u00e9nario de d\u00e9faillance. L\u2019AppView de Bluesky est hors service, donc l\u2019application principale de Bluesky ne fonctionne pas. Mais je suis un gars cool, j\u2019ai mon propre PDS, et je sais que dans atproto, je peux simplement me connecter \u00e0 n\u2019importe quelle autre application avec le m\u00eame compte. Je me rends donc sur l\u2019<a href=\"https:\/\/blacksky.community\/\">application Web Blacksky<\/a> et je m\u2019y connecte. Mais certains des appels qu\u2019elle effectue (d\u00e9tails dans un instant) se rabattent sur l\u2019AppView par d\u00e9faut de mon PDS! Donc, \u00e7a ne fonctionne pas vraiment bien! Je dois reconfigurer mon <em>PDS<\/em> pour pouvoir utiliser correctement l\u2019application Blacksky! Les utilisateurs du PDS Blacksky s\u2019en sortent plut\u00f4t bien, car leur PDS (je suppose) pointe d\u00e9j\u00e0 vers l\u2019AppView de Blacksky!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Donc oui, je peux me connecter \u00e0 d\u2019autres applications avec mon compte unique, mais celles qui fonctionnent r\u00e9ellement d\u00e9pendent de\u2026 l\u2019endroit o\u00f9 mon compte est r\u00e9ellement h\u00e9berg\u00e9 et de la fa\u00e7on dont <em>celui-ci<\/em> est configur\u00e9.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ce n\u2019est pas vraiment le monde \u00ab sans instance \u00bb que nous pensions avoir, n\u2019est-ce pas?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bon. Alors, peut-\u00eatre que cette histoire d\u2019\u00ab AppView par d\u00e9faut \u00bb est une mauvaise id\u00e9e. Je connais au moins une impl\u00e9mentation de PDS qui n\u2019en dispose pas : on indique au PDS o\u00f9 les appels doivent \u00eatre redirig\u00e9s, sinon on obtient une erreur.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mais que faire, en tant qu\u2019application sans AppView propre, si le PDS auquel vous vous connectez n\u2019a pas d\u2019AppView par d\u00e9faut? H\u00e9, je veux juste obtenir des noms d\u2019affichage! Mais c\u2019est\u2026 pas clair. Toujours utiliser celle de Bluesky? Avoir une liste et en chercher une qui fonctionne? Laisser l\u2019utilisateur choisir? S\u2019y faire, vous devez avoir la v\u00f4tre? Autre chose? Quelle est cens\u00e9e \u00eatre la s\u00e9mantique ici?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Oh, et : j\u2019\u00e9cris tout \u00e7a en parlant de pannes. Mais diff\u00e9rentes AppViews peuvent renvoyer des donn\u00e9es diff\u00e9rentes, et (dans certaines r\u00e9gions du monde o\u00f9 il y en a une par d\u00e9faut), cela est d\u00e9termin\u00e9 par votre PDS, donc\u2026 ce que vous voyez r\u00e9ellement dans une application peut d\u00e9pendre de la fa\u00e7on dont votre PDS est configur\u00e9. Probablement pas ce \u00e0 quoi la plupart des gens s\u2019attendraient.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">RAW(r) : Certaines s\u00e9mantiques de l\u2019application Bluesky sont impl\u00e9ment\u00e9es dans le PDS<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Je croyais autrefois que le PDS n\u2019\u00e9tait qu\u2019un endroit o\u00f9 l\u2019on stockait les donn\u00e9es utilisateur et les cl\u00e9s. Comme nous l\u2019avons vu plus haut, ce n\u2019est pas tout. Et ce n\u2019est pas tout, car, en fait, le PDS impl\u00e9mente une partie de l\u2019application Bluesky.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Les appels vers le PDS ne servent pas <em>n\u00e9cessairement<\/em> uniquement de proxy vers une AppView ou un autre service. Certaines d\u2019entre elles ex\u00e9cutent localement une logique importante. Cela inclut celles auxquelles vous vous attendez probablement, comme la lecture ou l\u2019\u00e9criture dans un d\u00e9p\u00f4t.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mais il y en a d\u2019autres que j\u2019ai trouv\u00e9es surprenantes, et bon nombre d\u2019entre elles sont ax\u00e9es sur la lecture apr\u00e8s \u00e9criture (RAW). Voici pourquoi.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Vous r\u00e9digez le meilleur message farfelu au monde et cliquez sur \u00ab Envoyer \u00bb. Naturellement, vous voulez voir imm\u00e9diatement le fruit de votre travail. Mais ce n\u2019est pas ainsi que fonctionne atproto. Vous l\u2019enregistrez dans votre d\u00e9p\u00f4t. Il passe par le \u00ab firehose \u00bb, traverse un relais (probablement), atteint une AppView, est index\u00e9, et <em>ensuite seulement<\/em> les gens le voient lorsqu\u2019ils demandent \u00e0 l\u2019AppView (et\/ou \u00e0 un g\u00e9n\u00e9rateur de flux) quelque chose qui devrait le renvoyer. C\u2019est sacr\u00e9ment rapide la plupart du temps! Mais ce n\u2019est pas instantan\u00e9. Et parfois, le syst\u00e8me s\u2019engorge et cela peut prendre un certain temps. Je veux voir mon chef-d\u2019\u0153uvre maintenant!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Le PDS de r\u00e9f\u00e9rence est l\u00e0 pour vous aider <a href=\"https:\/\/github.com\/bluesky-social\/atproto\/tree\/615ac2a8cc72cd475dc4f06f743f2514d8afc6e0\/packages\/pds\/src\/read-after-write\">gr\u00e2ce \u00e0 ses optimisations RAW<\/a>. Parfois, pour certains appels, il d\u00e9tectera que l\u2019enregistrement que vous venez d\u2019\u00e9crire ne fait pas partie de la valeur de retour de l\u2019API, et il l\u2019y glissera discr\u00e8tement. L\u2019AppView a-t-elle affich\u00e9 une erreur 404 pour votre \u0153uvre? Le PDS cr\u00e9era un faux fil de discussion, rien que pour vous, juste pour le moment.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Je suis certain que cela a \u00e9t\u00e9 fait pour am\u00e9liorer la r\u00e9activit\u00e9. C\u2019est bien plus agr\u00e9able quand les choses se produisent imm\u00e9diatement, et le protocole lui-m\u00eame ne peut garantir les d\u00e9lais de livraison.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mais r\u00e9fl\u00e9chissons \u00e0 ce que cela signifie.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cela signifie que votre exp\u00e9rience de l\u2019application est, une fois de plus, d\u00e9termin\u00e9e par votre PDS. Vous utilisez une autre impl\u00e9mentation qui n\u2019utilise pas cette astuce? Elle vous semblera moins r\u00e9active, m\u00eame si elle transmet vos donn\u00e9es sur le r\u00e9seau tout aussi rapidement. Mais pire encore, cela int\u00e8gre davantage de s\u00e9mantique d\u2019application dans le PDS. <em>\u00c9tait-ce<\/em> cens\u00e9 que cet appel renvoie cet enregistrement? C\u2019est de la s\u00e9mantique d\u2019application! Le PDS doit savoir quels appels d\u2019API <em>devraient<\/em> renvoyer cet enregistrement, et comment. Et imaginons que Bluesky modifie son AppView pour ne plus joindre les r\u00e9ponses contenant l\u2019\u00e9moji &#x1f595; \u00e0 leurs messages parents? Pour vous, on aura l\u2019impression que vous avez r\u00e9ussi \u00e0 faire un doigt d\u2019honneur \u00e0 votre adversaire. Je vous ai eu!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">J\u2019ai d\u00e9lib\u00e9r\u00e9ment adopt\u00e9 un ton ludique dans cette section (et UNIQUEMENT dans cette section, bien s\u00fbr), mais le fond du probl\u00e8me est que les comportements r\u00e9els de l\u2019application r\u00e9sident dans le PDS : ce que vous voyez, quand vous le voyez, et m\u00eame si vous le voyez ou non, d\u00e9pend de votre PDS. Si Bluesky venait \u00e0 vouloir modifier quoi que ce soit \u00e0 ce sujet, ce que vous verriez d\u00e9pendrait de la mise \u00e0 jour de votre PDS, voire de la mise en \u0153uvre de ces fonctionnalit\u00e9s par celui-ci. Et si une autre application a besoin de ce genre de fonctionnalit\u00e9s ou pourrait en tirer profit? Elle devra convaincre Bluesky, et tous les autres, de les ajouter \u00e0 leurs impl\u00e9mentations du PDS.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">J\u2019ai vu des bogues que vous n\u2019auriez jamais imagin\u00e9s\u2026<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Avant de conclure, examinons un exemple illustrant comment tout ce flux de donn\u00e9es transitant par le PDS, ainsi que tout le traitement qu\u2019il effectue, peut donner lieu \u00e0 des bogues particuli\u00e8rement pernicieux.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dans l\u2019appel getFeed, il y a deux \u00e9tapes : rechercher le g\u00e9n\u00e9rateur de flux, puis le transmettre (ainsi qu\u2019un jeton qui lui est destin\u00e9) \u00e0 l\u2019AppView. Le PDS de r\u00e9f\u00e9rence de Bluesky pr\u00e9sente ce qui <em>semble<\/em> \u00eatre un bogue : la premi\u00e8re partie de ce processus ignore l\u2019AppView qu\u2019on lui a demand\u00e9 d\u2019utiliser via l\u2019en-t\u00eate de proxy, et <a href=\"https:\/\/github.com\/bluesky-social\/atproto\/blob\/615ac2a8cc72cd475dc4f06f743f2514d8afc6e0\/packages\/pds\/src\/api\/app\/bsky\/feed\/getFeed.ts#L26-L30\">se contente de communiquer avec l\u2019AppView par d\u00e9faut du PDS<\/a>. Alors, oui, en cas de panne de Bluesky? Lancez l\u2019application Blacksky, super, mais si votre PDS est toujours configur\u00e9 pour utiliser l\u2019AppView de Bluesky, vous ne pourrez pas charger les flux.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">J\u2019esp\u00e8re vraiment que c\u2019est un bogue, j\u2019esp\u00e8re vraiment qu\u2019il sera corrig\u00e9 et que je pourrai modifier ce paragraphe au pass\u00e9. Mais c\u2019est fou qu\u2019un bogue du PDS puisse avoir ce genre d\u2019effet.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Oh, et tant qu\u2019on y est, cette recherche de flux en deux \u00e9tapes avec le jeton suppl\u00e9mentaire, c\u2019est\u2026 ouais, une s\u00e9mantique propre \u00e0 l\u2019application Bluesky. Mais tous les PDS ont int\u00e9r\u00eat \u00e0 l\u2019impl\u00e9menter, sinon les gens qui tentent d\u2019utiliser Bluesky \u00e0 partir de ceux-ci risquent de ne pas pouvoir charger les flux. Ou du moins certains d\u2019entre eux.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Et ce n\u2019est pas comme \u00e7a que je pensais que \u00e7a fonctionnait.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Le PDS, c\u2019est l\u2019amour, le PDS, c\u2019est la vie<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Je me suis concentr\u00e9 sur le PDS ici parce que je croyais vraiment, sinc\u00e8rement, que le PDS \u00ab ne faisait que \u00bb stocker des donn\u00e9es et conserver mes cl\u00e9s priv\u00e9es. Je pensais qu\u2019en exploitant le mien, je m\u2019affranchissais de la d\u00e9pendance \u00e0 l\u2019infrastructure de Bluesky. Je pensais que le choix de l\u2019impl\u00e9mentation \u00e9tait surtout une question de go\u00fbt, et non pas un facteur d\u00e9terminant pour le fonctionnement des applications. Je croyais comprendre les sc\u00e9narios de d\u00e9faillance : que Bluesky pouvait tomber en panne, que je n\u2019avais qu\u2019\u00e0 passer \u00e0 une autre application, et que tout irait bien.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La r\u00e9alit\u00e9 n\u2019est pas aussi simple.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La derni\u00e8re interruption de service s\u2019est nettement mieux d\u00e9roul\u00e9e que les pr\u00e9c\u00e9dentes. Et je crois maintenant comprendre un peu pourquoi. Certaines personnes <em>ont<\/em> r\u00e9ussi, pour la plupart, \u00e0 simplement continuer d\u2019avancer. Mais cela d\u00e9pendait du PDS qu\u2019elles utilisaient, ce qui n\u2019est pas cens\u00e9 fonctionner ainsi. Les choses sont bien plus enchev\u00eatr\u00e9es qu\u2019elles ne le paraissent sur les sch\u00e9mas d\u2019architecture.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Et la quantit\u00e9 de s\u00e9mantique d\u2019application int\u00e9gr\u00e9e au PDS? Je ne m\u2019attendais pas \u00e0 \u00e7a.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">S\u2019il vous pla\u00eet, parlez-moi des autres \u00e9l\u00e9ments qui m\u2019\u00e9chappent. Je <em>crois<\/em> que je veux savoir (m\u00eame si ce n\u2019est peut-\u00eatre pas le cas).<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"has-text-align-center has-small-font-size wp-block-paragraph\">Fichier Excel des\u00a0<a href=\"https:\/\/1drv.ms\/x\/c\/52b2e58f9a01f490\/IQBNOTq3uISSRr4KrP9JoB-QAYl77ixhpKkjm1SZpu5-bUE?e=SAPhd3\">traductions<\/a> par\u00a0<em>Gilles en vrac<\/em> <br><a href=\"https:\/\/gillesenvrac.ca\/carnet\/trad\/\">Fiches<\/a> avec les premi\u00e8res phrases (et non seulement les titres)<br>Les<strong>\u00a0caract\u00e8res gras<\/strong>\u00a0dans le texte sont de Gilles.<\/p>\n<h3 class=\"modern-footnotes-list-heading \">Notes <\/h3><ul class=\"modern-footnotes-list \"><li id=\"footnote-00000000000008600000000000000000_11368-1\"><span>1<\/span><div>Voir <a href=\"https:\/\/gillesenvrac.ca\/carnet\/pas-dinstances-dans-atproto\/\">ma traduction<\/a> GB <a href=\"#mfn-content-00000000000008600000000000000000_11368-1\" class=\"modern-footnotes-scroll-to-footnote\" aria-label=\"Back to reference 1 in text\">\u21a9\ufe0e<\/a><\/div><\/li><\/ul>","protected":false},"excerpt":{"rendered":"<p>Traduction de What I Wish Someone Had Told Me About AT Protocol and Bluesky par Rob Ricci le 25 ao\u00fbt 2026 \u00c7a fait environ un an que je m\u2019int\u00e9resse \u00e0 atproto (le protocole sur lequel fonctionnent Bluesky, Blacksky et de nombreuses autres applications \u2014 dont pckt, o\u00f9 ce blogue est h\u00e9berg\u00e9! \u2014). Je ne suis &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/gillesenvrac.ca\/carnet\/trad\/protocole-at-et-bluesky\/\" class=\"more-link\">Continuer la lecture<span class=\"screen-reader-text\"> de &laquo;&nbsp;Ce que j\u2019aurais aim\u00e9 que quelqu\u2019un me dise au sujet du protocole AT et de Bluesky&nbsp;&raquo;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":11825,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-11368","page","type-page","status-publish","hentry"],"jetpack-related-posts":[{"id":10722,"url":"https:\/\/gillesenvrac.ca\/carnet\/at-ap-ec\/activitypub-et-atprotocol\/","url_meta":{"origin":11368,"position":0},"title":"ActivityPub vs. AT Protocol : Comprendre les protocoles derri\u00e8re Mastodon et Bluesky, sur Fediview","author":"Gilles Beauchamp","date":"20 juin 2026","format":false,"excerpt":"L'article compare ActivityPub et le protocole AT, qui soutiennent respectivement Mastodon et Bluesky. ActivityPub privil\u00e9gie la gouvernance communautaire et l'identit\u00e9 li\u00e9e aux instances, tandis que le protocole AT se concentre sur la propri\u00e9t\u00e9 individuelle des donn\u00e9es et la portabilit\u00e9. Les deux protocoles coexistent, r\u00e9pondant \u00e0 des besoins diff\u00e9rents.","rel":"","context":"Article similaire","block_context":{"text":"Article similaire","link":""},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/gillesenvrac.ca\/carnet\/wp-content\/uploads\/2026\/06\/activitypub-atproto.jpg?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/gillesenvrac.ca\/carnet\/wp-content\/uploads\/2026\/06\/activitypub-atproto.jpg?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/gillesenvrac.ca\/carnet\/wp-content\/uploads\/2026\/06\/activitypub-atproto.jpg?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/gillesenvrac.ca\/carnet\/wp-content\/uploads\/2026\/06\/activitypub-atproto.jpg?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/gillesenvrac.ca\/carnet\/wp-content\/uploads\/2026\/06\/activitypub-atproto.jpg?resize=1050%2C600&ssl=1 3x, https:\/\/i0.wp.com\/gillesenvrac.ca\/carnet\/wp-content\/uploads\/2026\/06\/activitypub-atproto.jpg?resize=1400%2C800&ssl=1 4x"},"classes":[]},{"id":10737,"url":"https:\/\/gillesenvrac.ca\/carnet\/at-ap-ec\/","url_meta":{"origin":11368,"position":1},"title":"Mastodon VS Bluesky&#8230; et En commun","author":"Gilles Beauchamp","date":"20 juin 2026","format":false,"excerpt":"[2026.06.20] Un bloc note, en vrac, rassemblant les liens vers les ressources (et extraits) pour me \"faire une t\u00eate\" \u00e0 propos de ces deux protocoles... et de l'inscription de En commun (Passerelles\/Praxis) dans le Web social ouvert. Une note du carnet Analyse de soutenabilit\u00e9 des plateformes En commun : Interop\u00e9rabilit\u00e9\u2026","rel":"","context":"Article similaire","block_context":{"text":"Article similaire","link":""},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":9583,"url":"https:\/\/gillesenvrac.ca\/carnet\/trad\/evolution-reseaux-sociaux\/","url_meta":{"origin":11368,"position":2},"title":"La prochaine \u00e9volution des r\u00e9seaux sociaux : d\u00e9centralis\u00e9s, open source et \u00e9volutifs","author":"Gilles Beauchamp","date":"8 mars 2026","format":false,"excerpt":"Comment Blacksky a atteint des millions d'utilisateurs sans d\u00e9penser un centime Traduction de Social media\u2019s next evolution: decentralized, open-source, and scalable par Rudy Fraser et Josh Kramer, 24 ao\u00fbt 2025. Si vous n'avez pas suivi l'actualit\u00e9 de pr\u00e8s, vous pourriez penser que\u00a0Bluesky\u00a0n'est qu'un clone lib\u00e9ral de Twitter ou une nouvelle\u2026","rel":"","context":"Article similaire","block_context":{"text":"Article similaire","link":""},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/gillesenvrac.ca\/carnet\/wp-content\/uploads\/2026\/03\/blacksky.webp?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/gillesenvrac.ca\/carnet\/wp-content\/uploads\/2026\/03\/blacksky.webp?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/gillesenvrac.ca\/carnet\/wp-content\/uploads\/2026\/03\/blacksky.webp?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/gillesenvrac.ca\/carnet\/wp-content\/uploads\/2026\/03\/blacksky.webp?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/gillesenvrac.ca\/carnet\/wp-content\/uploads\/2026\/03\/blacksky.webp?resize=1050%2C600&ssl=1 3x, https:\/\/i0.wp.com\/gillesenvrac.ca\/carnet\/wp-content\/uploads\/2026\/03\/blacksky.webp?resize=1400%2C800&ssl=1 4x"},"classes":[]},{"id":11160,"url":"https:\/\/gillesenvrac.ca\/carnet\/trad\/trump-sur-bluesky-kissane\/","url_meta":{"origin":11368,"position":3},"title":"L\u2019arriv\u00e9e de l\u2019administration Trump sur Bluesky met en lumi\u00e8re les difficult\u00e9s de croissance des r\u00e9seaux ouverts","author":"Gilles Beauchamp","date":"4 ao\u00fbt 2026","format":false,"excerpt":"Traduction de Trump Administration's Arrival on Bluesky\u2026 par Erin Kissane sur Tech Policy Press le 22 octobre 2025. Le pr\u00e9sident Donald Trump s\u2019entretient avec des membres de son cabinet et d\u2019autres personnes au sujet du projet \u00ab Victory Arch \u00bb dans le Bureau ovale, le mardi 7 octobre 2025. (Photo\u00a0officielle\u2026","rel":"","context":"Article similaire","block_context":{"text":"Article similaire","link":""},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/gillesenvrac.ca\/carnet\/wp-content\/uploads\/2026\/08\/trump.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/gillesenvrac.ca\/carnet\/wp-content\/uploads\/2026\/08\/trump.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/gillesenvrac.ca\/carnet\/wp-content\/uploads\/2026\/08\/trump.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/gillesenvrac.ca\/carnet\/wp-content\/uploads\/2026\/08\/trump.png?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/gillesenvrac.ca\/carnet\/wp-content\/uploads\/2026\/08\/trump.png?resize=1050%2C600&ssl=1 3x"},"classes":[]},{"id":10789,"url":"https:\/\/gillesenvrac.ca\/carnet\/at-ap-ec\/linformatique-atmospherique\/","url_meta":{"origin":11368,"position":4},"title":"L&rsquo;informatique atmosph\u00e9rique, par Paul Frazee","author":"Gilles Beauchamp","date":"24 juin 2026","format":false,"excerpt":"Traduction de Atmospheric Computing par Paul Frazee, 31 d\u00e9cembre 2025. Cet article porte sur le\u00a0protocole AT. Vous pouvez suivre mes travaux sur\u00a0Bluesky,\u00a0Blacksky\u00a0ou tout autre r\u00e9seau social atmosph\u00e9rique. Le cloud computing a gagn\u00e9. C\u2019est pratique. C\u2019est partout. C\u2019est \u00e9volutif. C\u2019est ce que nous utilisons tous. Qu\u2019est-ce que le cloud\u00a0[1]? Il stocke\u2026","rel":"","context":"Article similaire","block_context":{"text":"Article similaire","link":""},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":10574,"url":"https:\/\/gillesenvrac.ca\/carnet\/hof\/decrypter-matrix\/","url_meta":{"origin":11368,"position":5},"title":"D\u00e9crypter Matrix","author":"Gilles Beauchamp","date":"11 juin 2026","format":false,"excerpt":"\u00c0 propos de la convergence vers les donn\u00e9es priv\u00e9es dans les protocoles de r\u00e9seaux sociaux, et du lien avec Matrix Traduction de Decrypting Matrix par Laurens Hof, le 20 mai 2026 Le mouvement visant \u00e0 utiliser des protocoles ouverts pour cr\u00e9er des r\u00e9seaux sociaux ind\u00e9pendants peut \u00eatre replac\u00e9 dans diff\u00e9rentes\u2026","rel":"","context":"Article similaire","block_context":{"text":"Article similaire","link":""},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"jetpack_likes_enabled":true,"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/gillesenvrac.ca\/carnet\/wp-json\/wp\/v2\/pages\/11368","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gillesenvrac.ca\/carnet\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/gillesenvrac.ca\/carnet\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/gillesenvrac.ca\/carnet\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/gillesenvrac.ca\/carnet\/wp-json\/wp\/v2\/comments?post=11368"}],"version-history":[{"count":0,"href":"https:\/\/gillesenvrac.ca\/carnet\/wp-json\/wp\/v2\/pages\/11368\/revisions"}],"up":[{"embeddable":true,"href":"https:\/\/gillesenvrac.ca\/carnet\/wp-json\/wp\/v2\/pages\/11825"}],"wp:attachment":[{"href":"https:\/\/gillesenvrac.ca\/carnet\/wp-json\/wp\/v2\/media?parent=11368"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}