É viável programar em C# no Linux em 2022?
Programar em C# no Linux em 2022 é viável para web, console, Worker Services e testes, mas ainda esbarra em limites no desktop. C# e Linux já foram um casamento complicado, e entender essa história ajuda a responder a pergunta com honestidade.
Há um bom tempo, desenvolver para .NET sem dor de cabeça só era possível no Windows. Quem usava o pinguim contava apenas com a "falecida" IDE MonoDevelop, com várias ressalvas.
Um pouco de história do C# no Linux
Em 2016, a Microsoft anunciou o .NET Core, uma reimplementação do famoso .NET Framework. Desta vez, ele rodava também no macOS e no Linux, além do Windows.
Claro, nem tudo são flores. Reimplementar um framework gigantesco, tão completo quanto o "pai", não acontece do dia para a noite, mesmo de forma gratuita e open source.
Em 2020, o .NET 5 chegou como versão estável, tanto no SDK quanto no runtime. Com isso, a Microsoft unificou uma baita confusão de versões.
Ficaram para trás o .NET Framework, exclusivo do Windows, o .NET Core, nome das versões iniciais open source, e a necessidade do padrão .NET Standard. Em seguida, o .NET 6 chegou em novembro de 2021 como versão LTS.
Retomando o rumo da conversa: é viável programar em C# no Linux em 2022? A resposta é dupla, sim e não.
Instalando o .NET no Linux
Antes de falar de ferramentas, vale lembrar que instalar o SDK no Linux ficou simples. A documentação oficial oferece pacotes para as distribuições mais usadas, como Ubuntu, Debian e Fedora.
Além dos gerenciadores de pacotes, existem o Snap e um script de instalação para qualquer distribuição. Por exemplo, o script dotnet-install.sh instala o SDK sem privilégios de administrador.
# Baixa e executa o script oficial de instalação do SDK
wget https://dot.net/v1/dotnet-install.sh -O dotnet-install.sh
chmod +x ./dotnet-install.sh
./dotnet-install.sh --channel 6.0
Depois disso, o comando dotnet passa a funcionar no terminal. Assim, você cria, compila, testa e executa projetos sem depender de nenhuma IDE.
# Cria e executa uma aplicação web vazia
dotnet new web -o SnackStore
cd SnackStore
dotnet run
Vale entender a diferença entre SDK e runtime. O SDK serve para desenvolver e já inclui o runtime, enquanto o runtime sozinho basta para apenas executar aplicações.
Para servidores web, a recomendação é instalar o runtime do ASP.NET Core. Ele inclui tanto o runtime do .NET quanto o do ASP.NET Core.
Também dá para manter várias versões do SDK lado a lado na mesma máquina. Os comandos dotnet --list-sdks e dotnet --list-runtimes mostram o que está instalado.
Isso é útil quando você mantém projetos antigos em .NET Core 3.1 e projetos novos em .NET 6. Assim, cada projeto usa a versão que precisa, sem conflito.
Em distribuições menos comuns, a instalação manual extrai os binários em uma pasta e ajusta as variáveis DOTNET_ROOT e PATH. Dessa forma, praticamente qualquer distro moderna consegue rodar C# no Linux.
O guia completo de instalação do .NET no Linux detalha os passos para cada distribuição.
Por que sim: C# no Linux funciona bem
A ferramenta amadureceu muito ao longo dos anos. Além disso, a JetBrains deu um apoio gigante com a IDE Rider.
Hoje, desenvolver em C# no Linux para web, console, Worker Services e testes de unidade é confortável. O Rider é uma ferramenta completa para isso, apesar de salgada no preço.
Ele também funciona no Mac, como alternativa ao Visual Studio for Mac, e no Windows, para quem não quer o Visual Studio. Ou seja, a mesma IDE acompanha você em qualquer sistema.
Para quem ainda duvida, vale olhar um projeto real de ASP.NET Core feito 100% no Linux. O Snack Store MVC é um exemplo maduro de aplicação desenvolvida inteiramente no pinguim.
O que o Rider entrega no dia a dia
No dia a dia, o Rider cobre as tarefas que um desenvolvedor .NET espera de uma IDE. Por exemplo, ele oferece depuração, refatorações, navegação no código e execução de testes.
Ele também integra o gerenciador de pacotes NuGet e o controle de versão com Git. Por isso, você raramente precisa sair da IDE para tarefas comuns.
Em projetos ASP.NET Core, o Rider reconhece Razor, rotas e configurações. Assim, a produtividade fica muito próxima da que se tem no Visual Studio.
O principal ponto contra é o custo da licença. Contudo, para quem trabalha profissionalmente com C# no Linux, o investimento costuma se pagar rápido.
Testes e Worker Services com C# no Linux
Testes de unidade funcionam no Linux exatamente como no Windows. Os templates do SDK já trazem projetos prontos para xUnit, NUnit e MSTest.
# Cria um projeto de testes com xUnit e executa a suíte
dotnet new xunit -o SnackStore.Tests
dotnet test
Assim, a mesma suíte roda na máquina do desenvolvedor e no servidor de integração contínua. Isso vale também para pipelines que usam agentes Linux, que costumam ser mais baratos.
Os Worker Services seguem a mesma lógica. Com C# no Linux, você cria processos em segundo plano que rodam como serviços do sistema.
# Cria um Worker Service para processamentos em segundo plano
dotnet new worker -o SnackStore.Worker
Por isso, filas, rotinas agendadas e integrações entre sistemas encontram no Linux um ambiente natural de execução.
Containers e bancos de dados com C# no Linux
Outro ponto a favor é o uso de containers. A Microsoft publica imagens oficiais do .NET, e elas usam Linux como base na maioria dos cenários.
Dessa forma, desenvolver C# no Linux aproxima o ambiente local do ambiente de produção. O que roda na sua máquina tende a rodar igual no container.
# Imagem de runtime do ASP.NET Core 6 para publicar a aplicação
FROM mcr.microsoft.com/dotnet/aspnet:6.0
WORKDIR /app
COPY ./publish .
ENTRYPOINT ["dotnet", "SnackStore.dll"]
O banco de dados também deixou de ser obstáculo. Desde a versão 2017, o SQL Server roda no Linux, inclusive em container Docker.
Na prática, o projeto Snack Store citado acima usa SQL Server sem sair do pinguim. Além disso, PostgreSQL e MySQL sempre foram cidadãos de primeira classe no Linux.
Por que não: as limitações do VS Code
Alguns podem estranhar que eu ainda não comentei sobre o Visual Studio Code. Vale lembrar que ele é um editor de textos, muitas vezes confundido com uma IDE.
O VS Code fica bem redondinho para C# com algumas extensões, especialmente as da imagem abaixo. Ainda assim, ele peca em alguns aspectos.
Em 2022, a extensão oficial de C# para o VS Code usa o OmniSharp por baixo dos panos. Ela entrega IntelliSense, navegação, refatorações básicas e depuração de aplicações .NET.
Para C# no Linux, essa combinação já cobre boa parte do trabalho com APIs e console. Contudo, ela fica atrás de uma IDE completa em tarefas mais visuais.
Se quiser preparar o editor do zero, o guia de instalação e customização do Visual Studio Code ajuda bastante.
Scaffolding sem assistente visual
O ponto mais chato é a falta de facilidade para gerar itens de scaffolding do ASP.NET Core. No Visual Studio, um assistente visual cria controllers, views e páginas a partir do modelo.
No VS Code, você precisa recorrer à linha de comando. A ferramenta global dotnet-aspnet-codegenerator executa o mesmo motor de scaffolding.
# Instala a ferramenta de scaffolding do ASP.NET Core
dotnet tool install -g dotnet-aspnet-codegenerator
# Gera um controller com views para o modelo Product
dotnet aspnet-codegenerator controller -name ProductsController -m Product -dc AppDbContext -outDir Controllers
Funciona, mas exige decorar parâmetros. Por isso, quem vem do Visual Studio sente falta da experiência guiada.
Distribuições com o Code OSS
Outro problema é a necessidade de usar a versão "curada" do VS Code distribuída pela Microsoft. Isso complica a vida de quem usa distros como o Solus.
Nessas distribuições, o repositório oferece o VSCode OSS, compilado a partir do código aberto do projeto. Contudo, o depurador .NET da Microsoft só tem licença para os produtos oficiais, então a depuração não funciona nessas builds.
Na prática, você precisa instalar o binário oficial manualmente. Embora não seja impossível, isso adiciona atrito ao processo.
Desktop com C# no Linux ainda é limitado
A maior limitação aparece em aplicações locais. Por enquanto, não existe uma alternativa oficial ao WinForms para quem quer desenvolver para desktop no Linux.
Isso pesa para quem não curte se aventurar na web com um tico de JavaScript, CSS, HTML e Bootstrap. Afinal, para essas pessoas, o desktop seria o caminho natural.
O motivo é técnico. Segundo a documentação do Rider sobre Windows Forms, o WinForms depende de componentes do Windows para funcionar, assim como o Visual Basic for Applications.
Por isso, mesmo com uma IDE excelente, o designer e a execução de WinForms exigem o sistema da Microsoft. Nesse caso, a saída é usar uma máquina virtual ou dual boot.
Também vale conhecer o recurso de código específico por plataforma, explicado no artigo sobre platform specific no .NET. Ele ajuda a isolar trechos que só rodam em determinado sistema.
MAUI e o futuro do desktop multiplataforma
Fazendo uma breve tangência: há esperança de surgir uma alternativa ao WinForms para Mac e talvez Linux? Sim, jovem Padawan, e esse sonho está cada vez mais perto graças ao MAUI.
MAUI é o acrônimo de Multi-platform App UI. Além de reusar o mesmo código no desktop, ele permite portar o programa para mobile, com iOS e Android, aposentando o legado Xamarin Forms.
A notícia triste é que o lançamento final do MAUI foi adiado para o segundo trimestre de 2022. A Microsoft anunciou o adiamento junto com o Preview 8, em setembro de 2021.
Além disso, o Linux não aparece entre os alvos oficiais do MAUI. Portanto, o MAUI resolve bem o cenário Windows e Mac, mas não entrega um desktop nativo no pinguim.
Avalonia e Uno Platform como alternativas
Enquanto isso, já existem boas alternativas disponíveis. As principais são o AvaloniaUI e o Uno Platform.
Ambos miram o desenvolvimento multiplataforma, inclusive com suporte ao Linux. Em compensação, você escreve a interface em XAML, muitas vezes na unha.
O Avalonia se inspira bastante no WPF. Por isso, quem já conhece WPF costuma se adaptar rápido.
O Uno Platform, por sua vez, segue a linha do WinUI e da UWP. Dessa forma, ele atrai quem quer reaproveitar conhecimento do ecossistema Windows moderno.
Nenhum dos dois é oficial da Microsoft, mas ambos têm comunidades ativas. Assim, para quem precisa de desktop com C# no Linux hoje, eles são o caminho mais realista.
WSL como meio termo para C# no Linux
Vale mencionar também o caminho inverso. Quem usa Windows, mas quer um ambiente Linux para desenvolver, pode recorrer ao WSL.
O Windows Subsystem for Linux roda distribuições Linux dentro do Windows. Com isso, você testa sua aplicação .NET em Linux sem abandonar o Visual Studio.
Esse modelo ajuda bastante em APIs que vão rodar em containers Linux em produção. O artigo sobre o WSL explica a configuração em detalhes.
Quando escolher C# no Linux
Resumindo os pontos anteriores, o cenário fica bem claro. Se o seu foco é web com ASP.NET Core, APIs, console, Worker Services ou testes, programar em C# no Linux é uma experiência agradável.
Nesse caso, Rider ou VS Code com as extensões certas resolvem quase tudo. Além disso, o próprio servidor de produção costuma rodar Linux, então você desenvolve no mesmo ambiente.
Por outro lado, se você depende de WinForms ou do designer visual do Visual Studio, o Windows continua obrigatório. Então, a escolha depende do tipo de aplicação que você constrói.
Para desktop multiplataforma, Avalonia e Uno Platform cobrem a lacuna. Já o MAUI promete muito, mas ainda não chegou à versão final.
Conclusão
Caso você opte pelo desenvolvimento web com ASP.NET, programar em C# no Linux, até o presente momento, será uma experiência bastante agradável. O SDK é estável, a CLI é completa e as ferramentas amadureceram.
Contudo, se você precisa desenvolver aplicações locais com WinForms, sinto informar que só pelo Windows mesmo. Nesse caso, use máquina virtual ou dual boot.
Em resumo, C# no Linux em 2022 é viável para a maior parte dos projetos modernos. A exceção fica com o desktop tradicional, que ainda depende do sistema da Microsoft.
Portanto, se você ainda hesita em migrar, comece por um projeto web pequeno no Linux. Em poucos dias, você descobre se o fluxo atende à sua rotina.
FAQ
Dá para programar em C# no Linux em 2022?
Sim. Para web, APIs, console, Worker Services e testes, o .NET funciona muito bem no Linux.
Qual a melhor IDE para C# no Linux?
O Rider, da JetBrains, é a opção mais completa, embora seja paga. O VS Code com extensões é a alternativa gratuita.
O WinForms funciona no Linux?
Não. O WinForms depende de componentes do Windows, então exige máquina virtual ou dual boot.
O .NET MAUI roda no Linux?
Não oficialmente. O MAUI mira Android, iOS, macOS e Windows, e o lançamento final foi adiado para o segundo trimestre de 2022.
Quais alternativas existem para desktop no Linux?
O Avalonia UI e o Uno Platform, ambos multiplataforma e baseados em XAML.
Como fazer scaffolding do ASP.NET Core no VS Code?
Instale a ferramenta global dotnet-aspnet-codegenerator e gere controllers e views pela linha de comando.