Linux

Linux by Grossmann

Pequena História do Linux

A história do Linux faz parte da própria história da Informática e da Internet, de forma que vamos nos deter um pouco na história de cada um dos componentes que colaborou ou de alguma forma participou na criação do Linux. O que segue pode ser encontrado com maior riqueza de detalhes e, por que não dizer, com mais precisão, no livro “Open Sources: Voices from the Open Source Revolution”, que pode ser baixado da página da editora O'Reilly.


  UNIX  

Nossa história é um pouco comprida. Começa no ano de 1969, quando estava sendo conduzida uma pesquisa na Bell Labs, por Ken Thompson, visando criar um sistema operacional que fosse multitarefa e multiusuário, aproveitando os conceitos do MULTICS. O sistema operacional criado passou a se chamar UNIX. Inicialmente o UNIX rodava apenas em computadores DEC PDP-7 (que já eram antigos na época).

Uma das revoluções do UNIX foi o uso de linguagens de “alto nível” no mesmo, pois os sistemas operacionais eram escritos em linguagem de máquina até aquele dia, um processo tedioso que exigia as melhores cabeças para dar algum resultado. Todo este trabalho era necessário para que cada ciclo de CPU fosse aproveitado, e não houvesse desperdício de um bit sequer. Dennis Ritchie havia inventado a linguagem C e, para provar o poder da mesma, reescreve todo o UNIX em C, dando origem a uma nova forma de desenvolver sistemas operacionais portáveis. O teste de fogo foi a prova de que o código criado pelo compilador C era tão otimizado quanto a média do código gerado “à mão”.

A portabilidade é um outro tópico que se tornou tema de engenharia de software. Com os sistemas operacionais sendo escritos em linguagem de máquina, pouco ou nada se aproveita do código existente na criação do sistema operacional para outra plataforma. Isto mudou com a linguagem C. Mantendo o máximo de código em linguagem C, quando uma nova plataforma era criada, tudo o que se precisava fazer era tornar o compilador C capaz de gerar código para a nova plataforma (o processo de criar código para uma máquina diferente da máquina em que o programa está sendo compilado chama-se de compilação cruzada) e reescrever as partes que eram feitas em código de máquina (alguns trechos dos sistemas operacionais ainda são escritos em linguagem de máquina, mas são trechos que dependem da máquina e de como é sua arquitetura interna). O passo seguinte, após ter o sistema operacional para a nova plataforma já compilado e funcionando, é compilar o próprio compilador C. Com o UNIX e o compilador C funcionando no novo computador, bastava compilar as ferramentas do UNIX e aplicativos que estivessem escritos em C e pronto! Uma nova plataforma já podia ser lançada, com um sistema operacional que era o mesmo que já rodava em outras máquinas, permitindo o reaproveitamento de todo ou quase todo o código C que já houvesse escrito para a plataforma original!

Outro dos conceitos do UNIX que criou escola era conhecido por KISS (Keep It Simple, Stupid - Mantenha A Simplicidade, Estúpido) - em vez de ferramentas complexas, monolíticas, capazes de executar tarefas complexas, optava-se por ferramentas simples, especializadas em uma única tarefa, mas que podiam ser combinadas para realizar tarefas mais complexas. Tanto o UNIX era constituído de pequenas ferramentas especializadas, como o próprio C era constituído de poucas palavras-chave e poucas estruturas.

Um exemplo do conceito KISS é o comando sort. Tudo o que ele faz é colocar informações em ordem crescente. Ele recebe sua entrada da entrada padrão ou de um arquivo, e coloca a saída em uma determinada ordem, de acordo com os parâmetros informados na linha de comando. Tendo criado uma ferramenta capaz de fazer ordenamento de linhas, tarefas como colocar em ordem alfabética um arquivo contendo uma lista de nomes ficou trivial. Bastava filtrar o arquivo pelo comando sort. Outra possiblidade que esta abordagem dá é que outros programas ficam mais simples. Por exemplo, o comando ls é implementado por um programa que lista os arquivos do diretório, obedecendo as opções informadas na linha de comando. O que o comando ls não faz é colocar os nomes de arquivos em ordem crescente ou decrescente, mas é muito simples conseguir isto, filtrando a saída do comando ls com o comando sort. O ls não precisa saber colocar linhas em ordem crescente, este é um trabalho do sort. Fica fácil conseguir efeitos complexos simplesmente utilizando os filtros existentes. Por exemplo, o que o comando more faz é colocar a informação que recebe na entrada padrão na tela, uma tela de cada vez, aguardando que o usuário pressione alguma tecla para passar para a tela seguinte. Desta forma, o comando ls não precisa aprender a paginar a saída, o more é quem sabe como fazer isto. Juntando os três comandos apresentados, chegamos a uma construção comum em UNIX, as linhas de comando em que vários comandos são combinados para se conseguir o efeito desejado:

 $ ls /bin | sort | more 

Este conjunto de ferramentas e conceitos poderosos fizeram do UNIX um sucesso no meio acadêmico e, posteriormente, no meio comercial. O UNIX passou a ser comercializado em computadores de grande porte, conhecidos como mainframes, ao mesmo tempo que as Universidades passaram a adotar o mesmo em seus laboratórios.

Conhecido pelos acadêmicos recém-formados, o UNIX logo passou à condição de “O Verdadeiro Sistema Operacional”. As características de multitarefa, multiusuário, escalabilidade, confiabilidade e segurança do mesmo o tornaram um padrão para Sistemas Operacionais, com o VMS.


  C  

Na mesma época em que Ken Thompson criava o UNIX, Dennis Ritchie criava a linguagem de programação “C”, e reescreveu o UNIX em C para provar o poder da nova linguagem criada. Na época, muitos programadores utilizacam o FORTRAN, uma linguagem voltada para aplicações científicas e numéricas, e os sistemas operacionais, compiladores e ferramentas eram geralmente escritas em assembly ou em linguagem de máquina. Durante algum tempo surgiu o sentimento que “programadores de verdade não utilizavam C”, por que C facilitava demais a atividade de programação.

A linguagem C passou a ser fornecida em conjunto com o UNIX, de forma a se tornar a linguagem de programação por excelência para este sistema operacional. Tanto que um dos primeiros passos para portar o UNIX para uma nova plataforma era justamente criar um compilador capaz de criar código objeto para a nova plataforma. Uma vez isto feito, a compilação do núcleo do UNIX para a nova plataforma era a tarefa seguinte. Desta forma, o C tornou-se uma ferramenta imprescindível para tornar o UNIX popular e facilmente portável.

O fato de que o UNIX era distribuído com os códigos fontes, e com um compilador 'C', fez com que o UNIX ganhasse popularidade: todos os usuários do mesmo podiam corrigir bugs e inserir melhoramentos, o que fez com que o UNIX crescesse bastante na década de 1970.


  Internet  

Na mesma época que o UNIX estava dando os seus primeiros passos, também estava dando os seus primeiros passos a Internet, na forma de ARPANET.

No início, a Internet era um projeto do Departamento de Defesa dos EEUU, visando criar uma rede de informática redundante e não centralizada, capaz de suportar um ataque nuclear.

A plataforma escolhida como padrão para a ARPANet era o UNIX, e o mesmo passou a ser distribuído com todos os pacotes necessários à conexão com a Internet.

É importante lembrar que a ARPANet não era a única rede de computadores na época, assim como a Internet também não é a única rede de computadores mundial hoje. Haviam algumas redes acadêmicas, como a BITNet, redes corporativas e a USENET.

Também não era a Internet a única rede que o UNIX suportava. Havia, já na época, uma rede informal de computadores, uma espécie de BBS, que trocava correspondências e arquivos da USENET, usando o protocolo de cópia UNIX para UNIX, ou UUCP, funcionando com links de linha discada.


  Gnu  

A história do GNU Software é, no mínimo singular. Tudo começou com um programador, Richard Stallmann, que estava criando um aplicativo, e queria as especificações da interface de uma impressora, para criar um driver de impressão próprio. Ocorre que o fabricante tinha estas especificações protegidas a sete chaves, e negou o pedido, frustrando Richard Stallmann. Isto gerou no mesmo uma frustração tremenda: como programador, ele depende do código de outros programadores, e também de especificações claras.

Outro evento que ocorreu foi que Stallmann havia criado um editor de textos, o EMACS, e o distribuía livremente. Um programador pegou o código e vendeu a uma empresa, que alterou o mesmo, patenteou o código e o vendeu como Lucid EMACS. Ao mesmo tempo que o Lucid EMACS era lançado, a empresa proprietária do mesmo mandou uma carta a Richard Stallmann exigindo que o mesmo cessasse de distribuir o EMACS. Stallmann se viu na necessidade de reescrever o EMACS do zero, sem nenhum código original, que era agora propriedade de uma empresa, muito embora Stallmann fosse o criador original do mesmo.

Na mesma época, Richard observou que alguns acadêmicos, com o auxílio de uma comunidade universitária de programadores, faziam excelentes sistemas, o que despertava o interesse de grantes empresas, que contratavam estes acadêmicos e cooptavam o código criado pelos mesmos, tornando o mesmo indisponível para a comunidade de programadores que ajudou a criar o mesmo.

A comunidade de hackers que Stallmann participava, que costumava trocar códigos fontes de programas, e o fazia para melhorar, corrigir bugs, adaptar o programa para novas plataformas, ou mesmo para canibalizar partes do código para outros programas, estava sendo destruída - os hacker eram contratados por empresas que os proibiam terminantemente de compartilhar os 'trade secrets', ou segredos do negócio.

Com isto, surgiu em Stallmann a noção de que os usuários de programas deveriam gozar de mais liberdade, e não ser reféns das empresas que criam o software. Da mesma forma, os programadores não deveriam ter suas possibilidades de aprendizado e mesmo de criação limitada por licenças de software que impediam o acesso ou reutilização de código fonte. Em suas palavras, as empresas não deveriam poder impedir que se ajudasse o vizinho.

Visando criar uma comunidade de programadores que compartilham o código, o Richard Stallmann criou a "Free Software Foundation", ou "Fundação do Software Livre". A finalidade desta fundação era criar software e, mais especificamente, um sistema operacional semelhante ao UNIX, mas que não contivesse nenhuma linha de código proprietário.

O nome deste sistema operacional é "GNU", que significa "GNU's Not UNIX", uma definição recursiva, bem ao gosto dos hackers de UNIX e C.

Um sistema operacional consiste de um núcleo, ou kernel, e um conjunto mínimo de bibliotecas e utilitários. O conjunto de bibliotecas foi criado e denominado de GNU LibC. As ferramentas criadas consistiam de ferramentas básicas, como os comandos grep, cut, ls, mkdir, rmdir, ln a ferramentas de compilação, como o make, gcc, autoconf, e outras.

O núcleo do sistema operacional GNU seria o Hurd, um núcleo moderno, baseado no conceito de microkernel, com as diversas funções do mesmo implementadas como serviços. Mas criar um microkernel provou ser uma atividade muito mais complexa que o resto do sistema GNU. Até a data que esta página foi criada (junho de 2001) não havia uma versão do Hurd que pudesse ser utilizada em sistemas de produção.


  Minix  

Andy Tannenbaun, um professor de Sistemas Operacionais na Universidade de Helsinque, criou um sistema operacional para seus alunos utilizarem no aprendizado de sua cadeira. O MINIX é um sistema operacional baseado também no conceito de microkernel, e que pode ser executado em computador PC-XT, 286, 386 e superiores.

Devido ao fato do código fonte do MINIX estar disponível para quem quisesse estudar o mesmo, acabou se formando uma comunidade de usuários em torno do mesmo, dedicada a trocar entre si patches e hacks, visando tornar o MINIX um pouco mais que um sistema acadêmico, como era intenção do seu criador.

Entretanto, Andy Tannenbaun não acatava muitas sugestões. O MINIX foi mantido propositalmente em um estágio de desenvolvimento para poder ser utilizado em uma sala de aula como ferramenta de aprendizado sobre arquitetura de sistemas operacionais. Este "engessamento" do MINIX desagradava muitos dos hackers de MINIX, que haviam colaborado para que o mesmo chegasse onde havia chegado, e queriam que o mesmo avançasse em termos de funcionalidades e eficiência. A única alternativa para quem queria um MINIX melhorado era o uso de patches fornecidos por terceiros, um mecanismo que é eficiente para corrigir alguns bugs aqui ou ali, mas é muito frustrante para quem quer alterar radicalmente muitas partes do MINIX.


  Linux  

Um dos usuários do MINIX era Linus Torvalds. No ano de 1990 Linus Torvalds estava às voltas com um 386, e queria um sistema operacional mais poderoso que o MINIX. Como já havia estudado a cadeira de Sistemas Operacionais, ele tinha uma compreensão de como funciona um Sistema Operacional, o que deve ser implementado, e como ele queria um sistema operacional.

Linus começou então a trabalhar em um núcleo de sistema operacional monolítico. A princípio era um hobby, algo que Linus fazia no seu tempo livre, nos longos invernos da Finlândia, em que não há muito a fazer, exceto programar e outras “coisas”.

Linus logo percebeu que a tarefa de criar um núcleo era demais para um programador, mesmo um bom programador. Tendo uma versão com funcionalidade mínima, ele resolveu postar uma mensagem na USENET, convidando quem estivesse disponível para participar do desenvolvimento deste novo sistema operacional. Era o dia 5 de outubro de 1991:

"Do you pine for the nice days of Minix-1.1, when men were men and
wrote their own device drivers? Are you without a nice project and
just dying to cut your teeth on a OS you can try to modify for your
needs? Are you finding it frustrating when everything works on Minix?
No more all-nighters to get a nifty program working? Then this post
might be just for you.

As I mentioned a month ago, I'm working on a free version of a
Minix-lookalike for AT-386 computers. It has finally reached the stage
where it's even usable (though may not be depending on what you want),
and I am willing to put out the sources for wider distribution.  It is
just version 0.02... but I've sucessfully run bash, gcc, gnu-make,
gnu-sed, compress, etc. under it."

Foi este o início do Linux. Em alguns anos foi lançada a versão 1.0, seguida da versão 2.0. Atualmente o Linux já se encontra na versão 2.4, e rodando em diversas plataformas, além do 386 original: MIPS, Alpha, PowerPC e outros. O Linux está presente em projetos científicos, fornecendo o subtrato para que algumas dezenas ou centenas de computadores trabalhem e forneçam a mesma performance que um supercomputador, a uma fração do custo do supercomputador. Ele foi cortado e recortado para caber em dispositivos embarcados, de assistentes digitais a relógios de pulso. Ele foi adaptado e já foi ao espaço, à bordo do ônibus espacial, e tem seu lugar na estação espacial internacional. Ele tem sido utilizado em escolas para ensinar computação, engenharia de software, e para fornecer um suporte a outros programas educativos. Ele tem sido utilizado para automatizar hospitais e hotéis, e para tocar negócios como o de provedor de serviços de internet. Tem sido utilizado para monitorar processos e para testar teorias. Existe em laboratórios e em caixas eletrônicos. Está nos bancos e em computadores governamentais. E tem trazido espanto e maravilha a muitos que precisam de liberdade para criar, liberdade para recriar, e para expandir seus horizontes.

Fruto de uma “reencarnação” de uma comunidade que acredita em compartilhar suas descobertas, e que preza muito mais a liberdade e o espírito de fraternidade que o lucro, o Linux hoje está crescendo, e precisa que novos programadores e usuários passem a tocha adiante. Novos dispositivos de hardware são criados todos os dias. Novas aplicações e usos para o computador são concebidos todos os dias. Para manter-se na fronteira, é preciso força de vontade, gênio inventivo, e estar disposto a fazer parte de uma comunidade que orgulha-se de compartilhar, de aprender, e de ensinar. Se você se sente motivado a programar pelo prazer de programar, se a excelência técnica é motivo de orgulho para ti, ou mesmo se você tem apena a sede de aprender, junte-se à comunidade de desenvolvedores do Linux. Não é uma comunidade egoísta: você pode examinar o código fonte de cada programa, e ver o que cada ferramenta, função, instrução faz. Você pode aprender com o que outros fizeram. E você pode acrescentar o teu código nesta construção. Você tem esta liberdade garantida pela GPL.



© 2001 César A. K. Grossmann
Esta página é OpenContent, e pode ser utilizada nos termos da OpenContent License.
1