Como o BlueSky funciona
(steveklabnik.com)- O BlueSky é um app de microblog parecido com Twitter e Mastodon, mas seu objetivo maior é verificar se aplicações sociais distribuídas em larga escala são viáveis sobre o AT Protocol (atproto)
- O atproto não é blockchain, DAO nem NFT; é um protocolo federado em que registros assinados pelo usuário são processados de forma distribuída por PDS, Relay e App View com uso de criptografia e Merkle tree, entre outras técnicas
- A escalabilidade vem de uma arquitetura em que o Personal Data Server (PDS) do usuário não envia posts diretamente a todos os seguidores; em vez disso, o Relay agrega os dados da rede e os oferece como firehose
- A moderação é dividida no modelo “speech vs reach”, separando a replicação do conteúdo do controle de exposição, com labeler, feed generator e App View aplicando filtros e bloqueios
- DID estável e handle baseado em domínio oferecem portabilidade de conta, mas o serviço de resolução
did:plcoperado pelo BlueSky continua sendo um ponto de debate sobre centralização
Relação entre BlueSky e atproto
- O BlueSky hoje funciona como uma aplicação de microblog, mas, no plano geral, é a aplicação inicial que demonstra o potencial do Authenticated Transfer Protocol, ou atproto
- O site do BlueSky afirma que “as redes sociais são importantes demais para serem controladas por algumas empresas, e estamos construindo uma base aberta para uma internet social em que todos possam ajudar a criar o futuro”
- Como o BlueSky é uma empresa, pode haver uma visão cética de que “uma empresa está criando algo que não deveria ser controlado por empresas”, mas o núcleo do projeto está mais no atproto do que no app
- O atproto é um protocolo federado para aplicações sociais distribuídas em larga escala
Um protocolo distribuído, não uma criptomoeda
- O atproto pode parecer algo ligado a criptomoedas por usar expressões como “rede distribuída” e “protocolo”, mas não é uma criptomoeda
- Não é blockchain, DAO nem NFT, embora use algumas técnicas como criptografia e Merkle tree
Estrutura básica do atproto
- O atproto adota uma estrutura federada em que vários participantes operam partes diferentes do sistema e se comunicam entre si
- Pensando em uma base de usuários grande, ele foi projetado para dar mais responsabilidades a quem consegue lidar com a carga e reduzir o peso sobre quem não consegue
- No momento citado no texto, o BlueSky havia passado de 5 milhões de usuários naquela semana e era avaliado como muito mais estável do que o Twitter inicial
- Atualmente, o atproto é 100% público e não tem recursos como mensagens privadas
- Como é difícil implementar bem funções privadas em um sistema federado, a escolha foi fazer isso direito em vez de lançar algo com limitações sérias
- Por enquanto, ele é mais adequado para conteúdos que podem ser públicos
Registros, repositório, App View e Relay
- O usuário cria um record assinado criptograficamente, e essa assinatura prova a autoria
- O record segue um esquema chamado Lexicon
- O record é armazenado em um repository, que funciona como um serviço expondo HTTP e WebSocket
- Esse tipo de serviço normalmente é chamado de PDS (Personal Data Server)
- O usuário pode operar o próprio PDS ou usar um PDS hospedado por outra pessoa
- As aplicações leem os records armazenados na rede e constroem funcionalidades sobre eles
- Como esse tipo de serviço expõe uma determinada visão das informações, ele é chamado de App View
- Criar uma aplicação significa definir um Lexicon, ler os records que usam esse Lexicon e ignorar o restante
- Um modelo em que os PDS notificam uns aos outros diretamente tem grandes problemas de escalabilidade
- Se, a cada novo post, ele precisasse ser enviado diretamente ao repository de todos os seguidores, isso seria ineficiente e encareceria a operação de repositories populares
- O Relay reduz esse problema reunindo as informações da rede e expondo tudo como firehose
- Na prática, a App View olha para o Relay em vez de consultar diretamente os repositories
- Quando o autor publica algo, o repository avisa o Relay, e os seguidores veem o resultado da filtragem que a App View faz da saída do Relay
- O Relay pode ser grande e caro de operar, mas também é possível imaginar Relays menores que propagam apenas um subconjunto específico de usuários
Modelo de moderação “speech vs reach”
- Como o atproto é um protocolo para aplicações sociais, ele considera não só como conectar pessoas, mas também como desconectá-las
- O modelo de moderação do BlueSky é dividido em speech vs reach
- A camada de speech replica o conteúdo pela rede sem considerar seu significado
- A camada de reach oferece ferramentas para limitar o alcance daquilo que o usuário não quer ver
- Dizer que o BlueSky “não faz moderação” ou que “só valoriza liberdade de expressão” é impreciso
- As ferramentas de moderação fazem parte do próprio protocolo e podem funcionar também em conteúdos de aplicações que não sejam o BlueSky
- O usuário não fica preso às escolhas de moderação de outras pessoas nem à ausência delas; ele pode escolher seus próprios moderadores
Feed generator
- No atproto, os feeds são separados em um serviço próprio chamado feed generator
- O feed generator recebe o firehose produzido pelo Relay e mostra listas ao filtrar e ordenar o conteúdo conforme os critérios desejados
- O usuário pode compartilhar com outros usuários os feeds que criou
- Exemplos de feed:
- Quiet Posters: mostra posts de pessoas que não publicam com frequência
- the ‘Gram: mostra apenas posts com fotos anexadas
- My Bangers: mostra seus posts mais populares
- Um dos pontos fortes do BlueSky é permitir que o usuário crie seu próprio feed algorítmico e o compartilhe com facilidade
- Feed é uma função relativamente recente no atproto, então talvez ainda não esteja completa e possa mudar no futuro
Labeler e moderação em nível de rede
- O Labeler é um serviço que aplica labels a conteúdos ou contas
- O usuário pode assinar um labeler específico e fazer sua experiência variar conforme os labels dos posts
- O labeler pode funcionar da forma que seu operador quiser
- Pode executar algoritmos automáticos nos posts
- Pode ter aprovação ou rejeição humana
- Pode ser usado como blocklist ou filtro de NSFW
- A função de label existe, mas, no momento descrito no texto, não estava claro se usuários poderiam executar seu próprio labeler diretamente
- O BlueSky opera seu próprio labeler
- Ainda não havia uma liberação externa conhecida
- Ao combinar feed, App View e labeler, o usuário pode escolher sua experiência de moderação dentro e fora da aplicação
- Em um feed, pode ver apenas conteúdo SFW; em outro, pode permitir conteúdo NSFW
- Pode criar e compartilhar blocklists
- Como as ferramentas de moderação operam no nível do protocolo, e não no da aplicação, o mesmo labeler pode ser usado em outras aplicações sobre atproto
- Mesmo que surja um clone do Instagram sobre atproto, ele pode usar o mesmo labeler de blocklist
- Se o usuário quiser, pode bloquear a mesma pessoa em todos os lugares
Diferença em relação ao modelo de instâncias do Mastodon
- O modelo do atproto é diferente do esquema do Mastodon, em que existe uma “conta” dentro de uma “instância” específica
- Perguntas como “o que acontece se minha instância for defederated?” não se aplicam tão diretamente aqui
- Dá para atingir um objetivo parecido ignorando posts vindos de um PDS específico
- Mas essa escolha não é feita pelo dono do servidor em nome da conta do usuário, e sim pelo próprio usuário
DID, handle e portabilidade de conta
- O núcleo da identidade no atproto é o DID (Decentralized Identifier)
- Um exemplo de DID tem o formato
did:plc:3danwc67lo7obz2fmdg6jxcr
- Um exemplo de DID tem o formato
- A identidade que o usuário realmente vê também usa um handle, que é um nome de domínio
- Exemplo:
@steveklabnik.com - Quem se cadastra no BlueSky pode receber um handle no formato
@username.bsky.social
- Exemplo:
- Como o DID é estável, dá para mudar o handle de
@steveklabnik.bsky.socialpara@steveklabnik.comsem interromper os seguidores; na interface, só o handle muda - Para usar um domínio como handle, é preciso pegar o DID gerado pelo PDS e adicionar um TXT record no DNS desse domínio
- Mesmo usuários que não conhecem DNS podem registrar um domínio e defini-lo como handle sem conhecimento técnico por meio da parceria entre BlueSky e NameCheap
- A portabilidade da conta se baseia em DID e assinaturas criptográficas
- O conteúdo criado por quem usa um determinado DID é assinado e replicado na rede
- Para encerrar uma “conta”, seria preciso forçar a impossibilidade de uso da chave que o usuário possui, mas, pelo desenho da rede, outros participantes não têm acesso a essa chave
- Mesmo que o PDS saia do ar, é possível fazer backfill do conteúdo na rede e informar que houve migração para um novo PDS
Questões em torno de did:web e did:plc
- O BlueSky oferece suporte a duas formas de DID
did:web: abordagem baseada em nome de domíniodid:plc: abordagem própria implementada pelo BlueSky
- O
plcdedid:plcsignifica “placeholder”, e o BlueSky pretende continuar dando suporte a isso - O
did:plctem a fraqueza de depender de um serviço operado pelo BlueSky para resolver as informações corretas- Um exemplo de consulta pode ser visto em plc.directory
- Por causa dessa estrutura, há críticas de que o BlueSky pode banir usuários com mais força do que seria originalmente possível pelo desenho da rede
- Há também motivos para não considerar isso fatal
- Quem não quiser pode usar
did:web - O sistema foi projetado para permitir migração caso apareça uma opção melhor
- No futuro, a governança de
did:plcpode migrar para um modelo de consenso - Outros participantes também podem operar um serviço
did:plce usá-lo
- Quem não quiser pode usar
Como o BlueSky se apoia sobre o atproto
- O BlueSky é uma aplicação construída sobre a rede atproto
- O BlueSky opera uma App View e a aplicação web que a utiliza
- Também opera PDS para quem se cadastra pelo app web e o Relay por meio do qual esses PDS se comunicam
- O BlueSky publica dois tipos de Lexicon
com.atproto.*: operações de baixo nível necessárias para qualquer aplicação da redeapp.bsky.*: operações específicas do BlueSky
- O objetivo do produto BlueSky é permitir que as pessoas usem tudo isso sem precisar conhecer os detalhes técnicos
- Como não há instâncias, não existe o fluxo de escolher uma instância para criar a conta
- Mesmo que o host saia do ar, é possível migrar, e os seguidores nem precisam perceber
Criando uma nova aplicação sobre o atproto
- Uma aplicação atproto começa pela criação de um Lexicon
- Depois disso, ela opera uma App View que processa, dentro dos dados da rede, aquilo que se relaciona com esse Lexicon
- A aplicação precisa permitir que o usuário grave dados em seu PDS usando esse Lexicon
A separação central do design
- A separação de papéis entre atproto e BlueSky é um elemento importante do design
- Uma “killer app” como o BlueSky dá às pessoas um motivo para usar a rede
- O próprio BlueSky também cumpre um papel de dogfooding, validando se realmente é possível criar uma aplicação real sobre o atproto
1 comentários
Opiniões no Hacker News
Parece ter sido muito bem projetado e parece resolver alguns dos grandes problemas do ActivityPub
Antes eu não tinha interesse no Bluesky, mas agora estou pensando em criar uma conta
Em vez de protocolos existentes que todo mundo usa, como
user@hoste WebFinger, escolheram “usar domínios como identidade”; e, por não se inspirarem no modo como o ACME já trata isso em certificados, aconteceu até de alguém tomar o domínios3.amazon.comno Bluesky https://www.reddit.com/r/programming/comments/138hlf2/s3_dom...Também criaram um novo protocolo de chamada remota,
XRPC, e usam oLexicon, um esquema de dados baseado em geração de código cujas vantagens, além de ser mais novo que protobuf ou jsonld, não são clarasÉ difícil confiar em uma “rede aberta” que constantemente mostra não querer respeitar outros ecossistemas nem dialogar com eles, e também fico desconfiado de quantos outros erros comuns de design podem ter sido introduzidos ao rejeitar conhecimento compartilhado
Como não há incentivo social para alguém instalar e manter relays e serviços de moderação separados das comunidades reais, sobram apenas incentivos financeiros, como serviços pagos, inserção de anúncios, mineração de dados e manipulação de informações
Se a distribuição de dados e a moderação forem centralizadas, tanto os custos de hospedagem quanto os custos humanos viram um grande negócio, e isso caminha para praticamente impedir que alguém que não seja o Bluesky opere seu próprio relay ou serviço de moderação
Apesar das desvantagens do ActivityPub, uma abordagem como “comunidades com portão” faz com que usuários sintam pertencimento ao servidor e que operadores e moderadores tenham orgulho de prestar um serviço aos usuários
O AT Protocol permite tecnicamente vários relays e serviços de moderação, mas é questionável quantos vão surgir na prática
Acho um erro julgar um protocolo de rede social apenas de uma perspectiva puramente técnica e adversarial. Em troca de não ficar preso a um servidor, você também se separa de comunidades coesas, e deixa de haver algo em jogo
Não ter nada a perder em termos de dados, identidade e comunidade é uma faca de dois gumes
Pelo que sei, atualmente há apenas um relay
Se surgirem vários relays, cada um passará a enxergar a rede de forma diferente, e o relay que incluir mais posts será o melhor
Pode ser bem difícil garantir diversidade de relays em vez de um único relay dominante, e isso se parece com a tentativa de sistemas alternativos de DNS de ganhar tração. Nesse caso, se meu post não for capturado pelo relay dominante, parece que não há o que fazer
Ainda é muito cedo, então talvez não aconteça assim; e, mesmo que exista um relay dominante, o GitHub também não é tão ruim, e há alternativas
Seria mais fácil entender se chamassem o sistema de
[microblog] -> [indexador] -> [cliente]Na prática há mais elementos, mas o funcionamento básico do Bluesky é mais ou menos esse, só que os nomes parecem ter sido escolhidos de forma diferente do esperado
O motivo de precisar de um indexador é que o ID do usuário não permanece estático no sistema. O
DID:PLCcomeça como uma substring de um hash, mas por causa da “rotação de chaves” ocorre, com o tempo, um estranho rearranjo criptográfico em que o ID do usuário muda sem que o próprio usuário percebaImagine um sistema como o LiveJournal em que os identificadores mudam o tempo todo e é preciso haver uma autoridade para acompanhar essas mudanças. Claro, só é possível publicar mensagens curtas, sem suporte a títulos ou Markdown
Pessoalmente, estou esperando um novo
DID:PLCque receba uma chave pública estática e assine mensagens com a chave privada. Haveria muito menos coisas a rastrear, e o self-hosting e o desenvolvimento local-first ficariam muito mais fáceisSeria como uma UI local do GitHub que busca dados de várias instâncias do GitHub hospedando conjuntos de repositórios diferentes, mas possivelmente sobrepostos
Também se parece com um cliente Usenet que agrega newsgroups de vários servidores NNTP
Fico curioso sobre por que você acha que cada relay passaria a enxergar a rede de forma diferente
O que me pergunto é como o BlueSky pode prometer de forma confiável que vai usar apenas as partes abertas do protocolo
Como o BlueSky parece, na prática, bastante centralizado, não vejo motivo técnico para que o cliente first-party tenha necessariamente de ser um cliente ATProto
No curto ou médio prazo, fazer isso seria uma grande traição da confiança dos usuários, mas a estrutura efetivamente distribuída do ActivityPub parece, nesse caso, uma salvaguarda mais forte
Se quer dizer que o relay e o PDS first-party poderiam se comunicar por outro protocolo, não entendo bem qual é a preocupação
Dois clientes ActivityPub também podem conversar entre si por um protocolo que não seja ActivityPub
Eles de fato estão fazendo isso e, se começarem a mudar para não fazer, as pessoas perceberão muito rapidamente
É bom que tenham chegado até a distinção entre “fala e alcance”, mas, no longo prazo, por causa da simplicidade, Mastodon parece uma escolha mais inteligente
No curto prazo, a curadoria de feeds do Mastodon é claramente mais difícil, então ele pode ser menos divertido ou menos útil
A pergunta central é: se um agente malicioso hipotético, talvez rico ou poderoso, quisesse bagunçar o jogo aqui, como poderia fazer isso?
O texto passa rápido demais por essa parte, dizendo algo como “não sabemos bem como o feed funciona”, o que é muito suspeito. Parece que eles sabem muito bem como o feed vai funcionar, sabem que há poder e dinheiro nesse ponto, e querem se agarrar a isso
O autor diz: “Feeds são um recurso recente no atproto, então eles existem, mas talvez ainda não estejam completos e possam mudar no futuro. Vamos acompanhar. Do meu ponto de vista, funcionam bem, mas não estou acompanhando os detalhes técnicos de baixo nível.”
O parágrafo imediatamente anterior também traz este contexto: “Uma das killer features do BlueSky em comparação com outras ferramentas de microblog é a escolha total do usuário. Se eu quiser criar meu próprio algoritmo de feed, posso criar, e posso compartilhá-lo facilmente com outras pessoas.”
Os feeds são open source, existem hoje e você também pode executá-los por conta própria
Também não está claro que “bagunçar o jogo” se refere a que jogo, nem em que sentido. Há muitas partes móveis aqui
A ideia de que o usuário possa escolher um provedor de moderação independente do provedor de hospedagem parece ótima, porque reduziria a preocupação com a escolha da instância
Ainda assim, a instância provavelmente continuará tendo que moderar para não hospedar conteúdo ilegal localmente
No fim, isso vira algo bem difícil para quem opera instâncias e pode levar a bastante confusão. Talvez eu tenha entendido errado
Mas isso é igual independentemente do protocolo usado
Um PDS pode rodar em uma máquina Ubuntu razoável, mas até este texto admite que o relay é caro e um enorme ponto central de controle
Qual é o plano do Bluesky para lidar com spam? Provavelmente bloquear no relay
O servidor DID também é outro ponto central de controle
Ainda assim, você poderá rodar um PDS à vontade
Uma curiosidade divertida sobre o Bluesky, ligando com um texto de pouco tempo atrás: este também é, de certa forma, derivado do nome de uma pessoa
O nome da CEO em chinês significa literalmente blue sky
Foi coincidência. Mas meu nome do meio em chinês significa bluesky
Este quadrinho curto também é bom: https://bsky.social/about/welcome-to-bluesky-comic
Se o Bluesky encerrar o suporte a
did:plc, todas as identidades PLC existentes quebram?Fiquei curioso porque o PLC funciona enviando pings para aquele serviço
Sou cético em relação a labelers de terceiros
Como impedir abusos?
Se um serviço de labeler começar a abusar da sua posição, o usuário pode simplesmente cancelá-lo
Há uma explicação detalhada de como o Bluesky pretende encaixar labelers no ecossistema em https://github.com/bluesky-social/proposals/tree/main/0002-l...
Posso dar minha opinião, mas a pergunta é ampla demais e não sei por onde começar a responder
Qualquer pessoa na rede pode rotular qualquer coisa, incluindo outros labelers
Apps podem expor os labelers que o usuário pode assinar, como os feeds personalizados atuais do Bluesky
Assim como apps hoje expõem e ranqueiam feeds personalizados segundo popularidade expressa por curtidas e salvamentos, eles também podem fazer curadoria de como labelers são expostos e ranqueados
A abordagem de que “as ferramentas de moderação pertencem à camada de alcance. Elas pegam todas as falas, mas oferecem uma forma de limitar o alcance daquilo que eu não quero ver” acaba parecendo uma moderação do tipo “se não quer ver, feche os olhos”
Sei que essa é uma filosofia querida no Silicon Valley, mas a considero fundamentalmente falha
Há situações legítimas em que é preciso impedir que outras pessoas não relacionadas falem sobre determinado assunto ou tenham acesso a certo conteúdo
Exemplos típicos são assédio cibernético, doxxing e pornografia de vingança. Duas ou mais pessoas podem falar sobre maneiras de prejudicar um terceiro, ou divulgar informações privadas, humilhantes ou falsas
Remover essa informação do feed da vítima é completamente inútil e, para começo de conversa, é provável que ela nem apareça no feed da vítima. O dano vem do fato de outras pessoas verem esse conteúdo ou participarem da discussão, mas esse dano é real
Em sistemas tradicionais de moderação, um moderador pode remover a publicação para todos ou bloquear os agressores para interromper esse comportamento. Em um sistema que “apenas oculta conteúdo”, isso é impossível
Listas de bloqueio compartilhadas ou “rótulos” também não funcionam. Os consumidores do conteúdo não têm incentivo para bloqueá-lo; pelo contrário, querem ver pornografia de vingança
Quem quer bloquear é a vítima, mas a vítima não tem poder para obrigar todos a usar uma lista de bloqueio específica. Isso porque o ponto central desse sistema é que ninguém pode impor uma lista de bloqueio a outra pessoa
A equipe analisou esses problemas e “também consultou especialistas”, mas, como ainda é um trabalho em andamento, não sinto que eu tenha autoridade para falar sobre isso
A parte de que “os rótulos não funcionam porque as pessoas querem ver aquilo, em vez de bloqueá-lo” faz parte de um espaço de problemas que a equipe reconheceu explicitamente
Além disso, veja isto aqui: https://lobste.rs/s/shseqz/how_does_bluesky_work#c_vjvmei