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á 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. :)
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, resultaram em um sistema bastante otimizado e elegante. Muitas das idéias surgidas nesta é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 pesquisas. 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 investimentos 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 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 usava para desenvolver o 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 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 idéia 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 deixar de estar disponível. Enquanto houver um volume considerável de usuários, é 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 seja prestar suporte e vender serviços de personalização e não 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 dos programas disponíveis 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 por 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 ou:
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 a 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 fechados na mesma edição. Os softwares GPL continuam sendo GPL, com todas regras que vimos acima, enquanto os softwares comerciais 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 muitos 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, que vem nos trazendo diversas mudanças positivas.
Voltando a 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.
Alem 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 somam uma grande lista de interfaces e aplicativos que surgiram nos anos seguintes, tais como o Gnome, KDE, Firefox, OpenOffice e assim por diante.
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 historia, com Richard Stallman passando a exigir o uso do termo GNU/Linux (que é pronunciado como “gui-nuu slash 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 e um caso em que as opiniões se dividem, com alguns dando razão a ele e realmente usando o “gui-nuu slash Linux”, 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 e muito mais simples e 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 escrito para ser usado em micros PC (mais especificamente no 386 que Linux 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 processadores, dos processadores de 32 e 64 bits usados em micros PC, a chips especializados usados em maquinário industrial.
Existe ate mesmo um fork do kernel Linux que e capaz de rodar em processadores 8088 e 286 (o ELKS), como os usados nos primeiros micros PC. Embora estejam a muito obsoletos nos PCs, 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 junho de 2008 tínhamos 427 dos 500 supercomputadores mais poderosos rodando diferentes versões do Linux (http://www.top500.org/stats/list/31/osfam). Dos restantes, 25 rodavam outros sistemas Unix e apenas 5 rodavam Windows, 3 deles com o HPC Server 2008 e 2 com o Windows Compute Cluster Server 2003, duas versões do Windows especialmente otimizadas para a tarefa.