👴🏻 Os Antepassados do Bitcoin
Uma breve história das redes peer-to-peer (P2P), em 10 etapas.
Em vermelho, os tópicos listados nessa retrospectiva. Em amarelo, os predecessores diretos do Bitcoin. Em verde, embates legais e novos formatos que redefiniram a indústria do entretenimento online. Em azul, protocolos e serviços recentes a reacenderem a discussão sobre compartilhamento de conteúdos P2P. Veja a imagem em tamanho maior aqui.
A mudança de paradigma das arquiteturas cliente-servidor para as peer-to-peer (par a par, ou ponto a ponto) já foi explorada sob muitas perspectivas. Uma metáfora útil se baseia na Roma antiga: mais especificamente, na transição entre uma sociedade baseada em escravos e um sistema feudal.
Não sendo mais capaz de se expandir geograficamente por meio da guerra - e enfrentando custos linearmente crescentes por unidade de recursos mantidos -, o império se tornou ineficiente, e vulnerável à concorrência.
Sistemas sociais alternativos que melhor empregavam o potencial de seus recursos começam a se proliferar. Por que usar escravos apenas para conquistar terra, quando eles podem também semear e cultivar, cuidar do solo, e muito mais? O desenvolvimento extensivo deu espaço ao desenvolvimento intensivo, e os feudos colocam suas unidades de recursos para cooperar e produzir juntas. Populações anexadas não mais consumiam recursos, primariamente; mas também os forneciam.
Thomas Cole, em quadro sobre o Império Romano. Eles também tiveram problemas na hora de "escalar"
A narrativa é análoga à lógica por trás dos sistemas de compartilhamento de arquivos P2P. Em uma arquitetura dependente de um servidor central, quanto mais demanda há por um arquivo, mais banda larga é necessária para distribui-lo aos consumidores. Em um sistema ponto a ponto, quanto mais um arquivo é solicitado, mais gente o hospeda e propaga, reduzindo o custo de entrega por arquivo distribuído. O papel do público na equação é invertido.
O movimento peer-to-peer é indistinguível da Internet desde sua incepção. Deu origem a inúmeros protocolos e aplicativos que, nos casos mais extremos, redefiniram nossa maneira de consumir entretenimento. P2P pode ser auto-escalável, resistente à censura, anônimo - e a robustez das implementações atuais é o produto de uma evolução incremental que nos leva mais de meio século de volta no tempo.
📋 Uma lista não-exaustiva de iniciativas pioneiras
O que se segue é uma introdução gentil. O tempo pretérito é usado para fins narrativos - a maioria das redes mencionadas abaixo segue em funcionamento. Ainda mais interessante: a maioria das pessoas que os construiu está ao nosso redor.
1️⃣ 1969 - A ARPANET
A ARPANET originalmente conectava a UCLA, o Stanford Research Institute, a UC Santa Barbara e a Universidade de Utah, não no esquema cliente-servidor, mas sim tratando todas como pares computacionalmente equivalentes.
A ARPANET, em 1977
Alguns dos primeiros serviços populares da Internet, como FTP e Telnet, conformavam-se a uma arquitetura do tipo cliente-servidor, mas, como os hosts podiam atuar como servidores para outros hosts, padrões simétricos de uso acabaram florescendo.
2️⃣ 1979 - Usenet
A Usenet foi desenvolvida por estudantes de pós-graduação americanos, com base no protocolo Unix-to-Unix (UUCP). Por meio dele, uma máquina Unix pode discar automaticamente outra, trocar um arquivo, e desconectar, no que se assemelha a um BBS (sistema de quadro de avisos) - de alguma forma precursor dos fóruns e feeds que temos hoje.
A Usenet deu origem a termos atualmente onipresentes, como "FAQ" e "spam" 😊
3️⃣ 1999 - Napster
Nas décadas de 80 e 90, o modelo cliente-servidor floresceu, pois o poder das CPUs disponíveis para os consumidores ainda era pequeno (embora aumentando). A maioria das transferências de arquivos ocorria pelas linhas de transmissão herdadas da indústria telefônica, com FTP e USENET ganhando uso ao longo do período, e o IRC sendo inventado em 1988.
No final dos anos 90, novas tecnologias de compressão de dados (como MP3, MPEG) entraram em cena e deram um empurrão importante rumo ao cenário com o qual viemos a nos acostumar: mesmo os arquivos mais pesados (músicas, filmes) se tornaram relativamente portáteis; e seu compartilhamento, difícil de controlar.
🎰 Napster tinha um indexador central que instruía aos peers com quem deviam se conectar
O Napster foi desenvolvido por Shawn Fanning enquanto ainda era calouro na Northeastern University. Os usuários baixaram um programa gratuito que vasculhava computadores vizinhos em busca de arquivos MP3 e, em seguida, conseguia baixá-los diretamente, um do outro.
Em menos de um ano, o Napster tinha mais de um milhão de membros. Em menos de dois, o Metallica entrou com uma ação contra a empresa. Em menos de três (julho de 2001), ela foi fechada, juridicamente asfixiada. Chegou a tentar migrar para um modelo de serviço pago, mas não deu certo.
4️⃣ 2000 - Gnutella
O Napster ainda dependia de servidores centrais de indexação e, portanto, era suscetível ao desligamento (caso uma autoridade legal o impusesse, por exemplo).
Uma nova geração de protocolos de compartilhamento de arquivos liderada por Gnutella eliminou essa vulnerabilidade, permitindo que os usuários se encontrassem e se conectassem remotamente.
Ao empregar um modelo de inundação de consultas (em inglês, query flooding), o protocolo fez com que cada pesquisa fosse transmitida sucessivamente para outras máquinas na rede (o que, no caso, era significativamente menos eficiente do que consultar um indexador central). Outra diferença entre a Gnutella e seus antecessores era a quantidade de clientes agora disponíveis para executar o protocolo. O LimeWire, por exemplo, era somente um dentre muitos clientes da Gnutella.
Ilustrando o funcionamento do "query flooding", popularizado pelo Gnutella ☔
5️⃣ 2000 - Freenet
A Freenet trouxe uma grande melhoria em relação ao anonimato do usuário, inaugurando uma categoria que mais tarde seria rotulada de "darknet". Em termos simples, usuários armazenavam trechos de arquivos criptografados (em vez deles inteiros), conectando-os apenas através de computadores intermediários que transmitiam solicitações e respostas sem conhecer o conteúdo procurado. O design remete à maneira como roteadores de internet trocam pacotes sem saber nada sobre eles.
6️⃣ 2001 - BitTorrent
O famoso protocolo criado por Bram Cohen permitia a usuários se comunicarem diretamente através de uma porta TCP, mas contava com rastreadores centrais para registrar a localização / disponibilidade de arquivos. Vuze (antigo Azureus) foi o primeiro cliente BitTorrent a migrar para um sistema sem rastreador, implementando uma tabela de hashes distribuída (DHT) para que se pudesse descobrir novos peers (e encontrar conteúdos requisitados). Outros surgiram em seguida.
Ilustração de uma pesquisa em uma DHT - você pode se aprofundar no funcionamento aqui
A partir de então, o BitTorrent se tornou uma criatura de dupla face: os clientes que seguiam o protocolo passaram a carregar uma cópia desse tipo de tabela, que mantinha "informações de contato" de alguns outros nós, suficientes para se rotear e responder requisições. Quando havia uma busca por um torrent específico, o programa computava uma métrica de distância para comparar o infohash (um identificador único) do torrent que estava procurando com os IDs dos nós em sua própria tabela DHT local, encontrando iterativamente aqueles que estavam cada vez mais próximos do infohash em questão (é isso que a ilustração acima mostra).
Sem a necessidade de um indexador centralizado, a rede poderia persistir com os nós continuamente atualizando suas próprias tabelas de roteamento, indefinidamente, mesmo se autoridades legais agissem contra entidades ou servidores específicos.
Esse design permitiu a criação de redes novas e interdependentes para cada torrent, moldando subgrupos de acordo com a popularidade e o alcance de seus arquivos. Ainda hoje, por exemplo, um dos subgrupos mais concorridos na comunidade em torno dos torrents é privado e carrega aura de mistério, dedicando-se a proteger e compartilhar segredos de truques mágicos.
Mesmo com o Napster sendo desligado em 2001, a adoção de redes ponto a ponto continuou crescendo a toda velocidade. Em agosto do mesmo ano, mais arquivos foram baixados no Gnutella, Audiogalaxy e iMesh do que o número registrado pelo Napster em seu mês mais ativo de todos os tempos.
7️⃣ 2009 - Bitcoin 👀
O Bitcoin não foi projetado com o compartilhamento de arquivos em mente, mas acabou originando uma classe inteiramente nova de estruturas de dados P2P. A blockchain é um registro distribuído com um objetivo diferente daquele dos DHTs: Satoshi queria armazenar em cada nó da rede um registro de transações invulnerável a qualquer adulteração ou revisão. DHTs, por sua vez, visavam fornecer uma estrutura eficiente (em termos de tempo de pesquisa e memória requerida) para compartir dados em rede - a imutabilidade simplesmente não era a principal prioridade.
Zoom-in numa transação de bitcoin
O que poucos esperavam, muito provavelmente, é que a invenção de Satoshi fosse abstraída, destrinchada e eventualmente aplicada a casos de uso muito diferentes dos originais, que passavam por armazenamento e transação de valores financeiros.
8️⃣ 2011 - Namecoin
Namecoin nasceu da vontade de se generalizar o registro de dados em uma blockchain - o principal caso de uso é o registro de domínios "sem um mantenedor central" (os domínios .org e .com, por exemplo, são mantidos e geridos por instituições centralizadas). Domínios na Namecoin terminam com .bit.
Namecoin foi o 1º fork do bitcoin. É basicamente um sistema de registro e transferência de pares de chave-valor. É justo dizer que o Namecoin representou a primeira abordagem não monetária de uma blockchain.
Vitalik fala entusiasticamente sobre isso em um texto antigo para a Bitcoin Magazine, onde também menciona o potencial dos DNSs (veja abaixo).
9️⃣ 2012 - Diaspora
Diaspora se vendia como um servidor pessoal de código aberto e uma rede social descentralizada. Foi financiado com mais de U$ 200.000 via Kickstarter em 2010, e lançou um alpha de seu produto em seguida, para disponibilizar uma versão estável somente em 2012.
O montante captado pela Diaspora poderia ter sido algumas ordens de magnitude maior caso o projeto fosse "marqueteado" poucos anos depois, em meio à febre dos ICOs.
Usuários configuravam seu próprio "pod" para hospedar o conteúdo e interagiam por meio de um programa de desktop. O conceito sempre girava em torno da agregação de conteúdo de outras redes sociais, permitindo que as postagens fossem facilmente importadas do Facebook, Twitter e assim por diante, mas muitas das APIs necessárias nunca foram criadas. O projeto derrapou por alguns anos antes de ser adotado por Eben Moglen e pela Freedom Box Foundation.
Diaspora provocou na mídia uma reação anti-Facebook semelhante à que temos visto nos anos recentes, depois de despontarem outras alternativas como Mastodon e Gab.
🔟 >2014 - DSNs (Filecoin/Swarm/Sia/Storj/Maidsafe)
A idéia por trás das DNSs (decentralised storage networks) é basicamente transformar o armazenamento em nuvem em um mercado algorítmico.
Incentivar é a palavra-chave aqui. No BitTorrent, já existia o mesmo tipo de endereçamento único por conteúdo (como nas DSNs). Computadores individuais já contribuíam propagando os arquivos de outros. Além disso, já havia mecanismo básico para punir nós cujos comportamentos "fizessem mal à rede".
DSNs dão um passo além quando introduzem também recompensas para cada nó da rede que compartilhe espaço e/ou banda larga.
Há evoluções técnicas no que diz respeito à maneira como arquivos são "picotados e reconstruídos" (compare, por exemplo, o módulo de negociação de dados do IPFS - BitSwap - com o tit-for-tat do BitTorrent). Mas a grande diferença está no fato de que, agora, nós da rede que consistentemente contribuem para seu bom funcionamento podem ser remunerados.
Na hipótese de esses protocolos (e as redes que formam) ganharem tração, poder-se-á reduzir custos relacionados à distribuição no caso de aplicativos que permitam a negociação direta entre pares. Em alguns casos de uso (que não envolvem tokens), vale notar que já existem soluções P2P para cortar custos dramaticamente em períodos de pico de demanda.
📅 Sintetizando, eis uma classificação em "épocas"
1) Tínhamos o Napster, que ainda contava com um servidor central para coordenar as pesquisas na rede.
2) A "pesquisa por inundação" (query flooding) surgiu com o Gnutella, sobrecarregando os nós em uma determinada rede, mas eliminando os indexadores centrais.
3) DHTs se proliferaram com a popularização do BitTorrent, onde clientes começaram a distribuir índices para cada nó da rede, tornando-os mais redundantes e menos vulneráveis.
4) DSNs trazem a promessa de mercados baseados em incentivos, nos quais as redes podem ser ao mesmo tempo incensuráveis e economicamente saudáveis.