.NET MAUI amplia suporte a Linux e navegador com base no Avalonia
(avaloniaui.net)- Com um backend baseado em Avalonia, aplicativos .NET MAUI agora podem ser executados em desktops Linux e no navegador (WebAssembly)
- Mantendo a base de código existente do MAUI, a camada de renderização é substituída pelo Avalonia, alcançando ao mesmo tempo melhor desempenho e expansão de plataforma
- Funciona com o mesmo mecanismo de renderização em Linux desktop como Ubuntu, Debian e Fedora, além de Linux embarcado e WebAssembly
- Também foram observados ganhos de desempenho superiores a 2x no Windows e no macOS, com uma UI consistente sem diferenças entre plataformas
- Um projeto que oferece aos desenvolvedores MAUI suporte a Linux e web, além de um ciclo de desenvolvimento previsível, servindo como base para a expansão do ecossistema Avalonia
Visão geral do backend MAUI do Avalonia
- O backend MAUI do Avalonia é uma arquitetura que mantém a base de código do MAUI enquanto substitui a camada de renderização pelo Avalonia
- Permite expandir apps MAUI existentes para plataformas adicionais, como Linux e navegador
- Garante melhor desempenho em desktop e consistência entre plataformas
- A demonstração real é um app MAUI baseado em WebAssembly, que pode ser executado no navegador sem plugins
- Embora ainda seja uma build inicial, ela comprova que o MAUI pode funcionar nos principais sistemas operacionais de desktop e no navegador
Principais plataformas suportadas
- Suporte a Linux desktop
- Roda como um aplicativo desktop de primeira classe em Ubuntu, Debian, Fedora e outros
- Usa o renderizador do Avalonia para entregar qualidade no nível de apps desktop de alto desempenho
- Suporte a Linux embarcado
- Roda com o mesmo backend do Avalonia em dispositivos embarcados, como painéis Raspberry Pi e HMIs industriais
- Suporte a WebAssembly
- Implementa apps MAUI que rodam no navegador sem dependências nativas
- Deve evoluir para um nível que permita distribuição via navegador no futuro
- Suporte a Windows e macOS
- Integra-se à estrutura madura de renderização desktop do Avalonia
- No macOS, foi observado desempenho mais de 2x superior em comparação com o Mac Catalyst
Eficiência de desenvolvimento e consistência
- A equipe do Avalonia desenvolve visando apenas uma única plataforma (Avalonia)
- Sem necessidade de implementações separadas para iOS, Android, Windows, macOS, Linux e WebAssembly
- Reduz bugs específicos de plataforma e diferenças de renderização
- Como usa o mesmo mecanismo de renderização, há a mesma representação de UI em todas as plataformas
- Ao adicionar recursos ou corrigir bugs, as mudanças são refletidas imediatamente em todas as plataformas
- Isso reduz o ciclo de desenvolvimento e garante qualidade previsível
Por que o Avalonia está construindo um backend para MAUI
- A prioridade é apoiar desenvolvedores .NET client, permitindo que usuários do MAUI obtenham suporte a Linux e navegador, além de melhorias de desempenho
- Com esse projeto, o Avalonia aprende sobre compatibilidade com mobile, problemas de API e pontos de melhoria em tooling
- Espera-se um efeito de entrada no ecossistema à medida que desenvolvedores MAUI experimentem o renderizador e os recursos do Avalonia
- O objetivo não é substituir o MAUI, mas oferecer opções mais amplas para desenvolvedores MAUI existentes
O que isso significa para desenvolvedores MAUI
- Entrega o tão solicitado suporte a Linux e um modelo de UI baseado em drawing, consistente que desenvolvedores MAUI vêm pedindo continuamente
- O Avalonia oferece recursos como:
- Renderização acelerada por hardware
- Sistema consistente de layout e estilos
- Animações em alta taxa de atualização
- Renderização customizada e efeitos visuais
- Ampla cobertura de plataformas
- Uma plataforma com investimento e suporte contínuos
- Já é usado em ambientes comerciais por empresas como Unity, JetBrains e Schneider Electric
- Mantendo o código MAUI existente, é possível obter ao mesmo tempo Linux, web e melhor desempenho em desktop
Desempenho e renderização de próxima geração
- Com uma stack de UI baseada em drawing e amigável à GPU, alcança desempenho superior ao de toolkits nativos
- Em colaboração com a equipe do Google Flutter, está trazendo o renderizador GPU Impeller para .NET
- Quando essa tecnologia for aplicada, o backend MAUI também herdará maior velocidade de renderização, economia de bateria e animações mais suaves
Próximos passos
- Continuar melhorando a qualidade do backend em colaboração com engenheiros do MAUI
- Quando o suporte a Linux e navegador atingir maturidade, o MAUI poderá se completar como um verdadeiro framework de UI multiplataforma
- Após estabilização, está prevista a publicação open source sob licença MIT
- O progresso do desenvolvimento, benchmarks e previews continuarão sendo compartilhados
1 comentários
Comentários do Hacker News
É realmente interessante levar esse tipo de funcionalidade para a web
Mas, ao usar a demo, não passa nem um pouco a sensação de “ser web”
Não dá para pesquisar com Ctrl+F, selecionar texto nem copiar o endereço de links
No celular, também não dá para pressionar uma imagem e compartilhar, e leitor de tela não funciona
Esses detalhes se acumulam e passam a impressão de que “isso não é web de verdade”
Parece um conteúdo rico isolado do navegador, como os applets Java do fim dos anos 90 ou Flash e Silverlight do começo dos anos 2000
Sem essas funcionalidades, por definição, não dá para chamar de “web de verdade”
No fim, isso leva à pergunta filosófica: “o que é a web?”
Faz pensar se ela é apenas um meio de distribuição de mídia ou algo maior
Hoje em dia, muita gente está cansada da appificação da web e sente falta da web aberta de antigamente
Tentei usar a demo com leitor de tela e não funcionou de jeito nenhum
Também não é essa a direção pretendida pela Microsoft
Só acontece que, como o Avalonia suporta WASM, o MAUI consegue rodar por cima disso
Mas isso equivale a simplesmente renderizar um toolkit de GUI desktop em WASM
É legal, mas parece mais uma versão moderna do Silverlight do que um web app
Ainda assim, poder mirar no desktop Linux é uma grande vantagem
Muita gente provavelmente vai preferir um rendering com aparência consistente como o do Avalonia, em vez de o MAUI usar controles nativos de cada plataforma
Só com CSS/JS/HTML dos navegadores modernos já dá para fazer a maior parte das coisas
Eu gosto de XAML, mas JSX é uma ideia parecida e compila para HTML de verdade
Eu já pensava isso na época do Silverlight — não entendo por que continuam tentando recriar o Flash
O build web do Unity já é um “Flash em C#” melhor
Se nem essas funções básicas existem, para mim é inviável
MAUI sem suporte a desktop Linux nunca foi uma opção para começar
Com essa adição, ficou um pouco melhor, mas ainda acho mais vantajoso usar Avalonia direto
Mesmo assim, é bom ter essa opção para projetos existentes
Finalmente vai dar para fazer no Linux apps com “UX estilo celular” lentos e com animações esquisitas, sem precisar de Kotlin Multiplatform nem Electron
Mas é decepcionante que o conjunto de widgets tenha basicamente só botão e checkbox
Fico me perguntando por que as demos de toolkits de UI hoje em dia parecem piores do que demos da época do Delphi 1
Ele já suporta Windows/Mac/Linux/WASM
Esse trabalho parece ser para quem quer expandir apps MAUI existentes para Linux/WASM
Dá para ver o andamento no blog do Avalonia
Um dos motivos de as pessoas evitarem o MAUI no ecossistema .NET é que a própria Microsoft não usa
Até o Teams é baseado em Electron
Isso levanta a pergunta: “se a própria MS não usa, por que nós deveríamos usar?”
A divisão do Windows cuida de WinUI/Win32, o Office usa React, e a divisão de desenvolvedores cuida de WPF e MAUI
Como cada área anda por conta própria, o resultado é uma fragmentação dos toolkits de UI
No fim, todos os toolkits acabam recebendo só um suporte pela metade
O Teams também seguiu esse caminho ao migrar de Angular para React
Ainda assim, é verdade que eles não usam MAUI
A impressão é que preferem tecnologias já comprovadas, como Avalonia ou WinForms
Não está claro o que a MS vai apoiar no longo prazo
Existe também o Blazor, mas ele parece mais voltado para criar apps internos do que para substituir React
Aliás, também é questionável se o Google usa Flutter com força nos próprios apps
O Teams saiu em 2017, e o MAUI foi lançado em 2022
A migração para React também aconteceu antes do MAUI
Mesmo assim, é preocupante que a MS não faça dogfooding suficiente do MAUI
Houve notícias recentes de redução de equipe ligada ao MAUI, e a confiança interna parece fraca
Também é preciso considerar que o Flutter teve uma vantagem de 5 anos de antecedência
Ainda assim, fica difícil afastar a impressão de que a MS não está realmente comprometida com o MAUI
Sempre termina em descontinuação
Usar tecnologias web padrão faz melhor para a saúde mental
(não estou defendendo o MAUI)
Caso alguém esteja confuso, aqui vai um resumo
O .NET MAUI é originalmente um framework para criar apps para Android, iOS, macOS e Windows com uma única base de código
Agora foram adicionados Linux e navegador
Fiz um app Hello World no Mac e a configuração foi bem complicada
Ainda assim, foi bom voltar a usar XAML depois de tanto tempo
Eu estava procurando uma GUI multiplataforma para criar software de desenvolvimento
Primeiro tentei usar MAUI, mas a instalação já foi um pesadelo
Nem os recursos básicos de UI eram suportados
Depois experimentei AvaloniaUI, e foi exatamente o oposto
A instalação foi simples e, com uma pesquisada rápida, consegui implementar facilmente coisas como janela transparente sem borda
A integração com o Visual Studio deixa um pouco a desejar, mas ainda está muito à frente do MAUI
Parece a volta do Silverlight
Referência: Microsoft Silverlight wiki
No Chrome, a demo quase não funciona
O quebra-cabeça deslizante responde devagar, e a seta de voltar trava
Se atualizar a página, volta para a tela inicial
O seletor de hora e o seletor de data também ficam desalinhados e difíceis de usar
No geral, está bem ruim
Thread relacionada
Executei a demo “Word puzzle” na seção “Launch MAUI in your browser”
Ao clicar em ‘Randomize’, as peças começam a embaralhar, mas, se você voltar pela seta superior, a tela trava completamente
O quebra-cabeça fica no fundo, o menu fica sobreposto por cima, e não dá para clicar em nada
Isso acontece igual em vários navegadores
Link da demo
O clique-e-arraste é instável e não há feedback visual
As peças não se movem; elas simplesmente teleportam
Teria sido melhor usar um clique único ou um movimento com animação
Outro usuário levantou o mesmo problema
Na calculadora RPN, nem sequer dá para colocar números na pilha
Há uma necessidade enorme de um toolkit de UI capaz de criar um programa CAD de verdade
Já cansei de apps que parecem uma webview
Odiei demais as tendências de UI web dos últimos 10 anos
Tudo ficou grande por causa do foco em toque, com muito espaço em branco e animações inúteis
Quero voltar às UIs antigas, focadas em densidade de informação e usabilidade
Isso é algo que gosto em sites japoneses
Se você olhar a demo reel do Avalonia, dá para ver que a stack de GUI .NET também consegue criar coisas como editores de vídeo e ferramentas de análise de mapas
Avalonia Showcase
Se só serve para app de clima ou lista de tarefas, então não tem utilidade
WPF e WinForms também continuam existindo