15.3.12

Uma breve história do Linux

O sistema operacional é o responsável por ativar todos os periféricos e criar o ambiente sobre o qual todos os outros programas rodam. É ele o responsável por reservar processamento suficiente para que o MP3 que você está ouvindo em background continue sendo tocado mesmo quando você precisa abrir outro aplicativo pesado, ou por transferir programas e bibliotecas sem uso para a memória virtual quando a memória principal está quase toda ocupada, por exemplo. Isso faz com que o trabalho do sistema operacional seja uma atividade inglória, já que você só se lembra dele quando alguma coisa dá errado. :)

Para tristeza de alguns e alegria de outros, o Windows é o sistema operacional mais usado em desktops, o que faz com que ele seja a plataforma mais familiar para a maioria. Muitas tarefas são complicadas (experimente tentar encontrar drivers para alguma placa-mãe antiga, por exemplo), mas, como muita gente usa e muitos passam pelos mesmos problemas, acaba existindo uma rede de suporte em torno do sistema.

O domínio da Microsoft na área de sistemas operacionais começou em 1981, com o lançamento do primeiro PC e da primeira versão do MS-DOS. Embora não tivesse nada de especial com relação a outros sistemas da época, o DOS cresceu em popularidade junto com os PCs, seguido pelas diversas versões do Windows. Apesar disso, a Microsoft é uma página recente na história da informática. Enquanto o MS-DOS ainda dava seus primeiros passos, o Unix já era um sistema maduro, usado na maioria dos computadores de grande porte e em estações de trabalho. A história do Unix começou em 1969, na frente de um computador igual a este:



Este é um PDP-7, um "minicomputador" da década de 1960 que possuía apenas 8 kbytes de memória RAM e utilizava fitas magnéticas para o armazenamento de dados. Hoje em dia, qualquer agenda eletrônica ou celular possui muito mais memória e poder de processamento do que ele, mas na época era um equipamento relativamente poderoso, que custava US$ 72.000.

Devido às pesadas limitações da máquina, o sistema operacional deveria ser extremamente enxuto e otimizado, de forma a extrair o máximo de desempenho e consumir o mínimo possível de memória. A combinação da criatividade dos desenvolvedores, a necessidade e as limitações impostas pelo equipamento, resultou em um sistema bastante otimizado e elegante. Muitas das idéias surgidas nessa época continuam sendo usadas até hoje.

O Unix evoluiu durante a década de 1970, passando a ser usado em cada vez mais equipamentos e ganhando mais recursos. Quase sempre ele era usado em aplicações "sérias", incluindo instalações militares, bancos e outras áreas onde não existe margem para falhas. Devido a tudo isso, o sistema se tornou muito robusto e estável.

Os primeiros sistemas Unix foram desenvolvidos de forma colaborativa, dentro de universidades e centros de pesquisa. Embora naquela época ainda não existisse a Internet como a conhecemos hoje, existia uma grande colaboração entre os desenvolvedores. Isso mudou na década de 1980, quando empresas como a AT&T, Sun e SCO, que detinham os direitos sobre o sistema, passaram a desenvolver versões proprietárias e a concorrerem entre si. A colaboração deixou de acontecer e a plataforma foi fragmentada em versões incompatíveis.

Outro fator importante foi a falta de investimento em versões destinadas a micros PCs. Na época, os PCs eram vistos como computadores muito limitados, incapazes de rodar sistemas Unix completos (lembre-se de que estou falando do início da década de 1980, quando ainda eram usados micros XT e 286). Somados, estes dois fatores fizeram com que a plataforma definhasse, deixando o caminho livre para o crescimento da Microsoft e das diferentes versões do Windows. Chegamos, então, ao Linux.

Tudo começou em 1991, quando Linus Torvalds começou a trabalhar no desenvolvimento de um sistema Unix para rodar em seu 386. Na época, o único sistema similar era o Minix, um sistema operacional para uso acadêmico, que era bastante limitado. No início, Linus usava o Minix para rodar o editor, compiladores e outras ferramentas de desenvolvimento que utilizava para desenvolver o kernel Linux, mas, a partir de um certo ponto, ele passou a usar o próprio Linux. Ou seja, depois de um breve período de encubação dentro do Minix, o Linux passou a ser desenvolvido dentro do próprio Linux. :)

De início, o kernel Linux era um projeto muito pequeno, o hobby de um único programador. Entretanto, ele tinha uma grande vantagem em relação aos sistemas UNIX que o precederam: o simples fato de ser disponibilizado sob a licença GPL. Isso permitiu que outros programadores adotassem o projeto, passando a contribuir com melhorias e correções. Subitamente, toda a demanda acumulada em relação a um sistema Unix para micros PC foi canalizada em torno do Linux, fazendo com que o sistema passasse a crescer em um ritmo cada vez mais acelerado, chegando ao que temos nos dias de hoje.

A licença GPL, tão comentada, mas ao mesmo tempo tão mal-compreendida, pode ser resumida em 4 direitos básicos e uma obrigação:

1- Aplicativos disponibilizados sob a GPL podem ser usados por qualquer um e para qualquer fim, sem limitações. Mesmo que eventualmente os criadores mudem de ideia e resolvam passar a distribuir novas versões do programa sob outra licença, as versões que foram distribuídas sob a GPL continuam disponíveis, o que permite que outros desenvolvedores criem uma derivação e continuem o desenvolvimento. Isso traz uma boa dose de segurança para quem usa o aplicativo, já que reduz a chance de ele ser descontinuado e ficar indisponível. Enquanto houver um volume considerável de usuários interessados no aplicativo, é bem provável que o desenvolvimento continue, de uma forma ou de outra.

2- Direito de tirar cópias do programa, distribuí-las ou até mesmo vendê-las a quem tiver interesse. Existe a possibilidade de ganhar algum dinheiro vendendo CDs gravados, por exemplo, mas como todo mundo pode fazer a mesma coisa, é preciso vender por um preço relativamente baixo, cobrando pelo trabalho de gravação e não pelo software em si, que está largamente disponível.

Isso faz com que a forma mais eficiente de ganhar dinheiro com os softwares seja prestar suporte e vender serviços de personalização e não com a venda direta, como no caso dos softwares comerciais. Para o cliente, acaba sendo vantajoso, pois o custo de implantação será o gasto com a consultoria e treinamentos, enquanto ao implantar um software comercial qualquer, ele gastaria também com as licenças de uso.

3- Direito de ter acesso ao código fonte do programa, fazer alterações e redistribuí-las. Para um programador este é o principal atrativo, já que permite criar novos projetos usando como base o código fonte de programas já existentes (ao invés de ter sempre que começar do zero), sem falar na grande oportunidade de aprendizado que examinar o código fonte de outros programas propicia.

4- Direito (e ao mesmo tempo a obrigação) de redistribuir as modificações feitas. Este é o ponto onde existem mais mal-entendidos. Se você desenvolve um software por hobby, ou para usá-lo internamente na sua empresa, e não possui interesse em explorá-lo comercialmente, você pode simplesmente divulgar o código fonte para todo mundo, o que é o caminho mais lógico se você pretende atrair outros interessados em ajudá-lo no desenvolvimento. Mas, caso você pretenda receber pelo seu trabalho de desenvolvimento, existem duas opções:

a) Você pode distribuir o software livremente para aumentar a base de usuários e ganhar vendendo suporte, treinamentos e personalizações.

b) Você só é obrigado a distribuir o código fonte a quem obtém o software, de forma que você pode trabalhar batendo de porta em porta, vendendo o software para alguns clientes específicos e fornecendo o código fonte apenas para eles. Não existe nada de errado com este modelo, mas você perde a possibilidade de ter contribuições de outros desenvolvedores, o que pode ser ruim a longo prazo.

Os softwares distribuídos sob a GPL também não "contaminam" softwares comerciais ou de outras licenças no caso de distribuição conjunta. Por exemplo, uma revista pode distribuir alguns softwares GPL no meio de um monte de aplicativos proprietários na mesma edição. Os softwares GPL continuam sendo GPL, com todas regras que vimos acima, enquanto os softwares proprietários continuam sendo fechados. A revista deve incluir o código fonte dos aplicativos GPL (ou pelo menos a informação de como obtê-los via Internet) mas, naturalmente, não precisa fazer o mesmo com os outros aplicativos incluídos no CD.

Você pode também usar algum software GPL em conjunto com o seu aplicativo comercial, desenvolvendo um aplicativo qualquer que utiliza o Postgree SQL (um servidor de banco de dados), por exemplo. O Postgree SQL continua sendo GPL e o seu aplicativo continua sendo fechado; qualquer um pode usar e tirar cópias do Postgree SQL, mas você controla a distribuição do seu aplicativo. Uma coisa não interfere com a outra.

Ou seja, muito embora alguns vejam a GPL como algum tipo de licença comunista, que diz que todos os programadores devem fazer voto de miséria e passar a trabalhar de graça em nome do bem comum, ela é na verdade apenas uma licença que estimula a colaboração e o reaproveitamento de softwares e componentes, e que vem nos trazendo diversas mudanças positivas. De certa forma, podemos dizer que a GPL é uma licença até bastante capitalista (no bom sentido), pois estimula a concorrência entre projetos e empresas e dificulta a criação de monopólios, que são ruins para o sistema econômico.

Voltando à história, embora o kernel seja o componente mais importante do sistema (e também o mais complexo), ele não é o único. Qualquer sistema operacional moderno é a combinação de um enorme conjunto de drivers, bibliotecas, aplicativos e outros componentes. O kernel é apenas uma base sobre a qual todos eles rodam.

Além do período de incubação dentro do Minix, o Linux se beneficiou de diversos outros projetos anteriores, tais como o X (responsável pela interface gráfica) e inúmeros utilitários, bibliotecas, linguagens de programação, compiladores e assim por diante. A eles se soma uma grande lista de interfaces e aplicativos que surgiram nos anos seguintes, tais como o GNOME, o KDE, o Firefox e o OpenOffice.

Entre as ferramentas usadas desde os primeiros dias, estão o Emacs e o GCC, desenvolvidos pela Free Software Fundation, como parte do projeto GNU. O Emacs é um editor de texto que combina uma grande quantidade de recursos e ferramentas úteis para programadores, enquanto o GCC é o compilador que permite transformar o código escrito nele em arquivos executáveis.

Isso deu origem a uma das maiores flame-wars da história da informática, com Richard Stallman passando a exigir o uso do termo "GNU/Linux" (que é pronunciado como "guí-nuu issléchi Linux") para designar o sistema, em vez de simplesmente "Linux", argumentando que o projeto GNU foi iniciado antes e que por isso merece crédito.

Este é um caso em que as opiniões se dividem, com alguns dando razão à ele e realmente usando o "guí-nuu issléchi Linux" (ou "guínû barra Linux", que é a versão aportuguesada), e outros argumentando que os componentes do projeto GNU correspondem a apenas uma pequena parte do sistema e que por isso se fosse para dar o crédito devido a todos os inúmeros componentes que formam uma distribuição atual, seria preciso chamar o sistema de X/Qt/KDE/GTK/GNOME/Mozilla/Firefox/OpenOffice/...longa-lista.../GNU/Linux.

O fato é que, excluindo qualquer discussão filosófica, o nome "Linux" puro e simples é muito mais fácil de pronunciar, o que faz com que o "GNU/Linux" não seja usado fora de alguns círculos específicos.

Continuando a história, embora o Linux tenha sido originalmente desenvolvido para ser usado em micros PC (mais especificamente no 386 que Linus Torvalds usava em 1991), a modularidade do sistema, o fato de ele ter sido escrito inteiramente em C e as boas práticas empregadas no desenvolvimento permitiram que ele ganhasse versões (ou ports) para outras plataformas. Hoje em dia, o Linux roda em praticamente todo o tipo de sistemas: de PCs domésticos equipados com chips de 32 ou 64 bits, a equipamentos especializados, usados em maquinário industrial.

Existe até mesmo um fork do kernel Linux que é capaz de rodar em processadores 8088 e 286 (o ELKS), como os usados nos primeiros micros PC. Embora estejam obsoletos nos PCs a mais de duas décadas, versões modernizadas desses chips são relativamente populares em sistemas embarcados, concorrendo com chips Z80 e outros processadores de 8 ou 16 bits, que, embora desconhecidos do grande publico, são produzidos e usados em quantidades gigantescas nos mais diversos tipos de dispositivos. É justamente essa versatilidade que faz com que o Linux seja usado em tantas áreas diferentes, de celulares a supercomputadores.

Ao ver micros com Linux em exposição nas lojas e em mercados, tenha em mente que esta é apenas a ponta do iceberg. O uso do Linux em micros domésticos, pelo grande público, é uma coisa relativamente recente. Antes de chegar aos desktops, o Linux cresceu entre os desenvolvedores e usuários avançados, dominou os servidores, invadiu o mundo dos dispositivos embarcados (celulares, roteadores, pontos de acesso wireless e até mesmo modems ADSL) e se tornou o sistema dominante no mundo dos supercomputadores.

Segundo o http://www.top500.org/ (que mantém um rank atualizado dos 500 supercomputadores mais poderosos do mundo), em novembro de 2008 nada menos do que 439 dos 500 supercomputadores mais poderosos rodavam diferentes versões do Linux (http://www.top500.org/stats/list/32/osfam). Dos restantes, 25 rodavam outros sistemas Unix e apenas 5 rodavam Windows, um deles com o HPC Server 2008 e quatro com o Windows Computer Cluster Server 2003, duas versões do Windows especialmente otimizadas para a tarefa.