O Guia Definitivo do Secure Scuttlebutt
Uma rede P2P “offline first”
1- Problemas comuns que eu gostaria de resolver
Tenho percebido que sou um usuário de computador constante e extremamente insatisfeito. Há muita coisa que eu gostaria que fosse possível (e fácil) mas que, atualmente, são casos meio que sem solução. São problemas comuns que eu acredito que afligem muita gente, não somente a mim. E eu me sinto meio frustrado por não conseguir resolvê-los, seja por falta de tempo, seja por falta de capacidade, mesmo…
1.1- Dois laptops
Eu uso dois laptops distintos: um em casa e outro no trabalho. E eu gostaria que meus “archives” (as coisas que eu mantenho salvas no HD e que estão razoavelmente bem organizadas e catalogadas) ficassem perfeitamente sincronizados entre os dois. Ou seja: alterações que eu faça em um eu quero que sejam aplicadas também a outro e vice-versa.
Porém, sempre que saio do escritório eu deixo aquele laptop dormindo. E vai-se cerca de uma hora até eu acordar o laptop de casa. Eu absolutamente não gostaria de ter que arranjar um “overlap de uptime” entre os dois, tampouco ter que “espelhar” minhas coisas em uma terceira máquina — veja que tenho mais de 62GB de arquivos.
E, veja só: a maioria desses 62GB já estão em ambas as máquinas. Só o que eu preciso é sincronizar algumas poucas mudanças, geralmente coisa de alguns mebibytes (como quando eu descarrego as fotos do celular no laptop).
E, não, Dropbox absolutamente não é uma possível solução. Caramba, como eu sofro com o I/O excessivo dele com pouco mais de 2GiB! Imagina 62! E não quero “confiar” em código fechado. Eu até rodo o Dropbox no Firejail, mas ainda assim ele acaba tendo acesso a muitos dados que deveriam ser confidenciais — mas acabam ficando à mercê da boa-vontade da “trupe” do Dropbox.
E se tem algo que tenho aprendido maratonando Arquivo X é:
Trust no one!
E agora, como faz?
1.2- Sistema de arquivos
Ademais, eu até que consigo me organizar bem com o sistema de arquivos — eu sou um cara do shell — , mas preciso fazer escolhas. E, “a cada escolha, uma perda”. Por exemplo eu organizo minhas fotos por ano. Então há um diretório para cada ano: 2008, 2009, 2010 e por aí vai. Mas se eu quiser ver todas as fotos em que aparece o meu catioro, bem… aí a coisa complica um pouco. Eu precisaria fazer uso daquelas aplicações que geram álbuns. Mas eu as detesto. O ideal, para mim, seria fazer isso:
# ristretto /mnt/archives/photos/todas-as-fotos-com-o-meu-catioro
1.3- As fotos que a mãe tira
Esse foi o “caso de uso” que acabou me levando ao “SSB”: minha mãe tem um tablet já há muito tempo e tira muitas fotos com ele. E não apenas fotos: há uma porção de vídeos, também. Eu fico impressionado, inclusive, com o fato de o espaço de armazenamento do bichinho ainda não ter se esgotado…
E, veja só, meus pais foram morar no meio do mato. Conectividade? Ha! Mal consegue-se falar no celular.
Eu também tenho cá minhas fotos e gostaria de “trocar figurinhas” com meus pais. Mas quando nos encontramos, ninguém tem interesse no tedioso processo de ficar vendo foto a foto o que vai pra lá e o que vem pra cá. Esse tipo de coisa se faz logo em seguida à captura: “tirei a foto, compartilhei” e pronto.
O que eu creio que seria o ideal: que meu pais tivessem um “facebook local”, que funcionasse mesmo sem conexão com a internet-como-a-conhecemos. Minha mãe tira uma foto e compartilha. Ambos (meu pai e ela) tem acesso à foto. Eventualmente, meu pai passa aqui em casa pegar a correspondência (porque se os Correios não funcionam bem aqui “na capitar”, pense em como é no meio do mato!) e conecta seu celular no roteador wi-fi. Agora meu laptop também tem acesso às fotos!
E esse processo não precisa ser nem completo nem rápido: tudo bem se meu pai estiver com pressa e, das 100 fotos eu só conseguir ver 30. Outro dia eu pego o resto. Tudo bem, também, se eu fizer um comentário em uma delas e minha mãe só vê-lo daqui a uma semana. Não temos pressa.
E, o que é melhor: não quero interagir com o sistema. Deixe que ele se sincronize sozinho.
2- Entra o Secure Scuttlebutt
O Secure Scuttlebutt (SSB) é um protocolo que provê padrões para se definir identidades e gestão de “feeds” de informação. É claro que ele não resolve todos os problemas que eu citei. Mas certamente resolve alguns.
2.1- Um protocolo baseado em fofoca
Scuttlebutt é um nome arcaico para “conversa de corredor”. Sabe quando você vai pegar uma água, encontra aquele cara do outro departamento e pergunta como vão as coisas por lá? No tempo de encher a garrafa você descobre que a filha da dona Tereza está grávida do terceiro filho, que o Teodoro foi trabalhar para o concorrente e que o Caetano, que deveria entrar no lugar dele, acabou sendo deixado de lado porque o chefe achou que o Cardoso era muito mais competente. Isso é uma das definições de “scuttlebutt” (que, originalmente, era uma versão de “o garrafão d'água” — se ligou de como o termo foi evoluindo?).
De certa forma, é o contrário do que é a ZeroNet. A ZeroNet seria você com cinco telefones ligados no “viva-voz” sabendo tudo o que acontece na empresa o tempo todo. O SSB é você se atualizando entre levantar da sua mesa para pegar um café e voltar.
(Sobre o termo “scuttlebutt”, veja também: https://ag1scuttlebutt.wordpress.com/2014/05/09/what-exactly-is-scuttlebutt-anyways/)
2.2- Offline first
Você conhece o movimento/conceito/escola “offline first”? Vide http://offlinefirst.org/ . A ideia é que você sempre crie suas aplicações considerando que elas devem funcionar bem mesmo que o dispositivo em que rodem esteja absolutamente sem conexão. E isso não é coisa a ser aplicada apenas a “países em desenvolvimento”:
Frequently not having any data connection in even the wealthiest and most developed cities of the world has led us to conclude that no, the mobile connectivity/bandwidth issue isn’t just going to solve itself on a global level anywhere in the near future.
O foco do SSB, então, não é em velocidade, mas, de certa forma, em consistência: nem sempre estaremos todos conectados, mas no longo prazo, conectando-se de vez em quando, todos tendem a manter-se atualizados sobre todos.
2.3- Um protocolo baseado nas interações sociais
Naquele papo que rolou ao pegar uma água você recebeu updates sobre a filha da dona Tereza, sobre o Teodoro, sobre o Caetano, sobre o Chefe e sobre o Cardoso. E você nem sabe quem é o Cardoso! Mas se alguém lhe perguntar, agora você já pode dizer: “não conheço a figura, mas fiquei sabendo que ele foi promovido — entrou no lugar do Teodoro”.
O SSB funciona sobre premissas semelhantes. Você vai guardar na sua máquina, além de seus próprios dados, updates sobre as pessoas que você segue — e sobre as pessoas que são seguidas por quem você segue.
(Essa é a implementação padrão, claro. Mas, pelo que entendo do protocolo, nada impede que você crie um cliente que permita configurar limites de espaço reservado para “segundos” e “terceiros”.)
Ademais, ao encontrar o mesmo cara novamente, ele não vai lhe contar as mesmas coisas novamente. Se nenhum dos dois tiver nenhuma novidade, simplesmente ninguém fala nada.
2.4- E sem servidor central
Às vezes eu fico pensando na quantidade de coisas que eu já postei no Facebook e quanto do meu “log da vida” está depositado nas mãos desse povo que pode muito bem, do dia pra noite, simplesmente desligar os servidores ou sofrer um ataque e perder dados ou coisas assim. A nuvem é extremamente cômoda e prática, mas certas coisas me dão arrepios — especialmente essa sensação de que meus dados não são exatamente meus. E que é um esforço, que nem sempre terei disposição ou lembrarei de fazer, fazer backup dessas coisas.
Com o SSB, tudo o que você faz é salvo localmente no seu diretório ~/.ssb
. Mantenha um backup disso, e depois um backup do backup, e você estará bem.
Mas, novamente: como seus dados agora são também distribuídos, perdê-los definitivamente pode ser um desafio — assim como os dados de um repositório git com muitos clones: há cópias dos seus updates nas máquinas das pessoas que te seguem.
3- Mãos na massa!
Antes de dar detalhes técnicos, vejo que já podemos meter a mão na massa para pelo menos já “sentir” como funcionam as coisas.
3.1- Desktop: Instale e use o “Patchwork”
Estou aprendendo a amar essas “AppImages”. Para quem, como eu, usa Linux, basta baixar a AppImage e executá-la.
Ou, para a galera do terminal, como eu:
# wget 'https://github.com/ssbc/patchwork/releases/download/v3.8.10/Patchwork-3.8.10-linux-x86_64.AppImage'
# chmod a+x Patchwork-3.8.10-linux-x86_64.AppImage
# ./Patchwork-3.8.10-linux-x86_64.AppImage
Você verá uma aplicação com jeitão de “microblog” abrir no seu desktop.
3.1.1- Já aproveite para salvar sua identidade
Os detalhes virão na parte técnica, mas a tua identidade resume-se ao conteúdo do arquivo .ssb/secret
. Minha recomendação: salve uma cópia do dito cujo em um lugar seguro. Perder esse arquivo é como perder (para sempre) a senha do teu ~ Orkut ~!
3.1.2-Conecte-se a algum “Pub”
Quando você executa o Patchwork — ou roda o SSB — pela primeira vez, é natural que não tenha conexão com ninguém. Você está numa “ilha”, por assim dizer.
Caso haja outro usuário de SSB conectado na mesma rede local, você o verá na lista de pessoas conectadas, na barra lateral do Patchwork, assim como as pessoas que ele segue. Isso já é um bom começo. Mas, se quiser “ir para a taberna” (entendedores entenderão), você pode conectar-se a um “Pub”, que, basicamente, é um lugar em que vários outros usuários estão conectados.
A lista oficial de pubs (https://github.com/ssbc/scuttlebot/wiki/Pub-Servers) é meio desatualizada. Eu conectei-me nesse aqui:
3.2- Mobile: Instale e use o “MMMMM”
É uma app bastante em “alfa”, ainda, mas já é quase usável.
4- Detalhes técnicos
4.1- “Scuttlebot” ou “Secure Scuttlebutt”???
O SSB tem um grande problema: os materiais de divulgação são pouquíssimo apelativos, tanto visualmente quanto em conteúdo. Compare com IPFS ou Zeronet — que não são perfeitos, mas são muito mais atraentes. E a documentação, além de um tanto esparsa, é confusa. Por isso eu preciso explicar o que eu mesmo demorei um pouco para entender:
Scuttlebutt = o protocolo original, antigão.
Secure Scuttlebutt = o protocolo melhorado e atual.
Scuttlebot = uma implementação (e a principal, atualmente) de um servidor Secure Scuttlebutt.
Patchwork = uma aplicação que faz uso do protocolo Secure Scuttlebutt e que conecta-se ao servidor Scruttlebot.
4.2- O protocolo
Melhor tutorial sobre o protocolo:
https://ssbc.github.io/scuttlebutt-protocol-guide/
Muito completo, suficientemente simples de ser entendido. Excelente para quem planeja implementar seu próprio servidor.
4.3- O modelo de dados
Talvez essa seja a parte que acaba confundindo mais: a bem da verdade, não existe um modelo de dados. Existem alguns padrões, sim, mas estes parecem ter sido criados junto com as aplicações que rodam sobre o protocolo, como o Patchwork. Ou seja: você pode criar tipos de dados diferentes e criar sua própria aplicação usando o protocolo.
Eu mesmo quero criar uma aplicação para que as pessoas possam compartilhar e organizar suas fotos mais facilmente.
:)
4.4 Identidades e feeds
Tua identidade é tua chave pública.
Tuas assinaturas você cria com tua chave privada.
Cada identidade pode ter um feed.
Você segue feeds. Ou, em outras palavras, você segue identidades.
Os feeds são uma espécie de blockchain. Mas pelo menos é um blockchain por identidade, não um enorme blockchain global com trocentos terabytes que você precisa baixar inteiro antes de sequer conseguir saber se esse SSB é coisa boa mesmo ou não.
Simples assim.
~ Imagine: um enorme blockchain global com trocentos terabytes do qual todos precisariam ter uma cópia! Haha! Quem usaria uma coisa dessas, afinal? ~
Resumo
Secure Scuttlebutt é um protocolo de rede distribuída baseado nas interações sociais da vida real, não preocupado em ser “real-time”, mas em conseguir funcionar em “situações topológicas extremas”, como aparelhos sem conexão com a internet. Ele já é bastante funcional, mas tem muito espaço para exploração e muitas oportunidades interessantes de “pioneirismo”.
Ah, e se começar a usar o Patchwork, me siga:
@4kdPp9KfmxljvIyBO2miqcLLyl3B3o+WdjqV507kUOo=.ed25519