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 e recomendo a leitura.
Arquitetura

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) 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).*

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) 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)
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 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 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.


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. Caso queira ter toda experiencia de build e por as mãos na massa, é só seguir o guia no site fuchsia.dev.
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.

Todas opções de download, instruções e onde encontrar suporte está no GitHub do 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.


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




