Cómo funciona Bluesky
(steveklabnik.com)- BlueSky es una app de microblogging similar a Twitter y Mastodon, pero su objetivo mayor es comprobar si es posible tener aplicaciones sociales distribuidas a gran escala sobre AT Protocol (atproto)
- atproto no es blockchain, DAO ni NFT, sino un protocolo federado que usa criptografía y Merkle tree, entre otras cosas, para que los registros firmados por usuarios se repartan entre PDS, Relay y App View
- Su escalabilidad viene de una estructura en la que el Personal Data Server (PDS) del usuario no envía directamente las publicaciones a todos sus seguidores, sino que Relay reúne los datos de la red y los ofrece como firehose
- La moderación se divide bajo el modelo de “speech vs reach”, separando la réplica del contenido y el control de exposición, para que labeler, feed generator y App View apliquen filtros y bloqueos
- Los DID estables y los handles basados en dominios dan portabilidad de cuenta, pero el servicio de resolución
did:plcoperado por BlueSky sigue siendo un punto de debate sobre centralización
La relación entre BlueSky y atproto
- BlueSky hoy funciona como una aplicación de microblogging, pero dentro de la visión general es una primera aplicación para demostrar el potencial del Authenticated Transfer Protocol, es decir, atproto
- El sitio web de BlueSky dice que “las redes sociales son demasiado importantes para que las controlen unas cuantas empresas, y estamos construyendo una base abierta para una internet social donde todos puedan construir el futuro”
- Como BlueSky es una empresa, puede haber una mirada escéptica del tipo “una empresa está construyendo algo que no debería controlar una empresa”, pero el núcleo del diseño está en atproto más que en la app
- atproto es un protocolo federado para aplicaciones sociales distribuidas a gran escala
Un protocolo distribuido, no una criptomoneda
- atproto puede parecer algo parecido a las criptomonedas por expresiones como “red distribuida” y “protocolo”, pero no es una criptomoneda
- No es blockchain, DAO ni NFT, aunque sí usa algunas técnicas como criptografía y Merkle tree
Estructura básica de atproto
- atproto adopta una estructura federada donde múltiples actores operan distintas partes del sistema y se comunican entre sí
- Está diseñado pensando en una base de usuarios masiva: asigna más funciones a quienes pueden soportar la carga y reduce la carga para quienes no
- BlueSky superó los 5 millones de usuarios esa semana, al momento de escribir el texto, y se considera mucho más estable que el Twitter inicial
- Actualmente atproto se basa en un modelo 100% público y no tiene funciones como mensajes privados
- Como es difícil implementar bien funciones privadas en un sistema federado, se prefirió hacerlo bien antes que lanzar algo con limitaciones graves
- Por ahora, conviene usarlo solo para contenido que pueda ser público
Registros, repositorios, App View y Relay
- El usuario crea un record firmado criptográficamente, y esa firma demuestra quién es el autor
- El record sigue un esquema llamado Lexicon
- El record se guarda en un repository, que funciona como un servicio que expone HTTP y WebSocket
- A este tipo de servicio normalmente se le llama PDS (Personal Data Server)
- El usuario puede operar su propio PDS o usar uno hospedado por otra persona
- Las aplicaciones leen los record almacenados en la red y construyen funciones sobre ellos
- Como estos servicios exponen una perspectiva particular de la información, se llaman App View
- Crear una aplicación consiste en definir un Lexicon, leer los record que usan ese Lexicon e ignorar el resto
- Que los PDS se avisen directamente entre sí presenta grandes problemas de escalabilidad
- Si cada vez que se publica algo hubiera que enviarlo directamente al repository de cada seguidor, sería ineficiente y el costo de operar repositories populares sería alto
- Relay reduce ese problema reuniendo la información de la red y exponiéndola como firehose
- En la práctica, App View mira Relay en lugar de mirar directamente los repository
- Cuando alguien publica, el repository avisa a Relay, y los seguidores ven el resultado de que App View filtre la salida de Relay
- Relay puede ser grande y costoso de operar, pero también se pueden imaginar Relay más pequeños que propaguen solo un subconjunto específico de usuarios
El modelo de moderación “speech vs reach”
- Como atproto es un protocolo para aplicaciones sociales, no solo piensa en cómo conectar personas, sino también en cómo desconectarlas
- El modelo de moderación de BlueSky se divide en speech vs reach
- La capa de speech se encarga de replicar contenido en la red sin importar su significado
- La capa de reach da herramientas para limitar hasta dónde llega lo que el usuario no quiere ver
- Decir que BlueSky “no modera” o que “solo prioriza la libertad de expresión” no es exacto
- Las herramientas de moderación están integradas en el propio protocolo y pueden funcionar también sobre contenido de aplicaciones distintas de BlueSky
- El usuario puede elegir a sus propios moderadores, sin quedar sujeto a la elección —o a la falta de ella— de otras personas
Feed generator
- En atproto, el feed se separa como un servicio independiente llamado feed generator
- El feed generator recibe el firehose producido por Relay y filtra y ordena el contenido según los criterios que quiera para mostrar una lista
- El usuario puede compartir con otros usuarios los feeds que haya creado
- Ejemplos de feeds:
- Quiet Posters: muestra publicaciones de personas que no escriben con frecuencia
- the ‘Gram: muestra solo publicaciones con fotos adjuntas
- My Bangers: muestra tus publicaciones populares
- Una de las fortalezas de BlueSky es que el usuario puede crear fácilmente sus propios feeds algorítmicos y compartirlos
- Los feed son una función añadida hace relativamente poco a atproto, así que puede que todavía no estén completos y podrían cambiar en el futuro
Labeler y moderación a nivel de red
- Labeler es un servicio que pone labels a contenido o cuentas
- El usuario puede suscribirse a un labeler específico y hacer que su experiencia cambie según los labels de las publicaciones
- El labeler puede funcionar como quiera su operador
- Puede ejecutar algoritmos automáticos sobre publicaciones
- Puede tener aprobación o rechazo manual por parte de personas
- Puede usarse como blocklist o como filtro NSFW
- La función de label existe, pero al momento de escribir no está claro si los usuarios pueden ejecutar directamente su propio labeler
- BlueSky opera su propio labeler
- Todavía no se conoce una liberación externa
- Al combinar feed, App View y labeler, el usuario puede elegir su experiencia de moderación dentro y fuera de una aplicación
- En un feed puede ver solo SFW y en otro permitir contenido NSFW
- Puede crear y compartir blocklists
- Como las herramientas de moderación funcionan a nivel de protocolo y no de aplicación, se puede usar el mismo labeler en otras aplicaciones construidas sobre atproto
- Si alguien crea un clon de Instagram sobre atproto, podría usar el mismo labeler de blocklists
- Si quieres, un usuario bloqueado en un lugar puede quedar bloqueado en todos
Diferencia frente al modelo de instancias de Mastodon
- El modelo de atproto es distinto de tener una “cuenta” dentro de una “instancia” específica como en Mastodon
- Preguntas como “¿qué pasa si mi instancia se defederata?” no se aplican tan directamente
- Se puede lograr algo parecido ignorando publicaciones provenientes de un PDS específico
- Pero esa elección no la toma el dueño del servidor en nombre del usuario, sino que es una decisión del propio usuario
DID, handle y portabilidad de cuenta
- El núcleo de identidad en atproto es el DID (Decentralized Identifier)
- Un DID de ejemplo tiene la forma
did:plc:3danwc67lo7obz2fmdg6jxcr
- Un DID de ejemplo tiene la forma
- La identidad que el usuario ve en la práctica también usa un handle, y ese handle es un nombre de dominio
- Por ejemplo:
@steveklabnik.com - Quienes se registran en BlueSky pueden recibir un handle con la forma
@username.bsky.social
- Por ejemplo:
- Como el DID es estable, aunque cambies el handle de
@steveklabnik.bsky.sociala@steveklabnik.com, no se interrumpe nada para tus seguidores y en la interfaz solo cambia el handle - Para usar un dominio como handle, el PDS genera el DID y luego se agrega un TXT record al DNS de ese dominio
- Incluso quien no sabe de DNS puede registrar un dominio y configurarlo como handle mediante la alianza entre BlueSky y NameCheap, sin conocimientos técnicos
- La portabilidad de cuenta se basa en DID y firmas criptográficas
- El contenido creado por quien usa un DID específico va firmado y se replica por la red
- Para “cerrar” una cuenta, habría que impedir a la fuerza el uso de la clave que posee el usuario, pero por diseño ningún otro actor de la red accede a esa clave
- Aunque un PDS se caiga, se puede hacer backfill del contenido desde la red y avisar que se migró a un nuevo PDS
Los puntos en debate de did:web y did:plc
- BlueSky soporta dos mecanismos de DID
did:web: mecanismo basado en nombres de dominiodid:plc: mecanismo propio implementado por BlueSky
- El
plcdedid:plcsignifica “placeholder”, y BlueSky planea seguir dándole soporte did:plctiene la debilidad de que la información correcta debe resolverse mediante un servicio operado por BlueSky- Un ejemplo de consulta puede verse en plc.directory
- Por esta estructura, existe la crítica de que BlueSky podría banear usuarios con más fuerza de la que el diseño de la red originalmente permitiría
- También hay razones para no ver esto como algo fatal
- Si no quieres, puedes usar
did:web - Está diseñado para que puedas migrar si aparece un sistema mejor
- En el futuro, la gobernanza de
did:plcpodría moverse a un modelo de consenso - Otros actores también podrían operar un servicio
did:plcy usarlo
- Si no quieres, puedes usar
Cómo se monta BlueSky sobre atproto
- BlueSky es una aplicación construida sobre la red atproto
- BlueSky opera un App View y la aplicación web que lo usa
- También opera PDS para usuarios registrados desde la webapp, además de los Relay con los que se comunican esos PDS
- BlueSky publica dos tipos de Lexicon
com.atproto.*: operaciones de bajo nivel necesarias para cualquier aplicación en la redapp.bsky.*: operaciones específicas de BlueSky
- El objetivo del producto BlueSky es que el usuario pueda usarlo sin conocer todos estos detalles técnicos
- Como no hay instancias, no existe un flujo de elegir una instancia para crear una cuenta
- Si el host se cae, puedes migrar, y tus seguidores ni siquiera tienen que notarlo
Crear una nueva aplicación sobre atproto
- Una aplicación de atproto empieza por crear un Lexicon
- Después opera un App View que procesa, dentro de los datos de la red, aquellos relacionados con ese Lexicon
- La aplicación debe permitir que el usuario escriba datos en su PDS usando ese Lexicon
La separación clave del diseño
- La separación de roles entre atproto y BlueSky es un elemento importante del diseño
- Una “killer app” como BlueSky da una razón para usar la red
- BlueSky también cumple una función de dogfooding, al validar si de verdad se pueden construir aplicaciones reales sobre atproto
1 comentarios
Comentarios de Hacker News
Parece estar muy bien diseñado y da la impresión de resolver algunos de los grandes problemas de ActivityPub
Antes no me interesaba Bluesky, pero ahora me dan ganas de crearme una cuenta
En lugar de usar protocolos existentes como
user@hosty WebFinger, que todo el mundo usa, optaron por “usar dominios como identidad”, y como no tomaron como referencia la forma en que ACME ya resuelve esto con certificados, terminó ocurriendo que alguien se apropió del dominios3.amazon.comen Bluesky https://www.reddit.com/r/programming/comments/138hlf2/s3_dom...También crearon un nuevo protocolo de llamadas remotas,
XRPC, y usanLexicon, un esquema de datos basado en generación de código cuya ventaja no está clara más allá de ser más nuevo que protobuf o jsonldCuesta confiar en una “red abierta” que sigue mostrando una actitud de no querer respetar ni dialogar con otros ecosistemas, y además hace pensar cuántos errores de diseño comunes habrán terminado incluyendo por rechazar conocimiento compartido
No hay un incentivo social claro para que alguien instale y mantenga relays y servicios de moderación separados de comunidades reales, así que al final los únicos incentivos que quedan son los monetarios: servicios de pago, inserción de anuncios, extracción de datos y manipulación de información
Si la distribución de datos y la moderación se centralizan, tanto el costo de hosting como el costo humano se vuelven un negocio grande, y eso termina yendo en una dirección que en la práctica dificulta que alguien que no sea Bluesky opere su propio relay o servicio de moderación
A pesar de las desventajas de ActivityPub, enfoques como las “comunidades con puerta de entrada” hacen que el usuario sienta pertenencia a su servidor, y que administradores y moderadores sientan orgullo de brindar un servicio a sus usuarios
El AT Protocol permite técnicamente varios relays y servicios de moderación, pero queda la duda de cuántos surgirán en la práctica
Creo que es un error juzgar un protocolo de red social solo desde una perspectiva técnica y adversarial. A cambio de no depender de un servidor, también se separa de comunidades más estrechas, y deja de haber algo en juego
No tener nada que perder en términos de datos, identidad y comunidad es una espada de doble filo
Entiendo que por ahora solo hay un relay
Si aparecen varios relays, cada uno verá la red de forma distinta, y el relay que incluya más publicaciones terminará siendo el mejor relay
Conseguir diversidad de relays en vez de un solo relay dominante podría ser bastante difícil, y se parece a cuando un sistema DNS alternativo intenta ganar traction. Entonces, si mis publicaciones no quedan registradas por el relay dominante, parecería que no hay mucho que hacer
Aún está muy verde, así que quizá no termine siendo así, y aunque exista un relay dominante, GitHub tampoco es tan malo y sí hay alternativas
Si al sistema lo llamaran
[microblog] -> [indexador] -> [cliente], sería mucho más fácil de entenderEn realidad hay más componentes, pero el funcionamiento básico de Bluesky es más o menos ese, y parece que solo le pusieron nombres distintos a lo que uno esperaría
La razón por la que hace falta un indexador es que el ID de usuario no se mantiene estático dentro del sistema.
DID:PLCempieza como una subcadena del hash, pero luego ocurre una extraña reorganización criptográfica por la “rotación de claves”, y con el tiempo el ID del usuario cambia sin que la propia persona lo notePiensa en un sistema como LiveJournal, pero donde los handles cambian todo el tiempo y hace falta una autoridad que rastree esos cambios. Eso sí, solo se pueden publicar mensajes cortos, sin títulos ni soporte para Markdown
Personalmente, estoy esperando un nuevo
DID:PLCque entregue una clave pública estática y firme los mensajes con la clave privada. Habría mucho menos que rastrear, y el self-hosting y el desarrollo local-first serían bastante más sencillosSería como una interfaz local de GitHub que obtiene datos de varias instancias de GitHub, cada una alojando conjuntos de repositorios distintos, aunque a veces superpuestos
También se parece a un cliente de Usenet que reúne grupos de noticias desde varios servidores NNTP
Me da curiosidad por qué piensas que cada relay terminaría viendo la red de forma distinta
Lo que me intriga es cómo BlueSky puede prometer de forma creíble que solo usará las partes abiertas del protocolo
BlueSky en la práctica se ve bastante centralizado, así que no parece haber una razón técnica por la cual un cliente first-party tenga que ser necesariamente un cliente de ATProto
A corto o mediano plazo, hacer eso sería una gran traición a la confianza de los usuarios, pero la estructura de facto distribuida de ActivityPub aquí sí parece una protección más fuerte
Si quieres decir que el relay first-party y el PDS podrían comunicarse entre sí usando otro protocolo, no termino de entender cuál sería la preocupación
Dos clientes de ActivityPub también podrían hablar entre sí usando un protocolo que no sea ActivityPub
De hecho ya lo están haciendo así, y si empiezan a cambiar en otra dirección, la gente se va a dar cuenta muy rápido
Está bien que hayan llegado a distinguir entre “expresión” y “alcance”, pero a largo plazo Mastodon se siente como la opción más inteligente por su simplicidad
A corto plazo, como la curación del feed en Mastodon claramente es más difícil, puede ser menos divertido o menos útil
La pregunta clave es cómo podría manipular esto un actor malicioso hipotético, probablemente rico o poderoso, si quisiera mover los hilos aquí
En el artículo, esta parte se pasa demasiado por encima con algo como “no entiendo muy bien cómo funcionan los feeds”, y eso resulta muy sospechoso. Parece que sí saben muy bien cómo funcionarían los feeds, y que también saben que ahí hay poder y dinero, así que quieren agarrarlo
El autor dice esto: “Los feeds son una función añadida recientemente a atproto, así que existen, pero puede que todavía no estén completamente terminados y podrían cambiar en el futuro. Habrá que observarlo. Desde mi perspectiva funcionan bien, pero no estoy siguiendo los detalles técnicos de bajo nivel.”
En el párrafo inmediatamente anterior también aparece este contexto: “Una de las funciones estrella de BlueSky frente a otras herramientas de microblogging es la capacidad total de elección del usuario. Si quiero crear yo mismo un algoritmo de feed, puedo hacerlo y compartirlo fácilmente con otras personas.”
El feed es de código abierto, existe ahora mismo, y hasta puedes ejecutarlo tú mismo
Tampoco está claro a qué se refiere exactamente “mover los hilos”, ni de qué tablero está hablando ni en qué sentido. Aquí hay muchas piezas en movimiento
La idea de que el usuario pueda elegir un proveedor de moderación independiente del proveedor de hosting suena genial
Aun así, parece que las instancias igual tendrían que moderar para no alojar contenido ilegal en su jurisdicción
Al final eso parece bastante difícil para quienes operan instancias, y podría llevar a bastante confusión. Puede que lo haya entendido mal
Pero eso da igual qué protocolo se use
El PDS puede correr en una caja Ubuntu más o menos normal, pero incluso este artículo reconoce que el relay es caro y es un enorme punto central de control
¿Cuál será el plan de Bluesky para combatir el spam? Probablemente bloquearlo en el relay
El servidor DID también es otro punto central de control
Aun así, por lo menos puedes correr el PDS libremente
Como dato curioso sobre Bluesky, y enlazándolo con un artículo reciente, esto también viene a ser un nombre tomado de una persona
El nombre de la CEO en chino significa literalmente blue sky
Fue coincidencia. Pero mi segundo nombre en chino significa bluesky
También está bueno este cómic corto: https://bsky.social/about/welcome-to-bluesky-comic
Si Bluesky dejara de dar soporte a
did:plc, ¿todas las identidades PLC existentes quedarían rotas?Lo pregunto porque PLC parece estar estructurado de forma que hace ping a ese servicio
Soy escéptico con los labelers de terceros
¿Cómo se evita el abuso?
Si un servicio de labelers empieza a abusar de su posición, el usuario simplemente puede dejar de usarlo
Hay una explicación detallada de cómo Bluesky planea encajar los labelers en el ecosistema en https://github.com/bluesky-social/proposals/tree/main/0002-l...
Puedo dar mi opinión, pero la pregunta es tan amplia que no sé por dónde empezar a responder
Cualquiera dentro de la red puede etiquetar cualquier cosa, incluidos otros labelers
Las apps pueden mostrar qué labelers suscribir, igual que hoy muestran los feeds personalizados de Bluesky
Las apps también pueden curar cómo se muestran y clasifican los labelers, del mismo modo que hoy muestran y ordenan feeds personalizados según su popularidad, que actualmente se expresa con likes y guardados
El enfoque de que “las herramientas de moderación pertenecen a la capa de alcance. Toman todas las publicaciones, pero ofrecen una forma de limitar el alcance de lo que no quiero ver” termina pareciéndose a una moderación del tipo “si no te gusta, cierra los ojos”
Sé que es una filosofía popular en Silicon Valley, pero me parece fundamentalmente defectuosa
Hay situaciones legítimas en las que se debe impedir que otras personas no relacionadas hablen sobre cierto asunto o accedan a cierto contenido
El ejemplo típico es el ciberacoso, el doxxing y la pornografía de venganza. Es cuando dos o más personas hablan de cómo dañar a un tercero, o publican información privada, humillante o falsa
Quitar esa información del feed de la víctima es totalmente inútil, y de hecho es muy probable que ni siquiera aparezca ahí desde el principio. El daño viene de que otras personas vean ese contenido o participen en la discusión, y ese daño es real
En un sistema de moderación tradicional, un moderador puede borrar la publicación para todos o bloquear al agresor para detener ese comportamiento. En un sistema que “solo oculta contenido”, eso no es posible
Las listas compartidas de bloqueo o las “etiquetas” tampoco funcionan. Los consumidores de ese contenido no tienen incentivo para bloquearlo; al contrario, quieren ver pornografía de venganza
Quien quiere bloquearlo es la víctima, pero la víctima no tiene poder para obligar a todos a usar cierta lista de bloqueo. Porque la esencia de este sistema es que nadie puede imponerle a otros una lista de bloqueo
El equipo revisó estos problemas e incluso “consultó con expertos”, pero como sigue siendo un trabajo en curso, no siento que me corresponda hablar del tema todavía
La parte de que “las etiquetas no funcionan porque la gente quiere verlo en vez de bloquearlo” está incluida explícitamente dentro del espacio de problemas que el equipo reconoció
Como referencia adicional, aquí está esto: https://lobste.rs/s/shseqz/how_does_bluesky_work#c_vjvmei