Eu li e realizei o Linux From Scratch (e BLFS) e fiquei pensando: posso seguir este guia para criar uma distribuição Darwin substituindo o xnu
kernel? O processo seria muito diferente daquele descrito no LFS?
Meu entendimento atual é que tudo o que seria necessário para tornar o sistema "Darwin" em vez de "Linux" seria a substituição do kernel. Isso está correto?
EDITAR:
Em resposta ao comentário de killermist, refinarei esta questão. Enquanto procuro informações sobre esse tópico em geral, o que estou procurando especificamente é algo como um " Guia de criação de distribuição de Darwin ", assim como o LFS é um " Guia de criação de distribuição de Linux ".
Compreendo que essas informações provavelmente venham apenas do pessoal de Puredarwin , OpenDarwin ou GNU / Darwin, portanto, isso é um indicativo para ajuda. Um guia " Como fizemos o PureDarwin-Nano-começar-a-terminar " como o LFS seria perfeito, mas sei que isso é pedir muito.
Respostas:
Atualização 19 de abril de 2015:
Depois de dois anos, ainda parece haver muito pouco interesse nessa esfera. No entanto, a comunidade Hackintosh ainda é altamente ativa, o que significa que um dos poucos gerenciadores de inicialização de código aberto que não são da Apple capazes de inicializar o xnu (Chameleon e forks) ainda é mantido e pode inicializar o Yosemite. Também existem histórias de sucesso ao inicializar o OS X Yosemite no QEMU. Além disso, graças a um desenvolvedor (atualmente empregado pela Apple) que usa o winocm , temos uma porta ARM do kernel xnu . Ela é a desenvolvedora mais ativa que conheço nessa área.
Em breve, também haverá uma sequência dos Mac OS X Internals de Amit Singh . Eu geralmente não gosto de mencionar as páginas pessoais das pessoas; no entanto, o servidor do blog com todas as informações parece um pouco confiável, portanto, veja a caixa de informações na página do Twitter da ameaijou .
Consegui construir a cadeia de ferramentas de desenvolvimento da Apple (um host próprio, no entanto, o "Darwin SDK" também foi portado para o Linux ). Acredito que ainda seja possível construir um sistema operacional Darwin do zero - sobre tudo o que podemos estar perdendo são alguns Kexts de código aberto. Assista a este espaço e, se você souber como despertar interesse, me avise! :)
Respostas curtas para esta pergunta:
Tecnicamente: Sim
Praticamente: Não *
Com fraudes binárias: Provavelmente, mas também não é legal (não testada)
Com fraudes binárias para hardware genérico: Como acima (não testado)
* a menos que você trabalhe na Apple (* pigarreia na direção geral da Califórnia *)
Resposta mais longa:
Isso vai demorar bastante. Eu sugiro café. Se você não tem tempo / inclinação para ler tudo, pode pular para "Comentários finais".
Praticamente possível (não):
Infelizmente, a Apple retirou o código fonte de muitos KEXTs e binários necessários de Darwin para tornar possível a compilação de um sistema operacional Darwin puramente a partir da fonte. Ainda é tecnicamente possível (você pode escrever a fonte para corrigi-la adequadamente), mas eu simplesmente não tenho tempo, habilidades ou inclinação para fazer isso (e duvido que a comunidade de financiamento coletivo esteja muito interessada).
Sem surpresa, o principal ponto de inflexão foi o lançamento do Darwin 10, que trouxe o xnu para o x86_64-land. A maioria das fontes necessárias existia antes disso, mas eram apenas x86. Com o passar do tempo, o significado de "Código aberto" da Apple parece ter mudado para "Código aberto apenas no hardware da Apple", já que os KEXTs da Apple agora são específicos de hardware em geral, portanto, mesmo que você possa obter tudo, executando (veja abaixo) você ainda estaria confinado ao hardware da Apple.
Tecnicamente possível (Sim):
No entanto, nem tudo está perdido. O guia LFS foi útil e certamente toda a configuração necessária pode ser realizada sem a criação do sistema operacional Darwin. Além disso, as etapas apresentadas fornecem um roteiro quase exato do caminho a seguir, menos o kernel, os KEXTs e o carregador de inicialização. Mas consegui resolver o problema do gerenciador de inicialização (pelo menos no hardware da Apple).
Se você estiver interessado, aqui está uma visão geral completa do que você precisará fazer:
Verifique se ele possui uma tabela de partição GUID (GPT) e se, ao fazê-lo, possui uma partição EFI. A maneira mais fácil de fazer isso é através do Utilitário de Disco da Apple, mas você pode fazê-lo na linha de comando, se desejar (existem tutoriais em outros lugares sobre como fazer isso). O ponto importante é que, quando você executa
distil list diskNsM
, as seguintes informações devem estar corretas:Agora, siga o guia do LFS (com adaptações).
Insira (usando o ponto de montagem real, obviamente) em e
DFS=/Volumes/DarwinOS
.bashrc
.bash_profile
Crie o diretório do usuário (
chown
para 0: 0 no final):Digite
root
:Crie o diretório de fontes e defina o bit adesivo:
Crie o diretório tools e faça um link simbólico para que possamos adicioná-lo facilmente ao $ PATH mais tarde (ainda
root
por sinal):Faça o download da fonte de todos os pacotes que você deseja. É claro que é aí que você fica preso. Todos os necessários não estão lá. (Aliás, eu prefiro o GNU de
binutils
qualquer maneira.)Supondo que você possa, de fato, baixar todos os necessários, vamos continuar.
Crie um usuário menos privilegiado especificamente para o DFS (sugerido pelo LFS):
Observe que você deve fazer o homedir do novo usuário manualmente em um Mac:
Agora conceda ao novo usuário acesso às fontes e ferramentas
Entrar:
Execute o seguinte comando para limpar o ambiente (do LFS):
Agora execute o seguinte comando (consulte LFS para saber o que ele faz se você não tiver certeza):
O CCG
/configure
é bastante flexível. Tente grepping o*-
padrão, ou apenas corragcc -v
para ver como sua máquina host foi configurada e copie isso.Ok agora para a seção hipotética.
A partir daqui, será muito bem o procedimento LFS padrão: Extraia fontes, construa, instale, teste, exclua fontes. Observe que as 2 passagens de binutils, GCC e Glibc ainda são necessárias, mas você TAMBÉM precisa ter uma cópia de trabalho
libc++.1.dylib
- e você precisará fazer isso em 2 passagens também. Você pode ver a página libcxx do projeto LLVM para mais alguns detalhes. Depois de compilado, você pode inseri-lo/usr/lib
. Você precisará compilar e instalar o kernel xnu (existem alguns tutoriais na Web para saber como fazer isso) e depois instalar os KEXTs. Mesmo se todos os KEXTs necessários estivessem disponíveis, você ainda precisaria colocá-los no pacote .kext manualmente. Novamente, existem tutoriais sobre como criar manualmente um KEXT na linha de comando.O bit final está tornando o sistema inicializável. Para fazer isso, você deve executar o seguinte comando:
Na verdade, o local para abençoar realmente não faz diferença. Essa pasta é apenas padrão da Apple.
Em qualquer caso, assumindo o kernel e kexts estavam nos lugares certos, você tinha cópias adequadas de
dyld
,launchd
, etc no lugar eboot.efi
estava funcionando corretamente, o sistema deve estar funcionando e inicializável!Nota se você realmente quiser você pode executar um faux-
launchd
que é apenas um script para executar uma festança pronto - Isso é o que PureDarwin Nano faz.Novamente, por todos os meios, escreva os KEXTs e os binários, se quiser - é tecnicamente possível. Apenas me ligue quando terminar.
Com fraudes binárias: Provavelmente, mas também não é legal (não testada)
Então, por que você não pode simplesmente extrair binários, KEXTs e arquivos necessários do Mountain Lion, abençoar o volume e partir? Bem, você provavelmente pode. Mas você também precisa de uma licença para fazer isso. Além disso, se você fizer isso, basicamente fará uma cópia do Mountain Lion. Isso não vem ao caso?
Com fraudes binárias para hardware genérico: Como acima (não testado)
Isso é basicamente o projeto OSx86. Novamente, você praticamente se depara com questões legais imediatamente. Não há dúvida de que esses dois últimos métodos são definitivamente possíveis - o fato de que você pode executar o Mountain Lion em hardware genérico é uma prova disso -, mas o ponto principal disso era poder legitimamente compilar seu próprio sistema operacional Darwin a partir da fonte.
Nota
Você deve ter notado que evitei deliberadamente qualquer coisa de 32 bits. Em um mundo em que todos os principais sistemas operacionais estão disponíveis em 64 bits, não faz muito sentido compilar um sistema operacional de 32 bits. A Apple realmente forneceu imagens de disco de Darwin (até Darwin 9) aqui . Eles funcionaram perfeitamente na minha caixa do Windows.
Observações finais
Acho que no final do dia, as pessoas não compram Mac para Darwin, elas compram Mac para Aqua. Como resultado, o suporte a Darwin como um produto autônomo de código aberto diminuiu gradualmente a ponto de realmente ser apenas um gesto simbólico para a comunidade de código aberto. O outro fato levemente irônico é que, para aprender muito sobre isso, você precisa pular direto para o projeto OSx86, que não é exatamente sancionado (para dizer o mínimo). Mesmo assim, não há muita informação por aí. PureDarwin é um excelente lugar para começar, e o livro de Jonathan Levin é uma referência inestimável para todas as coisas que o xnu.
Este foi um ano de trabalho extremamente educativo, e estou quase tão feliz em saber como fazê-lo quanto realmente faria. Vou ter que parar de trabalhar nisso em algum momento e agora é a hora. Como um grito fútil final para a Apple, seria pedir demais para ter apenas mais uma compilação de Darwin quando você lançar o Mavericks?
fonte
Obviamente, você reconheceu que o LFS é para Linux e o Darwin é muito diferente do Linux LFS aplicado; portanto, além dos esforços individuais, é simples aplicar o LFS aos sistemas Darwin.
Existem muitas tentativas da comunidade de substituir / melhorar os sistemas de Darwin. enquanto o projeto OpenDarwin não tiver muito êxito, acho que o código da Apple é muito difícil, enquanto ainda há um projeto PureDarwin restante:
PureDarwin SourceForge
PureDarwin HomePage
Obtenha uma conta de desenvolvedor primeiro, agarre suas ferramentas de compilação e, em seguida, você poderá obter as etapas para criar seu próprio Kernel personalizado.
O Darwin Kernel não possui a mesma arquitetura do Linux Kernel, portanto, ele não pode ser substituído pelo Linux Kernel, portanto você precisa compilá-lo.
Na verdade, tudo o que você precisa fazer é manter-se 100% com o projeto PureDarwin e, em seguida, chamar o seguinte script: Google Code - Pure Darwin Switch Kernel com as imagens personalizadas do Kernel que você criou vai ficar bem.
Mas, sobre como construir um bom Darwin Kernel funcional, essa seria uma nova pergunta.
fonte