Executando verificação de segurança...
10

[DUVIDA] Utilizar C# no Linux é uma boa ideia?

Bom dia! Gostaria de saber se enfrentarei muitas restrições ao utilizar o C# no Linux, seja no desenvolvimento de aplicativos para desktop, web, ou outras finalidades.

É possível programar em C# de maneira eficaz no sistema operacional Linux?
A tecnologia C# tem a intenção de ser compatível com diversas plataformas?
Caso haja limitações, quais são elas?
IDEs podem ser um problema?

Carregando publicação patrocinada...
7

Sim, claro.

Vou contar um segredo. Ele funciona até melhor no Linux. Tem completa eficácia.

Desktop para Linux você vai ter dificuldade com qualquer linguagem. Como é um mercado extremamente pequeno há pouco investimento nisso. Quase tudo de mais importante é feito em C ou C++. Tem várias opções para C#, mas nenuuma é muito boa. Em Java o problema é o mesmo, além dele ser ruim no Windows também. Mas nada que não dê para usar, só não é nota 10. O mais comum é usar o GTK no Linux no lugar do Windows Forms. Andaram fazendo um port do WF para Linux, mas não funciona direito. Eu sei que o MAUI suporta Linux via comunidade, mas não sei como está a evolução disto. Tem outras opções.

C# não tem a intenção de ser compatátil com diversas plataformas, ela é compatível. Poucas linguagens rodam em tantas plataformas.

Limitação não tem muita. Tem dificuldades. Por exemplo, você não vai se dar muito bem fazendo um sistema operacional com ela. Mas dá e já fizeram alguns.

O .NET é um ambiente que está ficando cada vez mais leve, podendo gerar executáveis nativos e limpos usando técnica de tree shaking, mas aianda é uma linguagem que tem um garbage collector e um runtime um pouco grande, além de uma bibliooteca nível enterprise, por isso é poderosa e completa, mas cobra um preço por isso. Quase todas as alinguagens mais conhecidas sofrem de problema semelhante. Tirando as linguagens de nível um pouco mais baixo é a linguagem mais eficiente do mercado atualmente, pelo menos em boa parte dos cenários, não em tudo, claro.

Você pode programar em qualquer IDE. O Visual Studio que é o melhor, só roda no Windows, e em geral eu recomendo usá-lo porque tem o melhor dos mundos. Todas as vantagens do Windows e do Linux ao mesmo tempo usando o WSL. Mas se não quiser isso e quer Linux sem Windows, tem o Rider da JetBrains, tem até edição gratuita para alguns casos de uso. Ou pode ir no que a maioria adota que é o Visual Studio Code com o DevKit para C#. É bom, mas não tão bom assim. Tem outras opções.

Faz sentido para você?

Espero ter ajudado.


Farei algo que muitos pedem para aprender a programar corretamente, gratuitamente. Para saber quando, me segue nas suas plataformas preferidas. Quase não as uso, não terá infindas notificações (links aqui).

1

Ele funciona até melhor no Linux

Legal! Nunca ouvi alguém afirmar isso (provavelmente porque não tenho conhecimento em C# haha).

Como é um mercado extremamente pequeno, há pouco investimento nisso.

Sim, é verdade. Estou no mercado de trabalho há 3 anos(pouco tempo), e na maioria das situações, o desenvolvimento web tem sido a melhor solução, mas já desenvolvi alguns projetos desktop que deram certo.

Você não terá problemas fazendo um sistema operacional com ela.

Isso não é um problema, afinal, eu não tenho conhecimento para criar um sistema operacional do zero. Meu interesse é mais por hobby e mercado, então não será um obstáculo para mim.

Usando a técnica de tree shaking.

Mais um tópico para adicionar à minha lista de estudos 🙂

Tirando as linguagens de nível um pouco mais baixo, o C# é a linguagem mais eficiente do mercado atualmente, pelo menos em boa parte dos cenários, embora não seja a melhor opção em todos, é claro.

É exatamente isso que me está motivando a aprender C#. Atualmente, estou em uma zona de conforto com as tecnologias que já conheço, e quero algo novo. Parece que o C# é uma excelente opção para ampliar meus conhecimentos.

A resposta foi muito completa, obrigado!

2

o desenvolvimento web tem sido a melhor solução

Não, não é, é o que as pessoas adotam. Uma pena. Raramente uma aplicação deveria ser web. Mas todo mundo ignora isso. Então parece que é a melhor a solução. Afinal, a maioria não pode estar errada, né?

1

Eu costumo acreditar que a maioria geralmente está errada. Talvez eu esteja mais inclinado a utilizar a web por falta de conhecimento, já que cresci em um mundo imerso na tecnologia web, o que certamente deve ter me influenciado(ou só falei isso para tercerizar a culpa 🙈), mas tem sido produtivo para mim, então estou mantendo o foco nessa área.

2

A Microsoft desenvolveu o .NET Core para ser multiplataforma, permitindo que você execute código C# no Linux sem problemas. O sistema operacional, seja Windows ou Linux, não deve influenciar diretamente no desempenho da execução do código.

1

Entendi, no entanto, por exemplo, no desenvolvimento de apps desktop, temos o Windows Forms para Windows. Existe algo equivalente para o Linux ou uma maneira de criar versões para diferentes plataformas dentro do mesmo projeto?

2
1

Muito interessante, já ouvi falar sobre o GTK, mas nunca o usei. Quando trabalhava com Delphi, usei o framework FireMonkey, que parece funcionar de maneira semelhante.

Quanto ao ambiente de desenvolvimento (IDE), como seria no Linux? O Visual Studio é exclusivo para o Windows, certo?

1

Infelizmente o Visutal Studio possui versões compativeis somente com Windows e MacOs mas isso não te impede de criar um ambiente de desenvolvimento C# com Visual Studio Code e o .NET SDK

1
2

a Microsoft abraçou o open source.
A Azure respira linux.
E a stack .net hoje é multi plataforma e evoluiu de mais depois que decidiram adicionar o suporte ao Linux.
é sem dúvidas umas das stack com a melhor DX.
.net core, .net5, 6, 7 e 8 casam de mais com a nuvem, e nuvem é sinônimo de linux!!

a Microsoft tem até seu próprio linux. Não só isso como criaram o wsl para qualquer um ter seu linux sem sair do Windows

1

Eu realmente espero que a Microsoft e outras empresas invistam mais em open source.
E uma melhor DX é uma das coisas que estou buscando com C#.

2

Bom. eu a utilizo a quase 4 anos apenas no linux. Para web não existe linguagem melhor que C#, pelo menos enquanto Go não largar mão de certos preciosismos (minha opinião aqui). E em geral os serviços web vão rodar em servers Linux.

Para desktop você tem soluções razoáveis como o Maui ou o Avalonia. Particularmente o segundo seria minha primeira escolha ao desenvolver desktop apps para qualquer plataforma, até windows.

Dito tudo isso. Diria que o critério de escolha geralmente recai sobre o que deseja fazer e como destribuir. C# requer um runtime que não é comum a ambientes linux. E mesmo compilada para código de máquina os binários são gigantes (mal de Enterprise). Então, Cli's: a memos que feitas como cmdlets PowerShell (que também funciona no linux e eu utilizando diariamente) esqueça. Desktop apps: é aceitável que sejam grandes. ou necessitem de um runtime especial em certos casos. E por fim, servers: apenas sim.

1

Fiquei curioso sobre os preciosismos de Go, consegue falar o que é importante para você? Eu acho que tenderei a concordar.

2

Bom. Go por muito tempo rejeitou ideias como generics, programação funcional, entre outras coisas. Eles vem abandonando esse tipo de posição com o tempo. Porem ainda há coisas que me frustram.

Vou dar alguns exemplos em um projeto recente. Tenho tentado criar um template Para web, utilizando o que acho util das famosas "boas práticas" (clean code, ddd, solid...) e algumas coisas dificultam ou impossibilitam algumas abordagens.

Por exemplo: o fato das interfaces se auto implementarem nas estruturas dificulta um pouco durante a segregação de interfacies em frameworks de injeção de dependência como o Fx. Alem disso a falta de parâmetros genéricos especificamente em metodos (não estão disponíveis apenas nos métodos na versão atual) impossibilitada a criação de um pattern de pipeline. Que deixaria o código infinitamente mais limpo.

Essas e outras coisas fazem de Go uma linguagem frustrante as vezes. A implementação é perfeita, compilador simples, rápido, compila binários estáticos. Alguns toques a mais como melhor suporte a genéricos, um operador de auto retorno de erros como o "?" de Rust. Faria de Go a linguagem perfeita para a web.

1
1
1

Depende do projeto que esta tentando executar. Ja tive problemas para rodar um projeto da empresa no Linux Mint, onde no Windows rodava sem problemas. De forma geral roda muito bem, mas as vezes são pequenos detalhes que vai ter que procurar em fóruns, issues do github e stackoverflow problemas que até então podem existir somente no Linux. Ainda que ele seja multiplataforma, ainda é a Microsoft por trás, que é dona do Windowszm, então espere mais "facilidade" usando o mesmo.

Sobre IDE, atualmente utilizo o Rider da JetBrains, mesmo usando Windows como SO. A IDE é fantástica e superior ao Visual Studio em vários pontos na minha opinião, espere encontrar praticamente a mesma experiência de uso em qualquer sistema.

Eu diria que tem que tomar um pouco de cuidado na hora que for instalar o sdk, no Windows me parece bem mais fácil, já que é só instalar o executável e dar next, next. No Linux como há várias distros disponiveis, cada uma vai exigir passos diferentes e a instalação é 100% via terminzl(o que não deveria ser problema para um dev). Para cada distro tem um repositório diferente de onde os arquivos de instalação estão hospedados, então os passos podem variar de Ubuntu para Fedora, Arch et

1

Para desenvolvimento de apps desktop, aconselho a dar uma olhada no framework avalonia ui, utiliza xaml para criar as telas do app e executa em várias plataformas desde desktop, mobile e web.

1

Ótima recomendação! Não conhecia esse framework. Ele é de código aberto, compatível com várias plataformas e, pelo que vi, já está na versão 11. Com certeza vou testar.

1