RenatoRibeiro Infraestrutura Unix. Autor: Renato Ribeiro e Patrick Tracanelli Em sua documentação oficial, a Apple aponta que o kernel do OS X (coração do sistema operacional) é construído com base nos sistemas BSD Unix e Mach. Essa implementação abrange os recursos primários dos sistemas de arquivos, serviços de rede, gerenciamento e identificação de usuários e grupos do sistema. A camada de segurança do OS X é formada pelo subsistema BSD Unix, garantindo que as políticas de segurança sejam imperativamente respeitadas em todos os aspectos do sistema (arquivos, processos, rede e memória). Do outro lado, o Mach fica responsável pelo gerenciamento de memória, controle de threads, gerenciamento de hardware e comunicação entre processos. Parecem duas “almas” trabalhando em conjunto, um kernel híbrido formando o coração do OS X e isso é fundamental para a segurança do sistema. Para que possamos compreender como a Apple chegou até o mundo Unix, convidei o meu amigo e sócio Patrick Tracanelli, um dos maiores conhecedores sobre BSD no Brasil, para compartilhar conosco um pouco da história e do seu conhecimento técnico sobre o assunto. Este artigo faz parte da série "Segurança no mundo Apple" publicado no MacMagazine em 01/03/2012. Mais informações em http://www.renatoribeiro.me 1 RenatoRibeiro Quando Steve Jobs saiu da Apple, em maio de 1985, oficialmente os argumentos de John Sculley para convencer a diretoria da empresa eram problemas financeiros e fracassos em projetos recentes, como de vendas quase insignificativas do Apple Lisa alinhados à queda na aceitação de sistemas Mac. No entanto, os desentendimentos precediam os fatores de negócio, e iniciavam-se na parte técnica. Jobs estava descontente com o estado dos Macs e seu sistema, e insistia que eles deveriam assumir uma personalidade mais “Unix”. Essa ideia era muito bem aceita por parte da equipe de desenvolvimento da Apple e má vista por outra parte e alguns gestores, como Sculley. Foi só recentemente que uma passagem da biografia autorizada de Jobs indicou consistentemente que a ideia de tornar o Mac mais “Unix” foi um dos grandes estopins para desentendimento de Jobs com Sculley e a diretoria. O resultado disso, sabemos, foi a saída de Jobs da Apple, o que abriu margem para novos empreendimentos do gênio da Maçã. Além de sua relação com Hollywood por meio da Pixar, Jobs criou a NeXT Computer, empresa que passaria a criar hardware e sistema operacional de grande poder de processamento matemático, com foco inicialmente no mercado acadêmico que sempre teve grandes demandas de poder computacional para simular estudos e cálculos complexos. Os computadores da NeXT mostraram-se, depois, adequados a processamento gráfico de grande desempenho, como efeitos gráficos e animações em filmes e comerciais de TV. Na NeXT, Jobs colocou em prática seus planos e, junto aos computadores da companhia — incluindo o famoso NeXTcube —, foi criando um sistema operacional, o NeXTSTEP. O NeXTSTEP juntou, em um único sistema, as características Unix outrora planejadas e outros recursos. O sistema passou a ser fundamentado em um kernel de arquitetura microkernel, o Mach. Este, por sua vez, é um kernel criado na Universidade de Carnegie Mellon, cujo objetivo original era formar um sistema Unix completo, livre da licença comercial da AT&T; para isso, o conceito original do Mach é um kernel rodando sob uma base (userland, aplicações, bibliotecas, etc.) BSD, já que o BSD Unix em versões antes do 4.4-BSD Lite2 dependia da licença do AT&T Unix (comercial) para ser utilizado. Então o Mach, em uma base BSD, incorporando do kernel BSD as tecnologias relevantes, criadas pela Universidade de Berkeley (onde o BSD foi criado), passou a dar origem ao NeXTSTEP dentro da NeXT. Portanto, a inspiração original do Mach foi incrementada no NeXTSTEP que passava então a ser um sistema de base BSD (userland), kernel Mach mas também kernel BSD. Devido à natureza híbrida do novo sistema e monolítica do kernel BSD, o microkernel Mach passou a poder se comunicar independentemente (como originalmente) mas registrar-se no kernel monolítico BSD, de forma similar a módulos e extensões de kernel (chamados kext no OS X, isto é, kernel extensions), o que faz com que o microkernel Mach cumpra as exigências de segurança do BSD. Mais tarde isso seria melhorado, com a adoção dos Kernel Entry Points BSD no Mach (projeto TrustedBSD) permitindo componentes imperativos de controle de acesso (MAC – Mandatory Access Control) do BSD impor controles também no Mach. Junto a essa arquitetura Unix, o NeXTSTEP trouxe display em PostScript e um subsistema de janelas gráficas, junto a uma base de desenvolvimento fundamentada em kits de orientação a objeto e uma nova linguagem: Objective-C. Essa plataforma computacional também foi a base para a criação da última dentre as principais tecnologias internet, a Web. À época já tínhamos correio eletrônico, DNS (criados em Berkeley, BSD), FTP, Gopher, etc. Mas foi só em 1990 que Tim Berners-Lee, em um NeXTcube com NeXTSTEP, criou o primeiro servidor HTTP e o primeiro navegador, batizado de WorldWideWeb (dando origem à sigla WWW). A alma da web, o HTML, foi baseado no Textclass da NeXT. Em 1997 a Apple adquiriu a NeXT, com interesse inicial no sistema operacional. Naquela época o BSD já era livre (open source) e rodava em plataformas abertas. Então a ideia era trazer pra Apple algo parecido ao que a NeXT tinha no Este artigo faz parte da série "Segurança no mundo Apple" publicado no MacMagazine em 01/03/2012. Mais informações em http://www.renatoribeiro.me 2 RenatoRibeiro NeXTSTEP, com base no NeXTSTEP porém novo e melhor. Os componentes Mach foram reaproveitados do NeXTSTEP, mas a base BSD deu lugar à base FreeBSD, um BSD mais moderno, livre, com uma licença mais amigável e que tinha desenvolvedores originais do BSD Unix. A Apple e seu Mac começou a retomar forma após lançamento do iMac com um novo sistema, o Mac OS 9. Ele foi uma tentativa — algumas características Unix passaram a ser incorporadas, mas sem muito sucesso: o Mac OS 9 era arcaico demais para incorporar aquela tecnologia. Jobs resolveu matar o Mac OS como era conhecido, e então decretou o fim do Mac OS 9. Paralelamente a isso, deu-se início à criação de um novo sistema operacional dentro da Apple, um sistema naturalmente “evolucionário”, batizado inspiradamente de Darwin. Este era um fork do FreeBSD, com características do kernel Mach herdadas do NeXTSTEP, com um kernel monolítico integrado agora FreeBSD, e toda a base (userland, bibliotecas, etc.) FreeBSD e algumas vezes, NetBSD. Trechos do NetBSD foram inicialmente utilizados em aplicações da base para a arquitetura PowerPC, típica à época dos iMacs. O Darwin passaria a ser um sistema baseado no FreeBSD, com heranças Mach do NeXTSTEP, e a Apple nessa base estável, sólida e comprovada, focaria seu desenvolvimento no “diferencial” Apple: o kernel adotou o “Core Graphics” e “Core Audio”, a interface gráfica incorporou características NeXTSTEP incluindo o Dock, mas também a nova interface Aqua, bibliotecas como Cocoa e outros recursos de usabilidade e user-feeling que tanto diferenciam a Apple. Por trás disso tudo, o coração BSD, com artérias Mach. Isso alinhava-se com outra intenção de Jobs: a troca de arquitetura, sair de PowerPC e ir para Intel. Só hoje, após ler a bibliografia de Jobs, sabemos que ele planejou a longo prazo, escolhendo como base um sistema focado em arquitetura Intel, sem se importar em ter que fazer adaptações temporárias para rodar também em PowerPC: a plataforma mais tarde seria descontinuada em favor de arquitetura Intel apenas, tornando a escolha FreeBSD com o tempo mais acertada ainda. Em 2000 foi lançado o novo Mac OS, a décima (e tão diferente) versão, e, para garantir a qualidade, Jobs contratou como engenheiro-chefe de software Unix na Apple, Jordan K. Hubbard, fundador e criador do FreeBSD. O JKH ainda ocupa esse cargo, sendo a pessoa por trás das bases Unix do OS X e do iOS (colega direto de Scott Forstall). Hubbard foi apresentado a Jobs através de um amigo em comum, John Lasseter, um dos três fundadores originais da Pixar, hoje animador na Disney. Lasseter, um dos grandes nomes da animação gráfica de todos os tempos, além de amigo pessoal de Jordan Hubbard e Steve Jobs, é ainda amigo de McKusick, um dos pais do BSD Unix. Este artigo faz parte da série "Segurança no mundo Apple" publicado no MacMagazine em 01/03/2012. Mais informações em http://www.renatoribeiro.me 3 RenatoRibeiro Os recursos de segurança do OS X são fatores diretamente herdados (e construídos juntos, a bem da verdade) da base BSD Unix. Um projeto chamado TrustedBSD financiado por dez anos pela Agência de Pesquisas e Projetos Avançados de Defesa (DARPA) do Departamento de Defesa dos EUA (DoD), passou a ser criado sob base FreeBSD (e para FreeBSD) com objetivo de implementar requisitos de segurança da informação de especificações militares (baseadas no Orange Book / TCSEC – Trusted Computer Systems Evaluation Criteria) e na especificação POSIX.1e. A Apple e a Sun Microsystems passaram a ter interesse direto nesse projeto e participaram apoiando o desenvolvimento dessas tecnologias no FreeBSD e posterior adoção em seus sistemas. Isso vale à Apple o certificado oficial de sistema Unix, e também um dos únicos sistemas operacionais classificados com padrão de segurança TCSEC/B3 pelo DoD dos EUA. O OS X tem desde então evoluído, em recursos que normalmente são focados na usabilidade e interesse geral do usuário final. Mas é a evolução por trás de sistema de arquivos, gerência de recursos, que permite que tenhamos resultados como Versões (Versions), Resume e, agora/em breve, recursos de segurança como Gatekeeper e sandboxing na Mac App Store. Este artigo faz parte da série "Segurança no mundo Apple" publicado no MacMagazine em 01/03/2012. Mais informações em http://www.renatoribeiro.me 4