segunda-feira, setembro 12, 2005
Quando o professor está errado e o aluno está certo
A discussão e as formas de pensar de ambos me remeteram à “A Catedral e o Bazar” ensaio de Eric Raymond sobre o sistema de desenvolvimento de Softwares Livres. Mais que isso, mostrou-me o quanto um homem gabaritado e inteligente pode errar em suas impressões e previsões quando depara-se com uma idéia cuja total plenitude ele ainda não percebera.
Andrew S. Tanenbaum
Professor de Ciência da Computação na Universidade de Vrije em Amsterdam, Holanda. Desenvolvedor do MINIX um sistema operacional UNIX-like pensado para ensinar aos seus estudantes a matéria de Sistemas Operacionais que leciona. O MINIX usa microkernel em sua arquitetura que é definido por essência como sendo uma maneira elegante porém com menor desempenho de implementar um kernel de sistema operacional. Publicou vários livros sobre o assunto como pode ser constatada em sua biografia disponibilizada no link.
Linus Torvalds.
Graduado em Ciência da Computação pela faculdade de Helsink, Finlândia; período no qual desenvolveu as primeiras versões do kernel monolítico Linux que foi posteriormente lançado sob a GPL e usado como kernel padrão em várias distribuições do sistema operacional GNU desenvolvido pela FSF sob o comando de Richard Stallman.
Não seria prático traduzir na íntegra toda a discussão entre eles, por isso mostrarei apenas os pontos que achei interessantes, por mostrar como alguém com o histórico e o gabarito de um professor universitário de renome pode estar errado frente as inovações e ideais de um simples estudante. À época do diálogo (1992) Linus já havia feito seu célebre comunicado aos hackers do mundo para o desenvolvimento do kernel Linux (ver link). Faço meus comentários em itálico e azul sobre as postagens, apresentadas aqui em ordem cronológica.
------------Início das transcrições------------
Tanenbaum:
-Meu trabalho é como professor e pesquisador na área de sistemas operacionais; como resultado de minha ocupação eu creio que sei um pouco sobre o rumo que os sistemas operacionais tomarão na próxima década ou perto disso (as idéias de Tanenbaum então estenderiam-se até 2002 ou perto disso; portanto até os dias de hoje, segundo seu próprio senso de percepção). Dois aspectos devem ser considerados: Microkernel vs Kernel Monolítico e Portabilidade.
a)Microkernel vs Kernel Monolítico:
-Esse debate está acabado, o microkernel venceu.
(Encontrei alguns sistemas operacionais na internet que usam somente Microkernel, mas quase todos ou estão em desenvolvimento ou são sistemas focados em aplicações embarcadas, a maioria dos sistemas de produção de hoje usam modelos mistos de kernel monolítico com conceitos de microkernel implementados em parte ou microkernels controlando pseudo-kernels mais completos, nessa categoria podemos colocar o FreeBSD, o MacOSX. (Nota de falcon_dark: Posteriormente encontrei fortes indícios de que o FreeBSD usa um kernel monolítico de fato, como o Linux. Isso colocaria-o em uma classificação de tipos de kernel ao lado do Linux e em oposição ao MacOSX. Para informações sobre isso leia o meu post mais recente sobre o assunto.) O Linux, o WindowsNT/XP usam kernels monolíticos com o Linux usando o conceito de módulo para subir e descer servidores (como um microkernel faria) e o Windows usando um monolítico tradicional mas com alta portabilidade usando uma Camada de Abstração de Hardware por baixo do kernel. Assim como nenhum processador de hoje pode ser classificado diretamente como RISC ou CISC, mas sim um misto dessas duas tecnologias não se poderia classificar um kernel de sistema operacional de produção hoje como sendo micro ou monolítico, pois praticamente todos os kernels sobre os quais li usam algum recurso da arquitetura concorrente. A grande razão para isso me parece ser o fato de que um microkernel puro pode perder até 60% do desempenho de um hardware em operação real.)
-Linux é um sistema de estilo monolítico. É um grande passo atrás de volta à 1970. Para mim, escrever um sistema monolítico em 1991 é uma idéia muito pobre.
b)Portabilidade:
-[Tenenbaum descreve a história da Intel, do 4004 ao 80486 e insinua que eles são todos iguais] Nesse meio tempo aconteceram os chips RISC e agora eles estão acima de 100MIPS. Logo estarão à 200MIPS. Essas coisas não vão desaparecer. O que vai acontecer é que esses chips tomarão o lugar da linha 80x86. Acho um erro grosseiro desenhar um sistema operacional para esta arquitetura já que ela não ficará no mercado por muito mais tempo.
(Esse parece ser o maior erro de avaliação do professor. Não só os chips RISC não dominaram o mercado mas quase desapareceram. Os chips tradicionais, como a linha x86 que seria retirada do mercado incorporou muito da tecnologia RISC e não foi substituída por ela. Os MIPS que ele cita são Milhões de Instruções Por Segundo, um referêncial de desempenho de processadores. Os 80486 ficavam perto de 50MIPS, enquanto que os 80686 mais recentes chegam perto de 10.000MIPS)
-Eu devo sugerir que todos aqueles que queiram um sistema moderno e gratuíto procurem por um que use microkernel, portável, como talvez o GNU ou algo do gênero.
(Quando refere-se ao GNU, o professor fala do projeto original do GNU de usar a dupla Mach/Hurd como kernel/servidor. Acontece que o Mach tem um desempenho muito ruim, perto de um kernel monlítico e o Hurd não ficou pronto até hoje. O Linux acabaria por substituir Mach/Hurd na tarefa de kernel do sistema GNU, criando o GNU/Linux, que usamos hoje.)
Linus Torvalds:
-Veja quem ganha dinheiro com o MINIX e quem fornece o Linux de graça. Então vamos falar de hobbies!
(Linus mostra-se ofendido com o fato de Tanenbaum dizer que seu MINIX é apenas um hobby e não uma tentativa real de construir um sistema de verdade. O comentário original parece meio ofensivo à Linus que decide reagir de maneira enérgica, esse é o tom do resto da mensagem.)
-Verdade, Linux é monolítico, e concordo que microkernels são mais bonitos. Mas se o GNU estivesse pronto na última primavera eu nem começaria meu projeto. E se esse parâmetro fosse a única coisa para classificar um kernel como bom ou ruim, eu daria razão a você. O seu MINIX não faz as coisas de microkernel muito bem, tem problemas com multi-tarefa real no kernel.
-O que o Linux faz: ele usa um subset de intruções do 386 que parece maior do que o que os outros kernels usam. Claro que isso torna o kernel difícil de ser portavel, mas deixa seu desenho mais simples. Uma troca aceitável e que tornou o Linux possível em primeiro lugar. E meu código fonte está livre, o que significa que qualquer um pode portar para onde quiser.
Tanenbaum:
-Um sistema de arquivos com multithreading (capacidade de endereçar multiplas escritas/leituras ao mesmo tempo, característica fundamental para os sistemas multi-tarefa domésticos de hoje) é um “hack” de performance. Quando há apenas uma tarefa ativa, que é o caso normal de um PC pequeno, isso não melhora nada e adiciona uma complexidade desnecessária ao código. (O professor critica Linus por implementar esse recurso em seu kernel Linux, mas se o kernel Linux não tivesse essa capacidade não teria sido adotado pelo mercado como foi)
-Eu mantenho meu ponto de que desenhar um kernel monolítico em 1991 é um erro. Seja grato por não ser meu aluno, você não tiraria boas notas por esse desenho :-)
-Meu ponto é que escrever um novo sistema operacional que está amarrado à uma plataforma, especialmente uma tão estranha quanto a da Intel, é baiscamente errado. Escrever um sistema apenas para o 386 em 1991 te dá sua segunda nota ZERO para essa matéria. Mas se você for muito bem no exame final talvez consiga se formar.
(Nota ZERO para o que se tornaria um ícone do software livre e um dos kernels de melhor reputação e desempenho da história da informática? Acho que descobrir porque não gosto muito dos professores da faculdade)
Linus Torvalds:
-Sim, o MINIX é portável, mas você pode reescrever essa frase como “O MINIX não usa nenhum dos aprimoramentos do hardware”, e a frase continuaria sendo verdadeira.
(Linus critica o fato do Minix ser muito portável mas não conseguir usar implementações técnicas das plataformas, como o sistema de paginação de memória do 386, perdendo desempenho por não usar essas características. Isso chama a atenção para uma coisa, hoje em dia os sistemas operacionais buscam uma mistura de portabilidade e uso intensivo dos recursos de hardware. Bons sistemas e programas são aqueles que conseguem usar caracteristicas especiais dos processadores, como as instruções SSE3 da Intel e as extensões de 64-bit da AMD. Há versões distintas do kernel Linux para cara uma dessas plataformas, o Windows XP também, com seu HAL procura sempre adaptar-se ao máximo ao hardware sobre o qual ele rodará. Parece então não ser uma questão de escolher entre portabilidade e uso de recursos de cada plataforma, mas sim buscar uma maneira de encaixar as duas coisas para obter um equilíbrio.)
-Não é verdade que um sistema de arquivos com multithreads seja um “hack” de performance. Quando você escreve um UNIX “obsoleto” você tem automaticamente um kernel multithread: cada processo deve fazer seu próprio trabalho, e você não precisa fazer coisas feias como filas de mensagens para fazer isso funcionar eficientemente (como nos microkernels)
-O kernel Linux é uma minúscula parte de um sistema completo: os fontes têm atualmente 200KB enquanto comprimidos. De fato o kernel Linux inteiro é muito menor que a parte i386 do microkernel Mach> i386.tar.Z da versão atual do Mach tem mais de 800KB comprimidos. Claro que o Mach tem mais recursos que o Linux mas isso ainda deve dizer alguma coisa.
(Linus quer dizer que se ele precisasse reescrever o kernel Linux para outra plataforma naquela data ainda teria menos trabalho do que se alguém quisesse adaptar o kernel Mach para uma nova máquina e discute, com esse argumento, a falta de portabilidade do Linux. De fato hoje o Linux é sem dúvida o kernel que tem versões estáveis para o maior número de plataformas do mercado, mostrando que sua portabilidade é real e exeqüível)
------------Fim das transcrições------------
Em outra mensagem Tanenbaum discute ainda o free-ness do Linux e do software em geral. Mas fica claro no texto que ele leva o uso da palavra free para a interpretação de preço baixo ou gratuíto, não havendo um entendimento ou argumentação dele sobre as liberdades de software. Ele ainda questiona-se por quanto tempo Linus conseguiria manter-se desenvolvendo o Linux quando os desenvolvedores independentes começassem a implementar coisas que ele não gostaria em seu kernel e demonstra não acreditar que o kernel Linux terá uma vida longa ou atinja êxito como um sistema operacional usável.
Eu publiquei esse post para mostrar como, às vezes, pessoas competentes e experientes em assuntos técnicos podem enganar-se quando encontram coisas ainda não vistas, e como boas idéias podem superar conceitos consolidados. No começo dos anos 90 o consenso entre os especialistas em informática era de que os processadores seriam todos RISC, que o x86 morreira, que os sistemas operacionais teriam microkernels e que o UNIX ou o GNU se firmariam como o sistema operacional padrão por todos os lados.
Desde então a Digital morreu e os Power tornaram-se processadores mistos praticamente varrendo do mercado a idéia de processadores RISC puros, a IBM abandonou o Taligent (microkernel universal para todos os seus sistemas operacionais) e os melhores kernels de hoje são mistos de conceitos de microkernels e kernels monolíticos, o x86 é a plataforma #1 em vendas no mundo todo e o Windows domina boa parte do cenário dos sistemas operacionais, deixando o UNIX e suas variantes um pouco atrás.
E no artigo passado eu contei como os testes práticos de um sistema microkernel contra um kernel monolítico mostraram que o microkernel tem realmente um desempenho inferior. São coisas para se pensar. Enquanto isso, recomendo a leitura do ensaio “A catedral e o Bazar” de Eric Raymond e uma passada na Wikipedia para ler sobre os assuntos discutidos aqui: microkernel, Mach, Linux kernel, Taligent, MacOS X e Windows NT. São leituras interessantes e muito explicativas.
Eu já tinha feito essas pesquisas e lido sobre as diferenças nos kernels, e essa sua resenha me fez refletir sobre várias coisas.
Como Henry Ford dizia: "... Nossos melhores sucessos foram devidos a deixarmos os loucos insistirem no que os sábios haviam abandonado."
Eu ainda conheço isso muito na teoria, mas por pura curiosidade vou pegar o código das primeiras releases públicas do Linux e do antigo Minix e dar uma olhada.
E o NetBSD? O NetBSD é extremamente portável mas também é monolítico. Será que ele aproveita tão bem o hardware como o Linux?
Abraços,
Muito boa essa frase do Henry Ford... Olha tem um tempão eu tinha visto um comparativo de performance de BSDs x Linux 2.4 e 2.6. Lembro que o resultado era Linux 2.6 na cabeça... mas não me lembro como havia sido entre os BSDs... boa coisa pra procurar na web...
Mas acho que acabei respondendo sua pergunta com isso... acho que ninguém aproveita tão bem o hardware como o Linux... hehehehe
Grande abraço...
Têm tarefas que o Windows faz melhor e aproveita o hardware melhor, outras o Linux, outras os BSD, o OSX ...
Um exemplo, ripar DVD no Linux não presta, no OSX gasta 1/3 do tempo.
Por favor me envie o link oonde fala disso!
Vejo muita gente falando sobre o conceito de micro kernel, mas nenhum resultado efetivo na prática.
Pros Trolls de plantão, favor ler a história toda e as mensagens originais, ajuda bastante.
Abraços
Para coisas como ripar DVD o "linux não presta" por enquanto. Pois ainda não há bons programas no Linux para fazer muitas coisas. Com bons programas isso pode ser diferente. O Linux tem uma ótima infra estrutura para trabalhar com sistemas de arquivos e com processamento massivo, o que dá boas perspectivas para realizar muitas tarefas, a medida que mais programas de qualidade aparecerem na plataforma poderemos ver o Linux tornar-se uma boa opção para fazer muitas coisas, como edição de mídia, por exemplo. Hoje ele é um sistema muito bom para servidores, como podemos comprovar olhando para a internet, porque bons servidores estão presentes e sabem usar bem os recursos que o sistema oferece.
Malaki: o lance do ATM x Ethernet tem muito a ver com os baixos custos que os equipamentos ethernet atingiram para poder dominar o mercado. Isso também aconteceu com o SCSI x IDE, Rambus x DDR, PC x Mac e outras coisas que conseguiram suplantar padrões técnicos superiores usando preços mais acessíveis, é mercado. Quando alguém com gabarito técnico olha apenas a parte técnica e diz coisas como tal padrão dominará o mercado muitas vezes esquece que custos são talvez a parte mais importante da estratégia de mercado para uma tecnologia.
Juliano: essa análise que eu citei saiu logo que o kernel 2.6 veio para a praça, há muito tempo, vou dar uma pesquisada e posto o link por aqui se eu achar.
Rafael: muita gente trabalha e acredita em microkernel, hoje me parece que kernel monolítico ainda é uma alternativa de melhor desempenho, mas no futuro quem sabe o que pode acontecer? Obrigado pelos elogios.
Aprecio os comentários de todos, inclusive os comentários negativos. Apenas fico chateado com pessoas que passam por aqui e comentam algo apenas, sem deixar nenhum tipo de informação em troca. Afinal trocar informações é o objetivo desse blog. Tenho ciência que todo post que trouxer análises, comparativos ou mesmo minhas impressões pessoais sobre alguma coisa estará sujeito a gerar polêmica, mas isso é normal. Mas gostaria que aqueles que queiram criticar possam sempre fazê-lo com mais argumentos técnicos e dados para que possamos sempre informar-nos uns aos outros sobre nossas opiniões e pontos de vista e ter sempre um debate que será aproveitável para todos.
Obrigado por suas participações e visitas.
Segundo o teste as posições em termos de performance de servidor são: Linux 2.6, FreeBSD, Linux 2.4, NetBSD e OpenBSD, isso para os sistemas daquela época. Não há uma boa razão para atestar que se repetidos hoje esses testes dariam o mesmo resultado. Mas são uma fotografia daquela época e daquelas versões dos sistemas.
Duas coisas à notar: Linux 2.6 e FreeBSD tiveram resultados sempre muito próximos, mostrando que a equipe do FreeBSD tem feito um bom trabalho com seu microkernel. NetBSD e OpenBSD tiveram desempenhos muito ruins, mostrando que o microkernel pode ser uma má opção em termos de performance se você não trabalhar duro sobre ele. Divirtam-se
Eu acharia interessante também se a discussão envolvesse a tecnologia atual de microkernel, o Mach como referência na área é história, ao que parece muitos desenvolvedores tem preferido o que se chama de sistema L4, o próprio Hurd já está usando este tipo de tecnologia e abandonou o Mach.
Se você ler sobre a performance o NetBSD 2.0 está muito melhor que a versão 1.6 do teste que você citou. O autor coloca logo no começo da página: "NetBSD: now scales better than even FreeBSD 5!", aqui você pode ver os gráficos de escalabilidade do NetBSD 2.0
Eu disse antes: não acredito que o Windows seja um sistema microkernel (conforme a arquitetura orienta) porque é só a palavra da Microsoft nesse favor (e nisso eu não confio nada mesmo) e porque seu péssimo desempenho multi-tarefa não condiz com o razoável para um sistema de arquitetura microkernel. Faça o teste! Baixe o Freesbie ou o FreeBSD (que é microkernel mesmo), instale e interrompa o fluxo de dados em um sistema de arquivos desligando a energia de um HD durante a cópia de uma imagem ISO por exemplo, faça o mesmo com um Windows e me diga se você acha que são kernels de mesma arquitetura, são dois comportamentos totalmente distintos! O FreeBSD continuará operando normalmente, o Windows irá ficar paralisado, talvez você até veja a Tela Azul da Morte...o comportamento do WindowsXP parece-se muito mais com o do DOS do que com o do FreeBSD. A arquitetura cliente/servidor de um microkernel deixa todo o processamento a cargo dos servidores, então uma interrupção de fluxo jamais poderia paralizar um sistema microkernel e isso ACONTECE no Windows. Quer mais? Uma das grandes vantagens do microkernel é poder parar e reiniciar servidores sem precisar de boot, porque então quando eu instalo um novo driver de placa de video o Windows precisa reiniciar o sistema? Um microkernel deveria ser capaz de fazer isso on the fly, e o Windows não faz. TODAS essas coisas me fazem acreditar que o Windows não é um sistema que use microkernel, não só o fato de não poder ver seu código, são indícios muito claros e consistentes e mais confiáveis do que a publicidade da Microsoft, com certeza. Mas é claro... são apenas indícios... posso estar errado, e se algum dia alguém me provar que o Windows é microkernel tudo bem, mas como ninguém pode fazer isso, continuo com minhas desconfianças ;-)
Quanto ao L4, de fato é um microkernel que segundo o que li resolve boa parte dos problemas de desemepnho da arquitetura, não sei que ligação haveria, se é que haveria, com o FreeBSD. Falei bastante do Mach pois foi sua versão 3 que foi usada como base para o MacOSX. Seria legal ver alguns testes de desempenho pra ter noção de o quanto o L4 é mais rápido que o Mach. Sobre o teste de desempenho, deixei claro que ele é de 2003 e que não representa a realidade de hoje, aliás o próprio autor admite ter sido injusto com o OpenBSD por ter usado sua versão stable no teste. Foi apenas o retrato daquela época com aquelas versões de sistemas operacionais.
o autor está de parabéns pelo artigo, coisas de qualidade como esta é que nos ajuda a tornarmos cada vez mais inteligentes.
muito bom, nota 10.
Daniel Semblano
Está de parabéns.
Vi em um comentário uma citação que o MacOS X é melhor para ripar um DVD do que um Linux. Acredito que este fato dá-se pelo hardware da apple ser excelente com cálculos e pontos flutuantes, motivo também pelo qual é muito usado em edição de video e não pelo S.O. da apple.
- O GNU/Hurd já está operacional (veja o Debian GNU/Hurd).
- O Próprio Linus na próxima versão do kernel estará tentando fazer um pseudo-microkernel.
- O Conceido do micro-kernel é um conceito meio difícil de implementar, pois como você conseguirá um paginador de memória e um escalonador de processos se um precisa do outro? Por isso que no início o Linus optou por monolítico...
- O Minix nunca teve o intuito de ser portável e free (apesar que eu acho que ele devia ser GPL) pois sempre foi a idéia do Tanenbaum de ser simples e apenas para esino.
- Veja que quando o Tanenbaum disse em amarra o Linux à uma plataforma é besteira. Agora pense, por mais que o GNU/Linux rode mais em x386, o GNU/Linux está em várias arquiteturas, então foi "implementado" o que o Tanenbaum discute neste ponto...
Por último eu acho que os dois foram grandes contribuidores para a ciência dos Sistemas Operacionais. Cada qual com a sua maneira.
[s
Inclusive mudaram o rumo do minix, em breve irá ter o lançamento do 3.0, para competir com Linux e BSDs.
http://groups-beta.google.com/group/comp.os.minix/browse_thread/thread/67b6452840766183/7b869e684aa7d3d5?lnk=raot#7b869e684aa7d3d5
Segurança também é importante.
http://www.oreillynet.com/pub/a/network/2005/09/12/alan-cox.html
Anônimo: O Minix não é GPL. Seu código é aberto e pode ser modificado, mas seu sistema de licenciamento é proprietário. Seu dono, Tanenbaum, já disse e continua dizendo que o Minix não irá tornar-se um sistema de produção comercial, que continuará simples e básico para que seus alunos possam entendê-lo e estudar com ele. Assim mudar o rumo e criar um sistema que realmente possa ser um alternativa à Linux ou BSD é até possível, mas não poderia ser vendido comercialmente e poderia sofre limitações caso o próprio Tanenbaum quisesse impô-las.
Não podemos confundir Software de Código Fonte Aberto (OSS) e Software Livre (FS) são duas coisas distintas e que funcionam, principalmente no aspecto jurídico, de maneiras distintas.
system free of the GPL. MINIX is and will continue to be released
under the BSD license.
We are also looking for a name and a logo. Current OSes have penguins,
longhorns, tigers, daemons, and whatnot as symbols. Maybe we need an
animate symbol too.
My group is now working on a new and much improved MINIX 3. This is a
serious effort, with two experienced, professional programmers working
full time on it now, not to mention various students. The goal for the
first release is the end of October 2005. The main goals of MINIX 3
are to be small, reliable and secure. Numerous other improvements are in
the works including longer file names, bigger memories and disks, more
real-time friendly, better security, etc.
I see a serious 'market' for MINIX 3 in several areas, among them:
1. Education, as has always been the case. The book is being updated.
2. Low-end PCs. Various organizations are working on PCs that will
sell for under $100 in India and China and will be powered by
batteries recharged by a crank, solar cells, or other sources of
power where there is no electricity. An operating system for these
limited computers must be small, resource efficient, and reliable.
3. Embedded systems such as DVD players, digital cameras and camcorders,
TV sets, cell phones, and the like often have an operating system
with multiprogramming and a hierarchical file system. They often need
to be highly modular. Some are real time.
http://groups.google.com/group/comp.os.minix
Acho que todo mundo da área já leu o livro "Sistemas Operacionais - Projeto e Implemantação" do Tanenbaum e leu também a discussão do linux X Tanenbaum, mas sua argumentação está concisa e esclarecedora.
A comunidade agradece.
<< Home