Uriel Fanelli
Fediverso, il problema di Bob e Alice.
Fediverso, il problema di Bob e Alice.

Mentre scrivo — dovrei arrivare a una versione stabile tra poco, sarà la v1.0.1 — il mio server ActivityPub, trasformando la fork in qualcosa di diverso, mi sono imbattuto in un pezzo di codice che descrive il comportamento della funzione block.

La fork la trovate qui: https://git.keinpfusch.net/loweel/Aktor-2.

Nota di servizio: non usatelo sullo stesso database della versione precedente, cioe' GoToSocial. Non funzionerebbe. Il database è cambiato. Ho aggiunto e tolto troppe cose. Aktor non e' piu' GotoSocial. 

Dicevo: mi sono imbattuto in questo pezzo di vecchio codice, e il modo in cui la funzione block viene implementata — e, per quanto vedo, la implementano così tutti i server che conosco — non mi piace per nulla.

Facciamo un esempio semplice.

Bob e Alice sono coinvolti in un thread. Il thread è stato aperto da Bob, e ci partecipano altre dieci persone. Bob e Alice non sono d’accordo. Succede. A un certo punto, in un impeto di democrazia pratica, Bob decide di bloccare Alice.

La domanda è: che cosa sta facendo Bob, esattamente?

Ci sono due possibili risposte.

  1. Bob non vuole più leggere le cose che scrive Alice.
  2. Bob non vuole che Alice scriva ancora.

E sono due cose molto diverse.

Nel primo caso, siamo davanti a una scelta perfettamente legittima. Bob dice al proprio server: “ehi, ricordati di non mostrarmi più quello che scrive Alice”. Ha senso. È una scelta ottima, se l’obiettivo è la famosa peace of mind. Bob si protegge dal contenuto che non vuole vedere, e finisce lì. Alice continua a parlare, gli altri continuano a leggerla, Bob non la vede più. Tutti felici, o almeno tutti meno infelici.

La seconda scelta implementativa, invece, è quella che di fatto zittisce Alice.

Magari gli altri dieci partecipanti al thread erano interessati a sapere cosa dice Alice. Magari la discussione non era più davvero “tra Bob e Alice”. Magari, come spesso succede, il thread si era evoluto, aveva preso una direzione diversa, e Bob era ormai soltanto quello che aveva acceso il cerino iniziale. Però, siccome il creatore del thread blocca Alice, in tutte le implementazioni che vedo in giro Alice non può più scrivere nel thread.

E questo succede perché tutte le implementazioni che vedo usano il campo in_reply_to per identificare un thread. Quindi, quando qualcuno ti blocca, il tentativo di rispondere viene trattato come se fosse una risposta al primo post, cioè al post di Bob. E siccome Bob ti ha bloccato, la tua risposta non passa.

La scelta è stupida.

È stupida perché confonde due concetti che dovrebbero rimanere separati: “non voglio vedere Alice” e “Alice non deve più parlare”. La prima è moderazione personale. La seconda è controllo della conversazione.

Ed è ancora più stupida se pensiamo al modo in cui funzionano davvero le discussioni online. Un thread non è necessariamente proprietà morale di chi lo ha aperto. Lo ha aperto, certo. Ha scritto il primo messaggio, certo. Ma se poi arrivano dieci persone, e quelle dieci persone cominciano a discutere tra loro, il thread non è più soltanto “la cosa di Bob”. È diventato una conversazione collettiva.

Se Bob non vuole più leggere Alice, benissimo: il suo server non gliela mostra. Ma non si capisce perché il blocco di Bob debba impedire agli altri dieci di leggere Alice. Non si capisce perché il fastidio personale di Bob debba trasformarsi in un silenziamento tecnico valido per tutti.

Perché magari Alice sta rispondendo a Carol. O a Dave. O a una delle altre persone coinvolte. Magari Bob non c’entra più nulla, se non per il fatto storico di avere scritto il primo messaggio. Ma il software, invece, continua a trattare tutto come se ogni risposta fosse ancora, in ultima analisi, una risposta a Bob.

E qui il problema non è morale. È architetturale.

Il software sta prendendo una scorciatoia concettuale: usa in_reply_to come se bastasse a definire il controllo del thread. Ma così facendo assegna al creatore del primo post un potere che, socialmente, non è affatto ovvio che debba avere. Gli dà una specie di diritto feudale sulla conversazione: hai aperto tu il thread, quindi puoi decidere chi può ancora parlare dentro quel territorio.

È una visione molto comoda da implementare. Ma non è detto che sia una buona visione del comportamento sociale che vogliamo modellare.

Perché una cosa è dire: “Bob non riceve più le attività di Alice”. Un’altra cosa è dire: “Alice non può più produrre attività che gli altri vedranno in quel contesto”. Nel primo caso stiamo filtrando la vista di Bob. Nel secondo stiamo cambiando la realtà per tutti gli altri.

E questa differenza, nei software federati, conta parecchio.

Perché se la federazione deve servire a distribuire potere, non ha molto senso ricostruire, dentro ogni thread, un piccolo principato assoluto del primo che ha parlato. Bob apre il thread, Bob si irrita, Bob blocca Alice, Alice sparisce dalla conversazione per tutti. Molto federato, certo. Sembra più che altro il Sacro Romano Impero dei malumori personali.

Secondo me il comportamento corretto dovrebbe essere più vicino alla prima interpretazione: il blocco serve a proteggere chi blocca, non a zittire chi viene bloccato davanti agli altri.

Se Bob blocca Alice, Bob non deve più vedere Alice. Punto. Ma se Alice risponde a Carol, e Carol non ha bloccato Alice, Carol dovrebbe poter leggere quella risposta. E anche gli altri partecipanti che non hanno bloccato Alice dovrebbero poterla leggere. Il blocco di Bob dovrebbe modificare la timeline di Bob, non la geometria dell’universo.

Poi, certo, ci sono casi più complicati. Ci sono thread abusivi, molestie coordinate, conversazioni che diventano ingestibili. Ma quelli sono problemi di moderazione, non dovrebbero essere risolti facendo finta che il primo autore del thread sia il proprietario ontologico di ogni messaggio successivo.

In altre parole: bloccare qualcuno dovrebbe voler dire “non mostrarmelo più”, non “impediscigli di parlare con chiunque altro, purché tutto sia nato sotto un mio post”.

E invece molte implementazioni finiscono proprio lì. Per semplicità tecnica, per eredità del modello, per pigrizia, o perché nessuno ha davvero separato i due casi.

Ma sono due casi diversi.

E quando un software confonde “io non voglio ascoltare” con “tu non devi parlare”, il problema non è più solo nel codice. È nella visione sociale che quel codice sta imponendo.

Perché tutto il Fediverso ha fatto questa scelta, cioè quella di zittire Alice?

Erano tutti dei feticisti dello stupro? No. Non credo che la spiegazione sia questa, e non credo nemmeno che serva ricorrere a psicopatologie assortite per capirlo. Ma se andiamo a vedere le origini culturali del Fediverso, o almeno di una parte molto rumorosa e molto influente del Fediverso delle origini, il quadro diventa più chiaro.

Chi c’era, all’inizio?

  1. C’erano istanze comuniste, spesso sudamericane.
  2. C’erano istanze anarchiche, spesso sudamericane.
  3. C’erano istanze femministe, lesbiche, o entrambe le cose.
  4. C’erano istanze LGBT di qualche tipo, spesso molto militanti.

Paticamente, un centro sociale occupato.

Ora, capiamoci: non sto dicendo che queste categorie siano automaticamente identiche, né che ogni istanza fosse uguale all’altra. Sto dicendo che il brodo culturale nel quale sono nate certe implementazioni non era esattamente quello del liberalismo classico da salotto, dove Alice partecipa al dibattito, dice qualcosa che non piace a Bob, Bob storce il naso, e tutti concludono che il diritto di Alice a parlare vada comunque conservato.

No.

Il principio culturale dominante, in molti di quegli ambienti, era un altro. Era più vicino a: “Alice partecipa al dibattito e dice qualcosa di contrario all’ortodossia? Bene. Allora picchiamola, stupriamola (a parole o nei fatti) , mettiamola a tacere e cacciamola a calci, quella puttana fascista.”

Che poi, naturalmente, nella versione educata diventa “safety”, “community standards”, “protezione degli spazi”, “non dare piattaforma ai fascisti”, “difendere le persone vulnerabili”, "safe space" ,  e tutta la liturgia del caso. Ma il meccanismo sociale rimane quello: chi devia dall’ortodossia non viene contraddetto o ignorato, viene ostracizzato. E prima ancora di essere espulso, viene silenziato.

E questo, secondo me, è lo spirito con cui si è implementato il comportamento attuale delle istanze. Non perché qualcuno si sia seduto a un tavolo dicendo: “oggi inventiamo un sistema per dare al creatore del thread il potere di cancellare la voce altrui”. Sarebbe persino troppo razionale. Più banalmente, quando si è trattato di decidere cosa dovesse fare un blocco, nessuno ha avuto troppi dubbi: se Bob blocca Alice, Alice deve sparire. Non solo dagli occhi di Bob, ma dalla conversazione.

Da lì nasce la scelta tecnica.

Se il creatore del thread ti blocca, non ti sta semplicemente dicendo: “io non voglio più leggerti”. Ti sta dicendo: “tu qui non parli più”. E il software, invece di distinguere tra queste due cose, gli dà ragione.

Quindi Alice non viene soltanto filtrata dalla timeline di Bob. Alice viene zittita dentro quel contesto. Anche se gli altri partecipanti alla discussione non l’hanno bloccata. Anche se volevano leggerla. Anche se la risposta era diretta a qualcun altro. Anche se Bob, ormai, nella conversazione non c’entrava più nulla se non per il fatto di avere scritto il primo post.

Ma non importa.

Il thread è nato sotto Bob, Bob blocca Alice, e quindi Alice deve sparire. E vaffanculo quella fascista di Alice.

Questa è la logica. Non necessariamente dichiarata, non necessariamente formalizzata, magari nemmeno consapevole. Ma è la logica sociale che il codice finisce per incarnare.

E quando una scelta tecnica nasce dentro una cultura che considerava il dissenso come contaminazione, poi non bisogna stupirsi se il software non implementa il dissenso come parte della conversazione. Implementa la bonifica.

Ovviamente, oggi non è più possibile continuare in questo modo.

La procedura del canceling non può funzionare se, per esempio, nel gioco entra l’intera società. Finché il Fediverso resta una nicchia popolata da gruppi relativamente omogenei, tutti convinti più o meno della stessa ortodossia, il meccanismo del “zittiamo Alice” può anche sembrare sostenibile. Ma se la UE continua davvero a promuovere il Fediverso sempre di più, esiste il rischio concreto — o, a seconda dei punti di vista, la possibilità concreta — che questo ambiente diventi, come si dice, mainstream.

E quando una piattaforma diventa mainstream, cioè quando dentro ci finisce tutta la società con tutte le sue divergenze, idiosincrasie, maggioranze, minoranze, rancori e abitudini tribali, chi vince in un sistema fondato sullo zittire l’altro?

Vince la fazione più numerosa.

E siccome femministe, comunisti, anarchici, lesbiche, GLBT, non sono la fazione più numerosa, questo modo di fare finirà molto presto per ritorcersi contro di loro. È inevitabile. La cultura del silenziamento non resta mai proprietà privata di chi l’ha inventata o sdoganata: appena il campo si allarga, diventa un’arma della maggioranza del momento. E a quel punto quelli che ieri applaudivano perché Alice veniva zittita, domani scopriranno che a essere zittiti sono loro.

Per questa ragione, credo che la scelta migliore sia lasciare parlare Alice.

Poi spetterà al moderatore decidere che cosa fare. Ma, nella stragrande maggioranza dei casi, il moderatore non è Bob. E soprattutto, non dovrebbe esserlo per diritto dinastico solo perché Bob ha scritto il primo post del thread. Una discussione pubblica non può essere trasformata in un feudo personale nel quale chi apre il cancello decide chi ha diritto di parola e chi no.

Ed è esattamente questo che ho implementato.

 

C’è chi dice — partendo, ovviamente, dall’ipotesi che Alice dica solo cazzate — che tutto questo contribuisca alla cosiddetta enshittification del Fediverso. Ma diciamolo apertamente: lo stato attuale, nel quale Bob chiude la discussione insultando Alice e poi le impedisce di replicare semplicemente bloccandola, è davvero il modello sociale che vorreste vedere riprodotto in scala?

Davvero pensate che, portato a dimensione di massa, questo meccanismo produca una società migliore?

Perché a me sembra il contrario. Mi sembra il modo perfetto per trasformare una conversazione in un piccolo abuso di potere automatizzato. E francamente, se il futuro del Fediverso deve essere questo, allora non stiamo costruendo un luogo di discussione: stiamo solo distribuendo a più persone il pulsante per tappare la bocca ad Alice.