A dicotomia entre o mundo open-source e suas comunidades e o mundo fechado e corporativo vem sumindo. A Microsoft, principal expoente do mundo 'código fechado', surpreendeu nos últimos anos ao aderir ao modelo open source além de encorajar o uso de seus produtos em outros sistemas operacionais.
Os principais nomes da Microsoft fazem parte dessa transformação. A plataforma de computação em nuvem, Azure, suporta Linux. O banco de dados, SQL Server, também suportará Linux. Mesmo tendo seu próprio site de hospedagem de projetos open source, CodePlex, a Microsoft tem forte presença no GitHub. Seu novo editor, Visual Studio Code, traz em sua página inicial links para download para Mac e Linux. Até mesmo o shell mais utilizado no mundo Linux, Bash, possui um port para Windows em desenvolvimento.
O .NET Framework não poderia ficar de fora dessa ‘nova’ Microsoft que é aberta por padrão. A plataforma .NET não só abriu o código fonte de seu compilador e de sua API, como também inaugurou uma versão cross-platform do plataforma .NET, o .NET Core.
Primeiramente, o que é o .NET Framework?
O .NET Framework é uma plataforma de desenvolvimento da Microsoft que compreende uma máquina virtual (CLR), uma linguagem de bytecode (CIL), uma biblioteca padrão (BCL), um gerenciador de pacotes (NuGet), um compilador (Roslyn), linguagens de programação (C#, F#, VB.NET), uma ORM (Entity Framework), uma plataforma web (ASP.NET MVC) dentre vários outros componentes.
A plataforma .NET é similar à conhecida plataforma Java, em vista que tem uma cultura orientada a objeto (apesar da recente investida em linguagens funcionais), possui uma máquina virtual e um padrão de bytecode suportando a execução dos programas independente do sistema operacional, além de ser muito popular no mundo corporativo.
Um dos casos de sucesso mais famosos do uso da plataforma .NET é a da rede de sites Stack Exchange.
E o .NET Core?
O .NET Core é um fork do .NET Framework. A grosso modo, é uma versão mais enxuta onde só o core foi aproveitado (daí o nome). Ele consiste na máquina virtual CoreCLR (versão cross-platform do CLR), na API CoreFX (versão cross-platform do BCL), no ambiente de execução otimizado para código nativo CoreRT e no utilitário de linha de comando .NET Core CLI.
Ele suporta aplicações linha de comando, bibliotecas, aplicações ASP.NET Core (aplicações web) e aplicações UWP (Universal Windows Plataform). É mais modular, todas suas dependências são pacotes NuGet, não é necessário que seus assemblies estejam instalados na máquina. As atualizações que antes eram distribuídas via instaladores ou atualizações do Windows agora são uma simples atualização de pacotes.
Olá mundo
Experimentar o .NET Core não poderia ser mais fácil, a página dot.net/core traz instruções detalhadas de como instalá-lo e executá-lo em diferentes sistemas operacionais.
As instruções abaixo foram retiradas de dot.net/core#ubuntu e executadas no sistema operacional Ubuntu 16.04.
1. Adicione o feed de pacotes
Antes de instalar, adicione o provedor indicado pela Microsoft ao feed de pacotes de seu sistema (sources.list).
2. Instale o .NET Core
Instale o .NET Core com o conhecido comando apt-get install.
3. Inicie um novo projeto
Crie uma pasta qualquer, hwapp por exemplo, e nela execute o comando dotnet new. Um template de projeto .NET Core que diz “Hello World!” será gerado.
Se é sua primeira vez executando o comando, você terá que aguardar alguns segundos para que seu cache de pacotes NuGet seja construído (localizado em ~/.nuget).
4. Execute a aplicação
Basta executar dotnet restore para instalar os pacotes NuGet necessários do projeto e dotnet run para executar a aplicação. “Hello World!” deverá ser impresso em seu console.
Extra: Complicando um pouco
Vamos deixar nossa aplicação um pouco mais complexa, no arquivo Program.cs, troque a linha
Console.WriteLine("Hello World!");
por
Console.WriteLine(args.Length == 0 ? "Olá!" : $"Olá {(string.Join(", ", args))}!");
Depois de alterado, experimente executar a aplicação passando alguns paramêtros, como dotnet run fulano.
Para quem não conhece C#, segue uma explicação do que estamos fazendo:
Código | Explicação |
Console.WriteLine |
Escreve a string recebida na saída padrão (stdout). |
args |
Array com os parâmetros passados na linha de comando. |
args.Length == 0 |
Verifica se o array está vazio. |
? e : |
Típico operador ternário. |
"Olá!" |
Uma string comum. |
$"" |
Uma string interpolada, uma novidade do C# 6. O código C# entre chaves será executado e concatenado à string. |
string.Join(", ", args) |
Concatena os valores do array args em uma única string, separando-os por vírgula. |
Distribuindo
Para gerar uma publicação pronta para ser distribuída utilize o comando dotnet publish.
Execute-o nas pasta do projeto de exemplo que utilizamos até o momento e veja que a pasta bin/Debug/netcoreapp1.0/publish será criada. Nela consta nossa humilde aplicação, hwapp.dll, e suas dependências.
Para executar a aplicação publicada, basta executar o comando dotnet hwapp.dll em sua pasta.
O comando dotnet
Desenvolvemos uma simples aplicação .NET sem utilizarmos uma IDE graças ao comando dotnet. Ele é um comando completo, toda interação com o .NET Core pode ser feita através dele:
Comando | Descrição |
dotnet build |
Compila o projeto e suas dependências. |
dotnet new |
Cria um novo projeto .NET Core. |
dotnet pack |
Cria um pacote NuGet do projeto. |
dotnet publish |
Prepara o projeto e suas dependências em uma pasta pronta para ser distribuída. |
dotnet repl |
Ambiente interativo (read-eval-print-loop). |
dotnet restore |
Restaura as dependências do um projeto. |
dotnet run |
Executa o projeto. |
dotnet test |
Executa os testes de unidade. |
Concluindo
Vivemos em um mundo plural no que diz respeito a computação. Nossos computadores não estão mais somente em nossas mesas mas também estão em nossos bolsos com o advento dos smartphones, além da promessa que em breve eles estarão nos outros dispositivos ao nosso redor com a "Internet das Coisas" ou "IoT".
Essa diversidade também está presente nas ferramentas e arquiteturas que utilizamos no desenvolvimento de sofware. Os servidores que suportam toda essa gama de dispositivos também mudaram, os grandes serviços monolíticos deram lugar aos chamados microserviços e combinamos como nunca diferentes técnicas de programação, linguagens, sistemas operacionais e sistemas de bancos de dados.
A Microsoft vem se esforçando para conquistar um lugar nesse novo cenário e o .NET Core é sua mais nova adição. Todos saem ganhando: as empresas que já utilizam a plataforma .NET ganham a liberdade de utilizar suas aplicações em outros sistemas operacionais e o mundo acadêmico e as startups ganham mais uma excelente opção no seu leque de tecnologias.
Mas esse é só o começo. O .NET Core ainda está em sua infância e ainda possui uma série de arestas a serem aparadas. A indecisão sobre a adoção do arquivo “project.json” e a falta de filtro para bibliotecas que suportam o .NET Core na busca do NuGet são alguns exemplos.
Que venha o futuro da plataforma .NET.
Sobre o autor
Talles Lasmar é um arquiteto de sistemas que "fugiu" do mundo acadêmico e foi para a indústria. É experiente com .NET, eterno interessado por concorrência, professor de git e admirador das soluções que são simples por natureza.