Como o sistema operacional da Urbit (Arvo) funciona?


Arvo é o sistema operacional da Urbit. Para entender como ele funciona e suas principais diferenças em relação a outros sistemas tradicionais como Windows, macOS e Linux, precisamos primeiro entender o que é um sistema operacional.


Como funciona um sistema operacional?

Um sistema operacional (SO) é um conjunto de programas cuja principal função é gerenciar os recursos de hardware e software de um computador. Ele fica no meio do caminho entre o usuário e o hardware do dispositivo.

Como assim?

O usuário geralmente interage na camada mais alta, a camada visual. Por exemplo, quando você escreve um texto e salva um documento Word no Windows, por baixo dos panos existe uma linguagem de programação (nesse caso, C++ e C#) que está atuando. Você não precisa escrever nenhum código em C++ porque a interface visual do Word atribui automaticamente todas as suas ações para os códigos necessários, facilitando as coisas. Na prática, é como se você estivesse escrevendo código.

Esse código vai interagir diretamente com o sistema operacional. Ou seja, o sistema operacional está sempre pronto para receber instruções, e essas instruções são fornecidas pelos programas que você está utilizando.

A comunicação entre o sistema operacional e a aplicação Word (que está usando C++) ocorre por meio de APIs. Essas APIs são como “pontes” entre o aplicativo e o sistema operacional. Elas permitem que softwares que utilizam linguagens de programação diferentes se comuniquem.

Depois que a comunicação foi feita com o SO, esse SO vai gerenciar os recursos de hardware necessários para que a tarefa seja concluída, como: gerenciar o tempo de CPU, o uso de memória RAM, a permissão para ler ou escrever arquivos no disco rígido etc.

Em resumo, temos essa dinâmica: usuário faz ações em alguma aplicação, essa aplicação converte as ações em código, esse código é enviado para o SO por meio de APIs, e o SO usa seu próprio código para mexer no hardware ou executar outras funções de baixo nível.

camadas entre o usuário e o sistema operacional

O que é o kernel de um sistema operacional?

O kernel é a parte central mais importante de um SO. Tudo o que explicamos até agora sobre gerenciamento e comunicação com o hardware quem faz é o kernel.

Mas além do kernel, um SO também é composto por outros recursos como:

  • APIs (para que desenvolvedores possam criar aplicações que interajam com o kernel);
  • Shell (interface que permite que o usuário se comunique diretamente com o kernel);
  • Daemons (processos que ficam rodando em segundo plano independentemente dos aplicativos do usuário, como serviços de rede, gerenciamento de energia e atualizações automáticas).

Qual o diferencial do SO Arvo?

Agora que já sabemos o que é um sistema operacional, podemos entender melhor o que torna Arvo especial:

Arquitetura do Arvo:

Diferentemente de sistemas como Windows, a arquitetura do Arvo é projetada com simplicidade e modularidade em mente. Modularidade é a separação dos componentes em módulos independentes, ao invés de uma arquitetura gigante monolítica.

Esses módulos podem ser testados, atualizados e mantidos de forma independente uns dos outros. Cada módulo é responsável por um conjunto específico de funcionalidades e interage com outros módulos por meio de interfaces bem definidas.

Para ficar menos abstrato, imagine que 5 caminhonetes consigam armazenar a mesma quantidade de materiais que um caminhão de transporte. Cada caminhonete está levando um conjunto separado de materiais, enquanto no caminhão está tudo misturado. Se uma caminhonete resolver mudar o curso, ela pode fazer isso sem impactar as demais caminhonetes. Se alguém precisar de um item que está em uma das caminhonetes, basta interagir com esta caminhonete em questão.

Essa seria a diferença entre uma arquitetura modular e uma arquitetura monolítica. Não há como mexer ou tomar uma decisão em relação a um item transportado no caminhão sem influenciar os demais.

Além do Arvo ser modular, o kernel do Arvo é construído com uma linguagem de programação funcional chamada Hoon, que facilita a manutenção e a legibilidade do código, tornando as coisas mais previsíveis.

Isso é importante para a filosofia da Urbit, que visa ser um projeto de código aberto onde as pessoas devem ser estimuladas a desenvolver aplicações e recursos no sistema.

Para você ter ideia, o kernel do Arvo possui apenas 1000 linhas de código, o que permite que qualquer desenvolvedor consiga analisar e compreender a arquitetura completa.

Em comparação direta, os kernels de sistemas como Windows, macOS e Linux possuem dezenas de milhões de linhas de código.

Esse é um dos motivos pelos quais o protocolo Urbit pode acabar se desenvolvendo rapidamente: a facilidade para os desenvolvedores implementarem suas ideias e projetos.

O Arvo organiza seus aplicativos em “vanes” e “agentes”. Vanes são partes integrantes do sistema operacional e gerenciam funcionalidades essenciais, como comunicação em rede, gerenciamento de estado e armazenamento de eventos.

Agentes são aplicativos de usuário que rodam sobre os vanes e interagem com eles. Você consegue ver a ideia de modularidade aqui? Vanes e agentes são como as caminhonetes que acabamos de comentar.

Essa separação permite que os desenvolvedores criem aplicativos com responsabilidades específicas e bem definidas, tornando mais fácil rastrear e corrigir problemas, bem como atualizar ou substituir partes do sistema conforme necessário.

Como o kernel Arvo é bastante enxuto, ele faz pouca coisa sozinho. As demais funções são delegadas paras as vanes, que também são conhecidas como módulos kernel. Cada vane tem um propósito. Por exemplo: Ames é a vane responsável pela rede. Behn é a vane responsável pelo timer. Clay é a vane responsável pelo armazenamento de arquivos. E assim por diante.

vanes da Urbit

Exemplo prático: se você quiser criar um aplicativo qualquer no Arvo, você criaria um agente responsável por lidar com as funcionalidades específicas desse aplicativo. Esse agente interagiria com os vanes relevantes para acessar recursos do sistema, como armazenamento e comunicação em rede, sem interferir em outros agentes ou vanes.

Já no Windows seria diferente!

A arquitetura do Windows é mais complexa e monolítica, consistindo em um kernel, bibliotecas do sistema, drivers de dispositivo e diversos serviços do sistema que interagem uns com os outros. Os aplicativos no Windows não estão tão fortemente separados quanto no Arvo, e a modularidade é bem menos enfatizada. Isso resulta em dependências complexas e dificuldades maiores para atualizar ou manter componentes individuais do sistema.

De forma prática, ao criar um aplicativo qualquer no Windows, você precisaria interagir com mais componentes, ter mais riscos de incompatibilidades, dependências, monitoramento, etc.


Arvo é executado dentro de outro sistema operacional?

Atualmente, Arvo costuma ser executado como uma aplicação em um sistema operacional “hospedeiro”, como Linux, Windows ou macOS.

Isso ocorre porque a Urbit ainda não é um sistema operacional completo, em termos de compatibilidade com hardware e recursos, como você encontraria em sistemas operacionais convencionais. Portanto, o Arvo é executado no topo de outro sistema operacional para aproveitar seus drivers e recursos de hardware.

É possível que, no futuro, Arvo possa ser desenvolvido para funcionar de forma mais independente, sem depender de um sistema operacional hospedeiro, mas, por enquanto, ele ainda precisa ser executado em conjunto com outro sistema operacional.

Então, em um primeiro momento, Arvo não foi criado para substituir Windows ou Linux, mas existe de forma parecida com um browser, ou seja, é um recurso que você utiliza para acessar outro ambiente.

Na prática, para acessar a Urbit você está instalando o Arvo no topo do seu SO (Windows, MAC, Linux…) e esse Arvo vai se comunicar com o Arvo de outras máquinas.

arvo se comunicando em diferentes sistemas operacionais

Como Arvo se comunica?

O Arvo no seu computador vai se comunicar com Arvos de outras máquinas através da vane Ames, o protocolo de rede ponto a ponto da Urbit. Essa comunicação acontece de forma descentralizada, sem depender de servidores centralizados. As máquinas na rede Urbit, também chamadas de “ships” (naves), interagem entre si para compartilhar informações e recursos.

Quando você executa a Urbit e se conecta à rede, seu Arvo se torna parte do ecossistema Urbit e pode se comunicar com outros Arvos no mundo todo. Em outras palavras, você faz parte de uma internet, a internet da Urbit.


Como funciona o armazenamento de dados na Urbit?

Um sistema tradicional como Windows/MAC/Linux depende crucialmente de estar conectado em alguma fonte de energia, já que grande parte do estado do sistema operacional é armazenado na RAM, que é volátil.

Sempre que você reinicia o computador ou perde energia repentinamente, todas as informações armazenadas na RAM são perdidas.

No Arvo, uma perda repentina de energia não afeta o estado do sistema operacional. Quando você inicializar sua “ship” de volta, ela estará exatamente como estava antes da falha. Suas informações nunca serão perdidas.

O motivo é que a manipulação do estado do sistema operacional é muito parecida com um SSD. Um SSD (disco rígido de estado sólido) armazena os dados permanentemente. Se o computador sofre uma perda repentina de energia, os dados gravados em um SSD permanecem lá fisicamente.

O interessante é que você não precisa saber nada sobre o sistema que está utilizando o SSD para saber tudo sobre esse SSD. Não existe “reiniciar” um SSD, ele simplesmente armazena dados e, quando a energia é restaurada, ele fica exatamente no mesmo estado em que estava quando a energia foi perdida.

Tecnicamente falando, Arvo possui essa característica por ser um “interpretador de estado sólido”. Mas vamos deixar essa explicação para outro artigo. O mais importante para ressaltar aqui são as características de:

Determinismo:

Arvo é um sistema operacional determinístico, ou seja, se o mesmo estado inicial e a mesma sequência de eventos acontecer, o sistema sempre vai produriz o mesmo resultado.

Isso é diferente dos sistemas operacionais como Windows, macOS e Linux, onde a execução de programas pode ser afetada por variáveis ​​externas, como interrupções e interações entre processos.

Exemplo prático: se você executar um programa no Arvo várias vezes com as mesmas entradas, ele sempre vai produzir a mesma saída. Já em outros sistemas, ao executar o mesmo programa, a saída pode variar devido a fatores externos.

Imutabilidade:

Arvo é construído em torno de árvores imutáveis. Isso significa que, em vez de modificar o estado atual do sistema, Arvo cria um novo estado a partir do estado anterior sempre que ocorre uma atualização. Nos sistemas tradicionais, o estado do sistema é geralmente mutável e pode ser alterado por vários processos em execução.

Exemplo prático: se você instalar um software no Arvo, o sistema vai criar um novo estado que inclui o software instalado, sem alterar o estado anterior. Já no Windows/MAC/Linux, a instalação do software pode modificar arquivos existentes e alterar o estado do sistema de forma irreversível.

Agora que já passamos por diversos conceitos, podemos explicar o que é Arvo com um resumo capturando os principais pontos.


Então, o que é Arvo?

  1. Arvo é um sistema operacional criado para permitir uma nova internet ponto a ponto. Nessa internet, os usuários possuem o total controle dos seus dados sem precisar depender de terceiros. É a peça central do protocolo Urbit.
  2. Arvo é um SO modular e simples, permitindo que desenvolvedores criem aplicações específicas utilizando apenas os módulos necessários, sem interferir ou precisar se preocupar com os demais componentes do sistema.  
  3. Arvo é um SO que lida com memória de forma permanente, sem a volatilidade e perda de arquivos comum devido à dependência da RAM nos sistemas tradicionais.
  4. Arvo é um SO determinístico e previsível, onde as mesmas condições resultam em mesmas saídas.

O Arvo foi escrito em Hoon, a linguagem padrão para o desenvolvimento em Urbit. Hoon, por sua vez, é compilado para a linguagem Nock.


Próximos passos

Para continuar o aprendizado sobre a Urbit, o próximo passo é entender um pouco a linguagem Hoon.