Kernel Linux vs Kernel do macOS

Veja as diferenças e semelhanças entre o kernel Linux e o kernel do macOS!

| Se você apoia nosso site, desative o AdBlock quando visitá-lo, inclusive em Mobile!
Os anúncios são poucos e não invasivos. Se quiser contribuir com nosso trabalho, clique em qualquer banner de sua preferência, exceto dos Parceiros. 
Mais detalhes clicando aqui.

Tanto o kernel Linux como o kernel do macOS são baseados em UNIX. Tem quem diga que o macOS é “linux”, tem quem diga que ambos são compatíveis devido a semelhanças entre comandos e hierarquia dos sistemas de arquivos. Hoje quero mostrar um pouco dos dois, mostrando as diferenças e semelhanças entre eles.

Kernel do macOS

Em 1985, Steve Jobs deixou a Apple devido a um desentendimento com o CEO John Sculley e o conselho de administração da Apple. Ele então fundou uma nova empresa de computadores chamada NeXT. Jobs queria que um novo computador (com um novo sistema operacional) fosse lançado rapidamente. Para economizar tempo, a equipe NeXT usou o kernel Mach, da Carnegie Mellon e partes da base de código do sistema BSD para criar o sistema operacional NeXTSTEP.

Interface gráfica do NeXTSTEP

A NeXT nunca se tornou um sucesso financeiro, em parte devido ao hábito de Jobs de gastar dinheiro como se ainda estivesse na Apple. Enquanto isso, a Apple tentou, sem sucesso, em várias ocasiões atualizar seu sistema operacional, chegando até a fazer parceria com a IBM. Em 1997, a Apple comprou a NeXT por US $ 429 milhões. Como parte do acordo, Steve Jobs retornou à Apple e o NeXTSTEP se tornou a base do macOS e do iOS.

Kernel Linux

Ao contrário do kernel do macOS, o Linux não foi criado como parte de um empreendimento comercial. Em vez disso, foi criado em 1991 pelo estudante de informática Linus Torvalds. Originalmente, o kernel foi escrito de acordo com as especificações do computador de Linus porque ele queria aproveitar seu novo processador 80386. Linus postou o código para seu novo kernel na web em agosto de 1991. Logo, ele estava recebendo sugestões de código e recursos de todo o mundo. No ano seguinte, Orest Zborowski portou o X Windows System para o Linux, dando-lhe a capacidade de suportar uma interface gráfica de usuário. – Se você quiser saber mais detalhes da história do kernel Linux, pode ler nossos artigos clicando aqui e aqui!

Recursos do kernel do macOS

O kernel do macOS é oficialmente conhecido como XNU. O acrônimo significa “XNU is Not Unix.” De acordo com a página oficial da Apple no Github, o XNU é “um kernel híbrido que combina o kernel Mach desenvolvido na Carnegie Mellon University com componentes do FreeBSD e C++ para os drivers”. A parte do subsistema BSD do código é “normalmente implementada como servidores de espaço do usuário em sistemas microkernel”. A parte Mach é responsável pelo trabalho de baixo nível, como multitarefa, memória protegida, gerenciamento de memória virtual, suporte a depuração de kernel e E/S de console.

Mapa do macOS: o coração de tudo se chama Darwin; e dentro dele, temos separados os utilitários de sistema e o kernel XNU, este composto em partes pelo kernel Mach e pelo kernel BSD.

Ao contrário do Linux, esse kernel é dividido no que chamam de kernel híbrido, permitindo que uma parte dele pare para manutenção, enquanto que outra continua trabalhando. Em diversos debates isso também abriu a questão do fato de que, um kernel híbrido é mais estável; se uma de suas partes parar, a outra pode faze-la iniciar novamente.

Algo particular do kernel macOS, é que a Apple decidiu desenvolver seu próprio núcleo de vídeo. Isso ia requerir um gerenciamento maior de memória e reescrita do kernel BSD, então desenvolveram o microKernel Mach. Isso mostra o por quê do kernel do macOS ter um melhor suporte para aplicações 3D do que o Linux nativo. O METAL, API proprietária da Apple para renderização de gráficos 3D, possui desempenho superior ao OpenGL. – Claro, o Vulkan veio desbancar isso a longo prazo, para se tornar a API universal.

Recursos do kernel Linux

Enquanto o kernel do macOS combina os recursos de um microkernel com o Mach e um kernel monolítico como o BSD, o Linux é apenas um kernel monolítico. Um kernel monolítico é responsável por gerenciar a CPU, a memória, a comunicação entre processos, os drivers de dispositivo, o sistema de arquivos e as chamadas do servidor do sistema. Ou seja, ele faz tudo, sem subdivisões.

Obviamente isso já rendeu muita discussão inclusive com o próprio Linus e outros desenvolvedores, pois estes afirmam que um kernel monolítico é mais suscetível a erros além de ser mais lento; porém o Linux se mostra o oposto disso a cada ano que passa, podendo ser otimizado tal qual um kernel híbrido. Além disso, com a ajuda da RedHat, o kernel passou a conter um Live Patch que permite manutenção em tempo real sem necessidade de reinicio.

Detalhe mais sobre os kerneis Monolitico, Híbrido e MicroKernel neste post!

Diferenças entre o XNU e o Linux

O kernel do MacOS (XNU) existe há mais tempo do que o Linux e foi baseado em uma combinação de duas bases de código ainda mais antigas. Isso pesa a favor, pela estabilidade e histórico.

Por outro lado, o Linux é mais novo, escrito do zero e é usado em muitos outros dispositivos; tanto que está presente em todos os 500 melhores dentre os melhores supercomputadores – aqui – e no recém inaugurado supercomputador norte americano – aqui.

No âmbito de sistema, não temos um gerenciador de pacotes via linha de comando no terminal do macOS.
A instalação dos pacotes, em formato .pkg – tal qual o BSD – é via esta linha de comando, se não pela GUI:

 $ sudo installer -pkg /path/to/package.pkg -target /

OBS: O .pkg do macOS é totalmente diferente do .pkg do BSD!
Não pense que o macOS suporta programas do BSD e vice versa de maneira nativa.
Requer compilação e adição de módulos extras por usuários mais experientes.

Você pode ter um comando equivalente ao apt no macOS, sob 3 opções:

Instalando o Homebrew ou o MacPorts. Ao término, você terá a seguinte sintaxe:

$ brew install PACOTE
$ port install PACOTE

Lembrando que nem todos os programas/pacotes disponíveis para Linux ou BSD estarão no Ports do macOS.

A terceira opção é o pkgin que adiciona suporte a mais de 20.000 softwares opensource originalmente nativos do Linux e do BSD ao macOS. Mais detalhes, para usuários mais avançados, aqui!

Compatibilidade

No quesito compatibilidade, não há muito o que dizer; o núcleo Darwin e o kernel Linux são tão distintos quanto comparar o kernel NT do Windows com o kernel BSD. Drivers escritos pra Linux não rodam nativamente no macOS e vice versa: Eles rodam sim mas se forem antes compilados, o que desencoraja um uso amigável de intercâmbio entre os pacotes dos 2 sistemas. Curiosamente o Linux possui uma série de daemons do macOS, entre eles, o servidor de impressão CUPS, compilado para o pinguim.

O que temos de compatibilidade comum de fato, são ferramentas do terminal como os pacotes do GNU Utils ou ainda Busybox, então temos não só o BASH, como também o gcc, rm, dd, top, nano, vim, etc… E isso é intrínseco de todos os baseados em UNIX. Além disso, temos a arquitetura de pastas do filesystem, pastas comuns comum a raíz em /, /lib, /var, /etc, /dev e outras tantas.

Conclusão

O macOS e o Linux possuem suas semelhanças e diferenças, tal qual o BSD comparado ao Linux. Mas por serem baseados em UNIX, compartilham de padrões que os tornam familiares ao meio. Quem usa Linux e migra pro macOS ou vice versa, estará familiarizado com uma série de comandos e funcionalidades. A diferença mais gritante ficaria por conta da interface gráfica, cujo problema seria uma questão de adaptação pessoal.

#UrbanCompassPony

2 comentários em “Kernel Linux vs Kernel do macOS”

  1. Olá Nathan . Gostei do portal . Trabalho excelente , mas gostaria de ver suas matérias um pouco mais focadas .

    Como sys admin , observei alguns equívocos redigidos por você , e acho que podemos diminuir esses equívocos .

    Ficarei feliz se pudesse entrar em contato comigo via e-mail .

    Responder

Deixe um comentário