sexta-feira, 5 de outubro de 2012

A Alvorada do Haiku OS

Publicamos hoje outro artigo traduzido, desta vez escrito por Ryan Leavengood, tesoureiro da Haiku Inc. e um dos principais desenvolvedores deste sistema operacional. Diferentemente do artigo anterior, este apresenta um ponto de vista mais de quem conhece profundamente o sistema, inclusive dando uma aula incrível sobre threads que me lembrou os bons tempos das aulas de Arquitetura dos Sistemas Operacionais. Este é um artigo para ser lido e relido umas trocentas vezes... ;D


A alvorada do Haiku OS

Como uma equipe de voluntários trouxe de volta um sistema operacional falido 

Por Ryan Leavengood / maio de 2012
(tradução nossa)

Era verão de 2001 e o programador de computadores Michael Phipps tinha um problema: seu sistema operacional favorito, BeOS, estava para ser extinto. Ter uma ligação emocional a uma pedaço de software pode lhe parecer estranho, mas para Phipps e muitos outros (inclusive eu), o BeOS merecia. Ele rodava incrivelmente rápido no hardware de sua época; tinha uma interface de usuário limpa e intuitiva; e oferecia um rico, divertido e moderno ambiente de programação. Em resumo, nós o achávamos muito superior a todos os outros sistemas operacionais para computador disponíveis. Mas a companhia que tinha criado o BeOS não poderia mantê-lo no mercado e seus ativos, incluindo o BeOS, estavam sendo vendidos a um competidor.
Preocupado se, sob um novo proprietário, o BeOS teria uma morte lenta e insuportável, Phipps fez a única coisa lógica que pôde pensar: ele decidiu recriar o BeOS completamente do zero, mas como código aberto. Um sistema de código aberto, ele raciocinou, não pertence a nenhuma companhia ou pessoa, então ele não pode desaparecer apenas porque uma empresa vai à falência ou os desenvolvedores principais foram embora.
Agora se você já tiver programado antes, saberá que criar um sistema operacional é um trabalho enorme. E esperar que as pessoas o façam sem pagá-las é uma maluquice. Mas para as dezenas de desenvolvedores voluntários que tem trabalhado no Haiku, tem sido um trabalho de amor. Nos 11 anos desde que o projeto começou, nós lançamos três versões alfa do software e este mês esperamos lançar o quarto e último alfa. Depois disso nos moveremos para o estágio beta, do qual esperamos sair no fim do ano, seguido pelo primeiro lançamento oficial, conhecido como R1, no início de 2013.
Mesmo agora, qualquer pessoa pode instalar e rodar o sistema operacional em um computador baseado no Intel x86. Muitos daqueles que o fizeram comentam que sentiram as versões alfa do Haiku tão estáveis quanto a versão final de qualquer outro software. De fato, de todos os muitos sistemas operacionais alternativos hoje em atividade, o Haiku é provavelmente o melhor posicionado para desafiar sistemas operacionais dominantes como Microsoft Windows e Mac OS. Para usuários e desenvolvedores, a experiência de rodar o Haiku é incrivelmente consistente e, como o BeOS, ele é rápido, responsivo e eficiente. Além do mais, o Haiku, diferentemente de seus mais estabelecidos competidores, é extremamente bom em enfrentar um dos maiores desafios da computação moderna: microprocessadores de núcleo múltiplo. Vamos dar uma olhada no porque isso acontece, como o Haiku surgiu e se o sistema operacional rodando no seu computador realmente funciona tão bem como deveria.
Primeiro, uma pequena história. Em 1991, um francês chamado Jean-Louis Gasset e muitos outros ex-empregados da Apple fundaram a Be Inc. porque queriam criar um novo tipo de computador. Em particular, eles buscaram escapar da armadilha de retro-compatibilidade que testemunharam na Apple, onde cada nova versão de hardware e software tinha que levar em conta anos de sistemas legados, verrugas e tudo. O primeiro produto da companhia foi um computador de mesa chamado de BeBox. Não encontrando outro sistema operacional que fosse de encontro a suas necessidades, os engenheiros da Be escreveram o seu próprio.
Lançado em outubro de 1995, o BeBox não durou muito. O BeOS, por outro lado, rapidamente encontrou um pequeno mas leal séquito e logo estava rodando em PCs baseados no Intel x86 e clones do Macintosh PowerPC. Naquele momento a Apple já considerava o BeOS como um substituto do seu próprio sistema operacional. A companhia eventualmente lançou uma versão despojada do BeOS para aparelhos de Internet, mas isso não foi o suficiente. Em 2001, a Palm adquiriu a Be por divulgados US$ 11 milhões.
Assim que a venda da Be estava sendo finalizada, Phipps lançou o projeto Haiku, que na época era conhecido como OpenBeOS (o nome mudou poucos anos depois).
Desde o princípio, Phipps decidiu que o foco singular do projeto seria ser replicar o último lançamento oficial do BeOS, conhecido como R5. Em retrospectiva, esse foi um golpe de gênio. Esforços em código aberto, geralmente feitos por diversão no tempo livre das pessoas, pode algumas vezes fracassar ou se desviar sem mesmo lançar algo tangível. O Haiku evitou esse destino porque todos os seus desenvolvedores acreditavam no objetivo de replicar o R5.
Ainda assim, Phipps e aqueles que se juntaram a ele tiveram seu trabalho repartido entre eles. Um sistema operacional é extremamente complexo, especialmente um tão abrangente como o BeOS, do qual várias camadas e aplicativos tinham sido projetados desde o início para trabalhar juntos. Alguns dos engenheiros mais talentosos em Silicon Valley tinham desenvolvido o software ao longo de mais de dez anos. Recriar tal sistema com uma equipe formada unicamente por voluntários trabalhando no seu tempo livre era uma ideia maluca. Mas foi assim que o Linux surgiu, bem como os softwares GNU da Free Software Foundation, do GNU C Compiler ao GnuCash, um programa de contabilidade.
Bem como as camadas de um bolo, um sistema computacional consiste do hardware, um sistema operacional que gerencia o hardware e os aplicativos que rodam dentro do sistema operacional, tais como navegadores Web, editores de documentos e coisas divertidas como jogos. O sistema operacional é também o meio pelo qual os programadores dão instruções ao hardware.
Por sorte, o BeOS foi escrito de maneira modular, fazendo-o relativamente simples de desenvolver, testar e então substituir cada componente do BeOS com seu equivalente em código aberto. Umas poucas partes do BeOS já tinham sido lançadas pela Be como código aberto, tais como o Tracker e o Deskbar, os quais são equivalentes ao Explorer e a Barra de Tarefas do Windows e ao Finder e Dock do OS X. Um dos primeiros blocos de código que os voluntários abordaram foi o kit do protetor de tela, o qual tinha uma função muito simples mas também um monte de peças móveis. Dentre outras coisas, ele tinha que constantemente monitorar a atividade no teclado e no mouse, carregar as definições da proteção de tela nos momentos certos e pedir a senha quando a proteção de tela é desligada. Uma vez que todas as peças haviam sido bem fixadas, Phipps substituiu o protetor de tela do BeOS com a versão em código aberto e para surpresa e alegria de todos, ele funcionou. Mais importante, foi uma prova de conceito que mostrou aos desenvolvedores que eles podiam substituir cada módulo no BeOS e saber que seria totalmente compatível.
Em 2008 atingimos um marco. O Haiku, como qualquer peça de software, é escrito em código fonte; para convertê-lo para instruções binárias que o computador possa processar, você precisa compilá-lo. A descoberta foi que finalmente fomos capazes de compilar o código fonte do Haiku a partir do próprio sistema; os programadores referem-se a esta característica como “self-hosting”. Este passo é crítico no desenvolvimento de qualquer sistema operacional porque, sem ele, haverá sempre dependência de outros sistemas.
Mesmo com o desenvolvimento em curso, Phipps estava trabalhando para criar um lar organizacional para o Haiku, finalmente fundando a Haiku Inc. como uma organização sem fins lucrativos em 2003. Além de supervisionar o projeto e receber donativos, a Haiku Inc. detém os direitos autorais e as marcas registradas do sítio web do Haiku, da logomarca e, naturalmente, do código fonte. Todo o código fonte do Haiku é agora licenciado sob o que é chamado de Licença MIT, a qual permite o uso integral e gratuito do código por praticamente todo mundo, incluindo companhias privadas e outros projetos de código aberto.
Naturalmente, o time do Haiku também está consciente de não infringir as patentes do BeOS, as quais ainda estão vigentes. Em geral, nós mantemos uma relação amigável com a companhia japonesa de software Access, que agora detém os direitos do BeOS; por exemplo, a companhia permitiu-nos publicar a documentação do BeOS em nosso sítio web e nunca contestou quaisquer dos nossos esforços para replicar a tecnologia do BeOS. Poderia a Access ou alguma outra corporação que acredite ter o direito ao nosso código escolher processar um pequeno projeto de código aberto como o nosso? Financeiramente, não faria muito sentido e geraria também muita publicidade ruim. Mas vamos ter que esperar pra ver. Dado o atual estado frenético de litígios de propriedade intelectual nos Estados Unidos e outros países, nenhum projeto de software pode ser considerado completamente imune a problemas legais.
Em 2007, Phipps anunciou que estava deixando o projeto por motivos pessoais e um novo grupo de pessoas assumiu o comando da Haiku Inc. Assim como Phipps tinha antecipado no início, a perda de um líder não condenou o projeto. Eu sou atualmente o tesoureiro e, junto com os outros executivos da Haiku Inc., faço parte da sua diretoria. Mantivemos o ritmo e na última reunião em Dusseldorf, Alemanha, no início de abril, os desenvolvedores do Haiku trabalharam na iminente versão alfa.
Neste ponto, nós temos replicado o BeOS R5 tão precisamente que os aplicativos BeOS legados, agora com mais de 10 anos de existência, podem rodar no Haiku. Quando o projeto começou, muitos pensaram que este tipo de compatibilidade seria impossível. E em muitas áreas chave, o Haiku superou seu antecessor. Por exemplo, o Haiku suporta mais idiomas que o BeOS e é mais fácil de internacionalizar de outras maneiras também. Ele também pode manusear placas de vídeo modernas, processadores mais novos, acesso à rede sem fio e suporta mais memória do que o BeOS.
E em termos de programação, o Haiku torna muito fácil o desenho de interfaces de usuário para aplicativos, porque ele tem uma ferramenta de layout embutida que permite colocar automaticamente ícones e outros dispositivos na tela. Com o BeOS, por exemplo, os desenvolvedores tinham que especificar cada mínimo detalhe do layout e alinhar à mão botões com caixas de verificação. Estas e outras melhorias tem permitido ao Haiku permanecer relevante, apesar do ritmo ultra-rápido das inovações em hardware e software.
Mesmo assim, você pode estar se perguntando: com Windows, Mac OS X, centenas de versões do Linux e numerosos sistemas operacionais móveis, o mundo realmente precisa do Haiku?
Sim, precisa, por muitas razões. Tal como na Natureza, vírus de computador florescem em uma monocultura; e porque tantos de nós usam computadores Windows, seus vírus  encontram abundância de vítimas. Além disso, se um sistema operacional tem um monopólio, seus criadores têm poucas razões para melhorar seu software (a concorrência do navegador Mozilla Firefox é, afinal, em grande parte o que levou a Microsoft a atualizar o Internet Explorer). E a diversidade promove interoperabilidade porque obriga os desenvolvedores de software a criar código que roda bem com outros sistemas. Quando existe muito pouca concorrência, não existe incentivo para fazê-lo.
Mas o Haiku faz mais do que apenas expandir o conjunto genético dos sistemas operacionais. Uma das primeiras coisas que as pessoas percebem sobre ele é que não se parece em nada com o Windows, OS X ou Linux. Ele é único. O Linux, por exemplo, é baseado em torno de um núcleo – chamado de kernel – que foi originalmente desenhado para uso em servidores e apenas mais tarde modificado para sistemas desktop. Em consequência, o kernel, por vezes, dá pouca atenção à interface do usuário, o que os usuários Linux experienciam como atrasos irritantes quando seus computadores estão fazendo coisas especialmente pesadas, como queimar um DVD ou compilar código. O kernel do Haiku sempre foi voltado para sistemas desktop e por isso sempre dá prioridade a qualquer coisa que esteja acontecendo na sua interface gráfica de usuário.
Entre o kernel e a interface gráfica de usuário está o que é conhecido como interface de programação de aplicativos ou API. Uma API é o que os desenvolvedores de aplicativos usam para acessar outros sistemas de software e o desenho daquela API pode afetar tanto os desenvolvedores como os eventuais usuários de seus softwares. O Haiku possui apenas uma API. O Linux, em contraste, possui centenas de APIs e sobre elas muitas interfaces de usuário, então você não pode apenas trocar suavemente de uma versão do Linux para outra. A versão que você utiliza pode alterar significativamente a aparência da tela do seu computador, o modo como os programas inicializam e executam e várias outras coisas, tudo o que torna bastante difícil desenvolver software que sempre funciona  bem em todos os sistemas Linux.
Todos os componentes do Haiku são desenhados para trabalhar juntos desde o início; isso inclui seus aplicativos, como o tocador de mídia e o navegador Web. Seu código fonte até usa um estilo consistente, algo que os desenvolvedores verdadeiramente apreciam, porque lhes permite chegar rapidamente à velocidade. Um desenvolvedor escrevendo código para o Haiku pode estar seguro de que ele irá funcionar e agir da mesma maneira em todas as instalações do Haiku. Embora o Haiku seja de código aberto, sempre existirá apenas uma versão oficial. Tudo isso combina para oferecer uma experiência de usuário muito consistente.
O que realmente destaca o Haiku, entretanto, é sua eficiência e velocidade. Em meu computador de três anos de idade, o Haiku inicializa de uma partida a frio em 10 a 14 segundos e quando em execução ele utiliza cerca de 170 megabytes de RAM. Comparado com outros sistemas operacionais, é fantástico ao maximizar os recursos computacionais disponíveis. O Haiku demonstra ser rápido e responsivo mesmo quando rodando em sistemas antigos que seriam considerados obsoletos por não poderem mais lidar com a ineficiência e inchaço dos outros sistemas operacionais.
Muito da eficiência e velocidade do Haiku é um resultado direto do seu legado BeOS. O BeOS foi desenhado desde o início para fazer pleno uso de threads, o que em termos de computação representa sequências de execução de código. Assim como um pano consiste de muitos fios (threads) tecidos juntos, um sistema operacional é feito de threads e eles têm de partilhar tempo no processador. Geralmente, existe um thread para cada aplicativo e um também para a interface de usuário do sistema operacional. O problema é que a interface de usuário em particular necessita mais do que um thread. Aquelas mensagens “o aplicativo não está respondendo” no Windows e a “bola de praia da morte” (spinning pinwheel) no OS X – que a maioria de nós experimentamos com alguma regularidade e frustração – são o resultado direto de usar apenas um thread para a interface do usuário. Quando aquele thread fica muito carregada de trabalho ou tem outro problema (como uma rede lenta), a interface inteira do aplicativo fica travada.
Isso não acontecia no BeOS e não acontece no Haiku. Onde o BeOS seguiu à frente dos outros sistemas operacionais de sua época (e onde o Haiku está ainda á frente dos sistemas operacionais contemporâneos) é que cada aplicativo individual utiliza muitos threads. O núcleo do próprio aplicativo tem um thread e cada janela que o aplicativo cria tem um thread. Embora isto possa tornar o código um pouco mais complicado para escrever, o resultado é que os aplicativos quase nunca atrasam ou travam.
Este sistema altamente entremeado significa que o Haiku pode fazer maior uso de múltiplos processadores ou núcleos de CPU, que são agora onipresentes. O kernel Haiku permite a cada thread rodar em seu próprio núcleo ou processador – mesmo threads dentro do mesmo aplicativo. Adicionar mais threads para outras tarefas, como recuperar dados de uma rede, é também simples. Outros sistemas operacionais fazem uso de núcleos múltiplos apenas quando executando muitos aplicativos ao mesmo tempo ou quando um aplicativo em particular tem um código especial para multithreading adicionado a ele. Mas este código é difícil de escrever, então a maioria dos aplicativos não o possuem.
O Haiku simplifica o processo de escrever código para multithread pela ocultação da maioria das interações de threads com as quais o desenvolvedor não precisa se preocupar. Uma grande parte do que faz este trabalho é o uso extensivo de message passing. Digamos que o Thread A e o Thread B em um aplicativo querem recuperar uma parte dos dados do Thread C. Em vez de acessar diretamente aqueles dados, os Threads A e B passam cada um uma mensagem, as quais são colocadas em uma fila central de mensagens e distribuídas com uma ordem específica. Sem esse mecanismo, os dois threads iriam tentar acessar o Thread C simultaneamente, gerando um travamento fatal, no qual ambos esperariam indefinidamente. Com o Haiku, mensagens podem ser passadas dentro de um aplicativo e também de outros aplicativos. O código de message-passing do Haiku então gerencia todas as complexidades do threading sem que o desenvolvedor precise fazê-lo.
A principal razão pela qual o BeOS utilizou threads múltiplos foi porque o BeBox foi concebido como uma plataforma de mídia. Um dos motes de marketing do BeOS, de fato, era “the media OS”. Embora isso possa ter sido um pouco de exagero, o sistema era muito bom ao lidar com multimídia. Em uma demonstração típica do produto, um BeBox executava dezenas de diferentes vídeos ao mesmo tempo, sem nenhum atraso ou perda de quadro, enquanto o sistema ainda permanecia responsivo. A eficiência do sistema também permitia baixa latência em processamento de áudio. Enquanto o Haiku ainda precisa de trabalho nessas áreas, está bem à frente de muitos outros sistemas.
Outra vantagem que o Haiku tem sobre outros sistemas operacionais é que ele faz uso extenso de um sistema de arquivos semelhante a um banco de dados, o qual permite a qualquer arquivo ter vários atributos associados a ele. Estes atributos podem ser indexados e consultados exatamente como em um banco de dados contemporâneo. Por exemplo, cada mensagem de e-mail no Haiku é arquivado junto com atributos tais como o assunto, o nome do remetente e endereço, e o nome e endereço do destinatário. A partir do gerenciador de arquivos do sistema operacional, conhecido como Tracker, você pode pesquisar por quaisquer daqueles atributos. Os atributos também permitem extrair as informações da música a partir de arquivos MP3 e então organizar e pesquisar facilmente sua biblioteca musical através do Tracker. Entradas no livro de endereços do Haiku, conhecido como arquivos People, consistem quase que inteiramente de atributos.
Ter seu sistema operacional a organizar seu correio eletrônico e livro de endereços oferece uma enorme vantagem: você não mais ficará amarrado a apenas um programa para gerenciar seu correio e contatos. Qualquer pessoa que tenha tentado extrair velhos e-mails de um inchado arquivo de correio do Microsoft Outlook irá entender a beleza desta abordagem.
Em vez de ter seu correio trancado em um formato proprietário que é acessível a partir de apenas um programa, o Haiku permite a você utilizar qualquer programa que desejar – você ainda pode utilizar múltiplos programas no mesmo conjunto de correios. Similarmente, os arquivos People do Haiku podem ser editados e gerenciados por vários programas e podem ainda ser editados de dentro do Tracker. Nenhum outro sistema operacional implementou com tamanho sucesso um sistema de arquivos semelhante a banco de dados.
Por todas as suas capacidades, ao Haiku falta ainda algumas coisas importantes que os usuários vem esperando. Por exemplo, a maioria dos sistemas operacionais de hoje têm interfaces que são aceleradas por hardware. O que permite gráficos extravagantes como sombras das janelas, bordas transparentes e miniaturas de conteúdos para serem tratadas de uma forma rápida e eficiente utilizando placas de vídeo. Usuários dos sistemas operacionais dominantes também tem um largo conjunto de aplicativos à escolha. O Haiku neste momento é limitado a poucos aplicativos criados especificamente para ele ou que sobraram do BeOS.
E como outros sistemas operacionais de código aberto, o Haiku sofre da falta de drivers de hardware. Placas de vídeo modernas, impressoras e outros componentes são complicados – eles são como computadores em miniatura à sua maneira e requerem complexas peças de software, chamados drivers, para funcionar. O driver age como uma ponte entre o sistema operacional e o hardware. Mas nos dias de hoje existem tantos tipos, marcas e modelos de hardware que é difícil para os desenvolvedores de código aberto acompanharem.
Felizmente, o Haiku pode criar a partir do trabalho já feito pelos milhares de desenvolvedores que trabalham no Linux, FreeBSD e outros sistemas operacionais de código aberto. O Haiku já faz uso da rede do FreeBSD e drivers de rede sem fio através de uma interface de tradução especial. Também está em curso o trabalho de incorporar o novo sistema Gallium3D, o qual parece ser o futuro para drivers de vídeo no Linux.
Além do mais, muitos dos pontos fortes do Haiku provavelmente nunca serão acompanhados pelos principais sistemas operacionais, ou pelo menos não tão cedo. Aplicativos Linux não são projetados para usar multithread na mesma medida do Haiku e, portanto, não podem tirar máximo proveito do moderno hardware multicore. Com o lançamento do Snow Leopard do seu OS X há dois anos atrás, a Apple adicionou uma nova tecnologia, chamada Grand Central Dispatch, que torna mais fácil para os aplicativos utilizar threads múltiplas. Mas existe ainda apenas um thread para a interface de usuário da aplicação, então a “bola de praia da morte” permanece.
O último lançamento do Windows 7 é uma grande melhoria sobre seu antecessor, mas ele ainda tem muitas questões, como a inconsistência de interface generalizada e sua simples sobrecarga de informação. O painel de controle sozinho é o bastante para causar dor de cabeça ao usuário. O Windows é enorme, também: uma instalação pelada do Windows 7 Ultimate irá consumir 20 gigabytes de armazenamento. Ainda que você inclua as dezenas de aplicativos livres que vem com o Haiku, instalar o sistema operacional irá custar a você apenas cerca de 700 MB – um trigésimo do espaço requerido pelo Windows 7. E quanto a ser um sistema livre e aberto, nem Windows nem Mac OS nunca vão ser.
Finalmente, o Haiku representa uma forma diferente de ver seu computador pessoal. Se você acha que software não deveria ser cheio de bugs, incompatibilidades e ineficiências, se você odeia ser forçado a trocar seu hardware e software a cada poucos anos porque “atualizações” os tornam obsoletos, e se você acha que a ideia de usar um sistema operacional que é rápido, responsivo e simples é refrescantemente nova e atraente, então talvez, apenas talvez, o Haiku seja para você.
Este artigo apareceu originalmente impresso como “The Dawn of Haiku”.

Sobre o autor
Ryan Leavengood é um consultor de informática em Boynton Beach, Flórida, que se especializou em desenvolvimento de sítios web com Ruby on Rails. Ele começou a se envolver no esforço open-source para criar o sistema operacional Haiku em 2003 e é agora o tesoureiro do grupo. Nenhum sistema operacional é perfeito, ele observa, mas “alguns são realmente imperfeitos. Eu percebi que qualquer sistema operacional com o qual trabalhei não podia ser pior do que aquele que eu já estava usando”. Quando Leavengood não está programando, ele e sua esposa, Francesca, cuidam de seus quatro gatos, um São Bernardo e um jardim de plantas nativas da Flórida.

Nenhum comentário:

Postar um comentário