# Breve Apresentação ao Fuchsia — FuchsiaOS

Opa pessoal.  
Para quem ainda não sabe, o Google está em produção de um novo Sistema Operacional, o FuchsiaOS.

Anunciado em 2016, o FuchsiaOS não se trata de um sucessor do Android, pelo menos não é o seu intuito. Na própria documentação oficial, a equipe do fuchsiaOS descreve que este não terá seu foco em uma “Experiência de Usuário”, mas sim em múltiplas experiências.

Isso implica que mais que o android já pode ser, o fuchsiaOS será mais responsivo e multiplataforma, “mirando” em diversas plataformas como: Smartphones, TVs, HomeCasts, Speeches, Desktops, Watches entre outros.

Desde o último artigo que escrevi sobre o sistema, há dois anos, muitas coisas mudaram, mas vamos ver tudo isso nesse artigo e mais algumas outras novidades.

### **Sistema Modular**

O FuchsiaOS, agora somente Fuchsia, foi projetado para ser um sistema inteiramente modular, permitindo que suas bibliotecas e aplicações possam ser inteiramente removidas, atualizadas e adicionadas sem que o sistema sofra com isso.

Isso além de garantir integridade do sistema, permite ainda que este seja mais seguro, por exemplo, atualização de *patches* de segurança podem ser facilmente obtidos com um simples pacote em uma “FuchsiaStore” sem comprometer dados do usuário ou outras aplicações.

### **Tecnologias**

Das tecnologias usadas no desenvolvimento do Fuchsia estão, obviamente o C e C++, Rust, GO, e Dart. Ao desenvolver para o SO o desenvolvedor poderá escolher a linguagem usada no backend, já que por ser um sistema inteiramente modular o Fuchsia não terá nenhum problema com relação a isso.

Suas aplicações frontend nativas são desenvolvidas em Dart/Flutter, o que facilitará em muito a migração da plataforma Android para Fuchsia, e ainda sim em adoção de mercado, já que Flutter é uma das tecnologias mas bem sucedida dos últimos anos!

Um ponto interessante a se notar é que, hoje é totalmente viável desenvolver apps usando Dart/Flutter e linguagens low-level — *linguagens que se comunicam diretamente com o sistema operacional, como C/C++ e Rust* — através do uso da biblioteca Dart:ffi, e que inclusive já escrevi um artigo sobre [a integração de Rust com Flutter](http://github.com/allansrc/frustter) e recomendo a leitura.

### **Arquitetura**

![](https://miro.medium.com/v2/resize:fit:700/1*ZDXiQTRB00740DrDrH1VGg.png align="left")

Arquitetura do Fuchsia

O Fuchsia foi projetado para ser um sistema seguro, altamente atualizável, modular e performático. Isso já discutimos no ultimo artigo, mas dessa vez temos novidades, o sistema agora conta com mais princípios arquiteturais para guiar seu desenvolvimento e design.

O sistema não se trata mais de um "Experimento", como era tratado anteriormente, e sim de um sistema à nível de produção. À exemplo dos novos **Google Nest Hub** que já vem com uma versão do Fuchsia rodando nativamente.

### **Seguro**

Isso significa que todo software executado no Fuchsia incluindo aplicativos e componentes do próprio sistema, seguem o princípio de menor privilégio ([*principle of least privilege*](https://www.cisa.gov/uscert/bsi/articles/knowledge/principles/least-privilege#:~:text=The%20Principle%20of%20Least%20Privilege%20states%20that%20a%20subject%20should,control%20the%20assignment%20of%20rights.)) ou privilégio mínimo, que de forma resumida, exige que em uma determinada camada de abstração de ambiente do sistema operacional, cada módulo — como um processo, um usuário, ou um aplicativo — seja capaz de acessar apenas as informações e recursos necessários para sua execução.

### **Atualizável**

O altamente atualizável, implica que os pacotes Fuchsia são projetados para serem atualizados de forma independente ou até mesmo *Instant Delivery*, ou *EnPhemery*, o que significa que os pacotes são projetados para serem desacoplados, e assim ir e vir do dispositivo conforme necessário, e o sistema se mantém sempre atualizado.

### **Modular/Inclusivo**

Modular quer dizer que o sistema é independente de linguagem. Uma vez que projetado para ser extensível e permitir a integração de software escrito em várias linguagens e *runtimes,* você pode tanto desenvolver usando C, C++, Rust, Go, Python, quanto Dart/Flutter.

### **Fundamentos do Kernel**

O core do sistema é o Zircon, que é o kernel mais um conjunto de bibliotecas responsáveis por gerenciar o *startup* e *bootstrapping* do sistema. Todos os componentes do sistema fora do kernel são implementados, no que chamamos de *userspaces* e totalmente isolados das camadas críticas do sistema, reforçando o princípio de *least privilege,* como já falamos aqui. Assim até mesmo *Drivers* de dispositivos são isolados nas 'áreas do usuário'.

O Zircon trás a arquitetura e muitos dos conceitos que conhecemos através dos Microkernels, o que **não** faz com que o kernel seja sem funcionalidades completas e compatibilidade de hardware baixa. Muito pelo contrário, essa arquitetura de micro kernel possibilita ao Fuchsia minimize ao máximo a quantidade de código confiável, limitando à ***Memory management***, ***Scheduling****, e* ***IPC*** *(Inter-process communication).*

![](https://miro.medium.com/v2/resize:fit:700/1*WINlcCS2P2_W8X7efnlFVw.png align="center")

Comparação entre um kernel convencional e o Zircon Kernel

Então temos um possível problema: se todo o *core* do sistema é isolado das *áreas de usuário (****userspaces****),* como podemos desenvolver apps que precisam de informações ou até "conversar" com o sistema?

Para que nosso código possa realizar interações como: Gerenciamento manual de memória, *tasks* ou processos do sistema, IPC, device I/O etc; podemos usar chamadas do sistema (*System calls*). Esses processos que executam as chamadas do sistema, são executados pela biblioteca vDSO (*virtual Dynamic Shared Object —* [libzircon.so](http://github.com/allansrc/frustter)) que fazem a leitura de uma imagem gerada do kernel, invés de fazer a leitura direta dos arquivos no kernel. Durante a leitura dessa imagem, o código de *userspace* recebe apenas os privilégios necessários, — o como é gerenciado esses privilégios podemos discutir em um outro artigo.

Mas por que eu preciso saber disso?

A resposta mais curta é: você não precisa.

Mas vale lembrar que, se você é desenvolvedor, uma grande maioria de apps que você possa precisar desenvolver para o Fuchsia, provavelmente você irá usar *Events, Streams, Channel, Socket etc.* E tudo isso faz parte da *Inter-Process Communication (IPC),* então se esse é seu caso, aqui está onde você deve começar os estudos para desenvolver para Fuchsia 😉.

> *(Guia Fuchsia para devs* [***em breve***](http://github.com/allansrc/guide_to_fuchsia)*)*

### **O porquê do Fuchsia ser tão interessante**

Vale lembrar que o Fuchsia não se trata de um sistema baseado em Linux. Absolutamente ao contrário do Android que roda em cima da Kernel linux, o Fuchsia é totalmente independente, todo o sistema e kernel é desenvolvido pela Google, e totalmente opensource, você mesmo pode submeter Pull Requests para o sistema ou até trabalhar paralelo a ele, criando um novo sistema à seu bem prazer ou necessidade. Um bom exemplo disso é o [**dahliaOS**](http://github.com/dahliaos) que é uma distribuição Zircon/Linux desenvolvida baseada no Fuchsia para desktop, a qual inclusive faço parte do time! Recomendo ver o vídeo do [**Dio Linux**](https://www.youtube.com/watch?v=87GgOynERW0) que fala um pouco do sistema, vale a pena conferir!

E o que mais acho interessante no sistema é que o seu ecossistema é livre. O que quero dizer é, que ao mesmo tempo em que o sistema completo é desenvolvido pela Google, sua principal linguagem de desenvolvimento frontend, Dart, também é! Assim possibilita um maior suporte aos desenvolvedores e liberdade de crescimento de ambos (Sistema e linguagem). Mas também, dá a liberdade de desenvolver com qualquer linguagem que se ache adequado por parte do desenvolvedor.

> *Fuchsia to fix, it's not to kill*

O Fuchsia não é o sistema "matador de Android". Muitas limitações que o Android teve, com o Java ou JVM, o kernel linux etc, não vamos ter com o Fuchsia. Outro ponto é que o nicho do Android é de dispositivos móveis, o qual inicialmente não é o foco do Fuchsia, e na verdade não há, até então, um foco, mais sim "focos": múltiplas telas, dispositivos embarcados, IOT, *SmartHome* etc.

### **Testando o Fuchsia**

No momento em que escrevo esse artigo já temos meios mais simples de rodar o sistema em nossa máquina sem ter tanto trabalho, como por exemplo o [Fimage](https://github.com/dahliaOS/fimage).

![](https://miro.medium.com/v2/resize:fit:700/1*v4NYKgVBHxf4DbiD7C4zbg.jpeg align="center")

![](https://miro.medium.com/v2/resize:fit:700/1*W6vbTn5xvaNlff7t_6d9OQ.jpeg align="center")

O Fimage é um emulador leve baseado no KVM, AEMU (*Android Emulator*), emulador Android que acompanha o Android Studio, e o FEMU (*Fuchsia Emulator*). Desenvolvido pelo time do dahliaOS para possibilitar que qualquer um possa rodar e testar o Fuchsia em sua máquina, sem a necessidade de baixar mais de 200 Gigas de Código fonte e gastar horas buildando o sistema. Então se você gostaria de testar o sistema puro e sem ter tanto trabalho para isso, essa é a melhor opção até o momento. Instruções, documentação e download [**aqui**](https://github.com/dahliaOS/fimage). Caso queira ter toda experiencia de *build* e por as mãos na massa, é só seguir o guia no site [fuchsia.dev](http://github.com/allansrc/frustter).

Por outro lado, se você quer ter a experiencia de um sistema operacional completo com UI mais refinada com *shell* e *Desktop Environment* completamente construída em Flutter e com uma pitada de Fuchsia, você pode optar por testar o dahliaOS. O sistema tem tanto uma versão com o kernel linux, que possibilita ser instalado em praticamente qualquer hardware, tanto uma versão com o Zircon com compatibilidade bem restrita.

![](https://miro.medium.com/v2/resize:fit:700/1*LksO1TfrQVXaDpCaF08UMQ.png align="center")

Todas opções de download, instruções e onde encontrar suporte está no G[itHub do dahliaOS](http://github.com/dahliaos). Lembrando que o sistema está em desenvolvimento e o time trabalha em seu tempo livre no desenvolvimento do sistema, logo não é recomendado o uso do sistema como *daily driver*.

![](https://miro.medium.com/v2/resize:fit:700/1*YCSzv5j_eWyFDsn7C68Yfw.png align="center")

![](https://miro.medium.com/v2/resize:fit:700/1*zFXADzm_ylVzBV4cNPDGvg.png align="center")

### **Considerações**

Se você é desenvolvedor e está interessado a começar a testar desenvolvimento no Fuchsia, ainda há alguns problemas. O SDK padrão do Flutter não suporta debug para o host do Fuchsia ainda, daí é necessário usar um SDK disponibilizado no Repositório Fuchsia. Como o Fimage até dá para debugar, mas necessita de alguns ajustes, mas não há suporte por parte do Fimage. Lembrando que já estou produzindo um guia para devs Fuchsia, como um *tears down* do sistema, então é só ficar de olho por aqui 😉.

O Fuchsia já minha aposta desde que o conheci em meados de 2018. Acredito ser um sistema revolucionário, não por trazer coisas novas, pois há varios sistemas Opensource que trazem características e conceitos semelhantes e há algum tempo, mas por trazer esses conceitos e por estar nas mãos da Google. Para quem não lembra o Dart começou como um experimento, ganhou uma proposta web e enfim o Flutter, e conforme o Flutter crescia, a linguagem crescia para acompanhar o desenvolvimento do Framework.

Mas não estou dizendo que o Flutter irá arrastar o desenvolvimento do Fuchsia, mas que por ter toda *stack* do sistema em mãos, as possibilidades são delimitadas pela própria Google. Pensa comigo, o sistema mira em *multiplas* experiencias de usuário (diversas plataformas), e o Flutter é desenhado para Multiplataforma, logo temos as duas camadas com suporte da mesma casa. (isso sem contar com os *hardwares* Google: Nest Hubs, Google TVs, Google Home etc). Claro que tudo tem seu lado bom e ruim, e sim, ter tudo de baixo de suas mãos pode trazer diversos problemas, que podemos discutir mais sobre o assunto.

Bom, espero que tenha sido uma boa leitura, e estou à disposição para discutir sobre o assunto, opniões, sugestões, enfim. Se te interessou, sinta-se à vontade de nos seguir no Github e nas redes sociais, tanto eu quanto o time Fuchsia e dahliaOS, temos Discord e canais para trocar uma ideia. Valeu 😁!

> *Obs.: links para os repositórios, documentações, referências etc estão em destaque dispostos pelo artigo.*
> 
> *GitHub; Instagram, Twitter, XDA:* [***@allansrc***](http://github.com/allansrc)
