Qual é a Diferença de Programar no Linux? [Aspectos Técnicos]

As principais diferenças de programar no Linux estão relacionadas ao funcionamento do kernel do sistema.

O kernel do Linux é leve e pode ser executado em computadores mais antigos. Ele tem suporte nativo a máquinas virtuais e containers, componentes importantes de um ambiente de desenvolvimento.

Como consequência, os softwares aproveitam essas características do kernel para rodarem de maneira mais eficiente no Linux do que no Windows.

Para que você entenda como isso funciona, eu listo nesse post alguns detalhes técnicos que diferenciam o Linux e que fazem dele um ambiente ideal para programadores.

Se você quiser entender como o Linux torna o programador mais produtivo, dá uma olhada nesse post, onde eu explico 10 motivos para programar no Linux, ligados à produtividade.

E se você quiser saber mais sobre os pontos fortes do Linux em relação à segurança, estabilidade e custo de licenciamento, leia esse post, onde eu explico cada um desses itens em detalhes.

O Kernel do Linux é Mais Tolerante Com Hardware Antigo

Você tem um computador antigo que sofre para rodar o Windows?

Isso é bem comum…

A obsolescência programada é uma característica que não pode ser ignorada nos sistemas proprietários.

A cada atualização do sistema operacional são necessários mais recursos de hardware para continuar tendo o mesmo desempenho.

Mas o Linux exige menos da máquina.

Por isso, roda bem em computadores com processadores mais antigos e com menos memória.

Existe até uma distribuição chamada Raspberry Pi OS que é baseada no debian e roda no Raspberry Pi, com um monte de ferramentas para programação.

Mais uma vez, isso acaba se traduzindo em economia e você pode investir o dinheiro na sua formação, em vez de gastar em um computador novo.

Essa vantagem do Linux é ainda mais importante no ambiente corporativo.

Muitas empresas têm uma política de troca de computadores a cada 36 meses, que costuma ser o tempo máximo de cobertura de garantia que os fabricantes oferecem.

Quando as máquinas não quebram com frequência durante o contrato, as empresas costumam assumir o risco e “esticar” esse período por mais algum tempo.

Com isso, usar a máquina com Windows começa a ficar impraticável.

Por exemplo, compilar um projeto em Java, no Windows, em uma máquina com 5 anos de uso, pode ser dezenas de vezes mais demorado do que em uma máquina nova.

Se você deixa o computador ligado todo dia, para não ter que esperar quinze minutos na manhã seguinte, ou se você se levanta para pegar um café toda vez que inicia o Eclipse, você entende o que eu quero dizer…

Isso sem falar do dia de trabalho perdido porque o pessoal do suporte levou a máquina para formatar.

Portanto, enquanto as empresas não entenderem que o tempo total do programador parado, esperando a máquina ressuscitar, é MUITO mais caro do que um computador novo, use o Linux!

A Interface Pode Ter a Aparência Que Você Quiser

A experiência do usuário é fundamental em um sistema operacional para desktop.

Nesse ponto, a última grande inovação do Windows talvez tenha sido o Windows 95, que trouxe o botão “Iniciar”, ou o Windows 10 com o Cortana (veja mais sobre isso no meu post sobre Privacidade no Linux).

No entanto, se você não gosta da aparência do Windows, a única solução é engolir o seu orgulho e continuar usando o sistema assim mesmo, já que ele não tem outra opção de ambiente gráfico.

Já no Linux, você pode escolher entre várias opções de ambientes desktop, até encontrar a que mais te agrada.

Se você quiser usar o ambiente desktop mais popular, com suporte contínuo e com um bom equilíbrio entre facilidade de uso e possibilidade de customização, use o GNOME.

Ele é o ambiente padrão das distribuições mais usadas no desktop, como Ubuntu, debian, Fedora e openSUSE.

Se você quiser um ambiente com mais opções de configuração, o KDE Plasma é uma boa opção, com a vantagem de exigir menos da máquina que o GNOME.

Tanto o GNOME quanto o KDE são ambientes com uma aparência moderna e foco na experiência do usuário.

Mas se você não se importar com a aparência e só quiser um ambiente leve e rápido, dê uma olhada no Xfce ou no LXQt.

Essas são algumas das opções mais comuns, mas há outras que você pode experimentar, como MATE, Enlightenment e Cinnamon.

Eu prefiro usar o GNOME, porque é o padrão das versões mais recentes do Ubuntu.

Além disso, eu não me importo se o ambiente gráfico consumir um pouco mais de recursos, desde que os aplicativos funcionem bem.

É o Sistema Operacional Mais Usado em Servidores Web

O Linux domina o mercado de servidores Web nos 10 milhões de sites mais acessados na Internet, com uma estimativa de 70% ou mais de market share.

Por isso, há uma grande chance da sua aplicação rodar em um servidor Linux em produção.

Desenvolver uma aplicação Web em um ambiente semelhante ao de produção diminui o risco de alguma coisa não funcionar.

Dois exemplos muito simples de coisas que sempre geram problemas quando você desenvolve no Windows e faz deploy no Linux são o encoding e as quebras de linha.

Isso sem falar na estrutura de diretórios e em outros problemas mais graves, como o tamanho dos tipos primitivos em algumas linguagens de programação.

Portanto, usar o Linux para programar pode evitar surpresas, se alguma coisa ficar diferente entre os seus ambientes de desenvolvimento e produção.

Oferece Melhor Suporte a Máquinas Virtuais

Esse tópico é tão grande que daria um post inteiro, mas vou tentar resumir.

O programador pode simular o ambiente real de produção usando máquinas virtuais no ambiente de desenvolvimento.

Por exemplo, imagine que você está desenvolvendo uma aplicação Web com Python/Django e banco de dados MySQL.

O seu ambiente de produção tem uma configuração muito comum: um servidor Web em uma DMZ, que acessa um banco de dados na rede interna do Data Center, com um firewall entre os dois.

Se você desenvolve e testa todos esses componentes na sua máquina, onde a conectividade sempre funciona, você pode ter alguma surpresa quando fizer o deploy da sua aplicação em produção.

Nesse caso, você poderia criar máquinas virtuais no seu computador que fizessem o papel de cada servidor do ambiente de produção e testar sua aplicação em um cenário mais próximo do real.

E qual é a vantagem de usar Linux se também dá para fazer isso no Windows?

Bem, para responder a essa pergunta, é preciso entender os detalhes técnicos.

Para uma máquina virtual funcionar, ela precisa de um software gerenciador chamado hypervisor.

Esse software é o responsável por emular o hardware para o sistema operacional da máquina virtual.

A máquina que roda o hypervisor é chamada de host e a máquina virtual que roda sobre ela é chamada de guest.

O hypervisor pode ser de dois tipos:

  • Hypervisor Tipo 1: Também chamado de “bare metal” ou nativo. Esse tipo de hypervisor acessa o hardware sem passar pelo sistema operacional do host. Por isso, é mais rápido e estável.
  • Hypervisor tipo 2: Roda sobre o sistema operacional do host, como qualquer outra aplicação. É menos eficiente, porque precisa passar pelo sistema operacional para acessar o hardware.

O KVM (Kernel-Based Virtual Machine) e o Microsoft Hyper-V são exemplos de hypervisor tipo 1, enquanto o Oracle VM VirtualBox e o VMWare Workstation são exemplos de hypervisor tipo 2.

Como você já deve ter imaginado, o KVM faz parte do kernel do Linux.

Isso significa que você pode rodar máquinas virtuais de forma mais eficiente no Linux, sem atrapalhar o seu trabalho.

Mas o Microsoft Hyper-V não funciona no Windows?

Sim, mas só no Windows Server ou no Windows 10 Pro, que tem um custo de licença bem mais alto que a versão Home.

Além disso, as funcionalidades do Hyper-V gratuito são bem básicas.

Então, se você quiser rodar máquinas virtuais no Windows 10 Home, precisa usar o Oracle VM VirtualBox ou o VMWare Workstation, que não são tão eficientes quanto o KVM.

A Execução de Containers é Integrada ao Kernel

Os containers funcionam de maneira bem parecida com as máquinas virtuais e o seu uso nos ambientes de produção já é realidade há algum tempo.

Por isso, o exemplo da seção anterior, que trata da replicação dos ambientes, também se aplica aqui.

Um dos maiores benefícios de usar containers ou máquinas virtuais no ambiente de desenvolvimento para simular o ambiente de produção é que eles reduzem a ocorrência do fenômeno “na minha máquina funciona…”.

Mas, em vez de compartilhar o hardware entre diferentes sistemas operacionais, como acontece com as máquinas virtuais, os containers são aplicações leves que compartilham só o sistema operacional do host.

Como eles funcionam sobre o sistema operacional, da mesma maneira que outros programas comuns, sua inicialização é mais rápida e eles consomem menos recursos.

Essa é a grande vantagem dos containers sobre as máquinas virtuais.

Uma maneira bastante útil e comum de usar containers é em testes de integração.

Imagine que você precisa rodar 50 testes e cada um depende de um estado específico do banco de dados.

Uma solução seria executar esses passos 50 vezes:

  1. Começar com uma imagem comum do banco de dados.
  2. Preparar o estado do banco com os dados necessários antes de cada teste.
  3. Rodar o teste.
  4. Desfazer as alterações no banco de dados e retornar para o passo 2.

Usando containers, você só precisa preparar uma imagem inicial e aproveitar a inicialização instantânea para executar os 50 testes ao mesmo tempo, cada um no seu próprio container e com os seus próprios dados.

Ok, essas são vantagens de usar containers, mas…

Qual é a vantagem de executar containers no Linux?

Containers são uma coisa do Linux. Eles estão nativos do kernel há mais de uma década.

Se você quiser rodar o Docker no Windows 10 Home, precisa fazer isso sobre o Windows Subsystem for Linux 2 (WSL 2), ou seja, você tem que rodar o Linux em uma máquina virtual dentro do Windows, para ter acesso a um software que foi feito para rodar no Linux.

Isso parece até uma piada…

Portanto, se você precisar decidir entre executar containers no Linux ou no Windows Home para programar no seu computador, o Linux não é a melhor opção. É a única.

Mas e o macOS?

O macOS é outro sistema operacional que tem suas origens no padrão POSIX, do Unix.

Por isso, ele também é estável, rápido e tem algumas das vantagens descritas nesse post.

No entanto, os computadores que rodam o macOS são muito caros no Brasil.

Para você ter uma ideia, no momento da publicação desse post, o MacBook Pro de 16 polegadas, modelo top de linha da Apple, com todas as opções de upgrade de hardware, custava o mesmo preço de um sedã zero KM Hyundai HB20S com motor 1.6 de 130cv e câmbio automático de seis marchas.

Há uma maneira de rodar o macOS em um computador que não seja da Apple, chamado de Hackintosh.

Além de dar um trabalho infernal para fazer isso funcionar, esse tipo de instalação é só uma gambiarra sobre uma máquina virtual, o que produz um sistema com performance e capacidade bem inferiores, se comparado ao hardware original da Apple.

Sem falar que isso é uma violação da lei americana de direitos autorais e do contrato de uso do sistema da Apple.

Portanto, a não ser que você tenha bastante dinheiro sobrando, o Linux é mesmo a melhor opção para conseguir um sistema rápido e estável.

Conclusão

A maneira como o kernel do Linux evoluiu faz com que ele seja ideal para uso em servidores ou qualquer outro ambiente onde a virtualização é vantajosa, com o benefício adicional de ser customizável e tolerante com hardware antigo.

Essas características técnicas do Linux são exploradas pelas empresas de desenvolvimento.

Por isso, é comum encontrar vagas de emprego para programadores que exigem conhecimentos em Linux.

Portanto, você terá um diferencial competitivo se entender os aspectos técnicos do funcionamento do Linux que tornam os programadores mais eficientes nesse sistema.

Você usa virtualização para replicar o ambiente de produção da sua aplicação na sua máquina? Então conte a sua experiência nos comentários. Além disso, que outras diferenças técnicas você enxerga no uso do Linux para programar?

Guilherme Brügger D Amato - Audiência Pública na Comissão Senado do Futuro

Guilherme Brügger D’Amato é servidor concursado de TI na Câmara dos Deputados, onde ocupou o cargo de Diretor de Informática entre 2015 e 2016. Com mais de 26 anos de experiência como programador e executivo de TI, já desenvolveu sites e sistemas usados por dezenas de milhões de pessoas. Conecte-se com ele no LinkedIn ou no Instagram.

Deixe um comentário