.NET 8 Autônomo 50% Menor no Linux

.NET 8 agora gera binários autônomos native AOT muito menores no Linux, reacendendo o interesse em C# para workloads serverless, contêineres e ferramentas CLI multiplataforma. Os comentaristas destacam trade-offs em torno de reflection e source generators para compatibilidade com AOT, comparam a concorrência, o desempenho e o uso de memória do .NET com Go e Java, e compartilham ampla experiência em produção rodando .NET no Linux em ambientes em nuvem e on-premises. O entusiasmo é temperado por problemas persistentes como bibliotecas oficiais fragmentadas ou “inacabadas”, fraco suporte nativo a GUI no Linux e preocupações com a gestão de longo prazo da Microsoft, apesar do forte progresso técnico.

AOT Nativo, Tamanho e Desempenho

  • A discussão gira em torno de binários autônomos com native AOT do .NET 8, com cerca de 2 MB para “hello world” e ~50% menores no Linux do que antes.
  • Ficou esclarecido que isso se aplica ao native AOT; aplicativos .NET típicos ainda usam JIT, embora o trimming tenha melhorado.
  • AOT é valorizado בעיקרamente por inicialização mais rápida e imagens pequenas em cenários de serverless/contêineres (por exemplo, AWS Lambda, Azure Functions).

Reflection, Source Generators e Restrições do AOT

  • O AOT é restringido por uso intenso de reflection e geração de código em tempo de execução; isso exige abordagens alternativas.
  • Alguns esperam que o uso de reflection diminua com o tempo por meio de source generators e interceptors; outros argumentam que reflection é conveniente demais e generators são trabalhosos demais, então ambos coexistirão.

Adesão e Experiências com .NET no Linux

  • Muitos relatam usar .NET no Linux rotineiramente: Kubernetes, Docker, AWS Lambda, Azure App Service (Linux), VMs na nuvem, servidores autogerenciados e apps de homelab (por exemplo, Jellyfin, apps *arr, cliente Ethereum).
  • Várias equipes usam Linux em produção enquanto os desenvolvedores rodam Windows/macOS; outras desenvolvem inteiramente em macOS/Linux com Rider, VS Code ou Neovim.
  • Para muitas web APIs e apps de funções, Linux agora é o alvo padrão de implantação; a economia de licença em relação ao Windows é um motivo importante.
  • A migração do .NET Framework continua sendo um ponto problemático para alguns, levando algumas organizações a mudar para Java em vez disso.

Ferramentas e Ecossistema

  • Grande elogio à produtividade, desempenho e ferramentas de C#/.NET (especialmente o Rider; o VS é visto como mais pesado e às vezes frágil, embora alguns digam que melhorou).
  • As opiniões se dividem sobre bibliotecas “oficiais” da Microsoft: Entity Framework Core é frequentemente elogiado, OData é amplamente criticado; muitos recomendam ferramentas OSS mais leves (Dapper, Postgres, Redis) em vez das stacks da Microsoft.
  • Alguns reclamam que a Microsoft tende a “competir com” em vez de adotar OSS da comunidade, prejudicando o ecossistema.

Comparações de Linguagens (Go, Java, F#, etc.)

  • Debate sobre Go vs C#:
    • Pró-Go: mais simples, concorrência de primeira classe sem “coloração” de async, bom para infraestrutura em nuvem.
    • Pró-C#: sistema de tipos mais rico, async/await poderoso, tasks, channels, frequentemente melhor throughput; alguns afirmam que o GC e a concorrência do Go não são superiores.
  • Há discordância sobre se os exemplos de concorrência em C# mostrados são realmente “concorrência” ou “paralelismo”.

GUI e Suporte no Linux

  • Grande frustração: não há suporte oficial a GUI no Linux no MAUI, apesar do forte impulso multiplataforma.
  • Alguns argumentam que Avalonia/Uno são bons o suficiente; outros veem a falta de GUI nativa de primeira parte para Linux como um sinal preocupante sobre o compromisso da Microsoft com Linux para apps de desktop.

Notas Técnicas Diversas

  • TimeProvider e FakeTimeProvider foram bem recebidos pela testabilidade; foi expressa a इच्छा de um FileSystemProvider.
  • Linkagem estática com Native AOT agora é possível, incluindo a ligação de bibliotecas .NET em projetos nativos.
  • Azure Functions em Kubernetes com KEDA foi citado como alternativa serverless “faça você mesmo”.