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:
- Apague uma partição (8 GB ou mais, de preferência) em uma unidade (interna ou externa - não importa) e formate-a como Mac OS Extended (Diário) (HFS +).
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:
Tipo de partição: Apple_HFS
OS pode ser instalado: Sim
Mídia somente leitura: não
Volume somente leitura: não
Agora, siga o guia do LFS (com adaptações).
Insira (usando o ponto de montagem real, obviamente) em eDFS=/Volumes/DarwinOS
.bashrc
.bash_profile
Crie o diretório do usuário ( chown
para 0: 0 no final):
sudo mkdir -v "$DFS"/usr
Digite root
:
sudo su -
Crie o diretório de fontes e defina o bit adesivo:
mkdir -v "$DFS"/sources # Make sure you still have $DFS defined; if not, redefine it.
chmod -v a+wt "$DFS"/sources
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):
mkdir -v "$DFS"/tools
ln -sv "$DFS"/tools /
logout # Leave root
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):
sudo dscl . -create /Users/lfs
sudo dscl . -create /Users/lfs UserShell /bin/bash
sudo dscl . -create /Users/lfs RealName "LFS DFS"
sudo dscl . -create /Users/lfs UniqueID "2070" # whatever you like
sudo dscl . -create /Users/lfs PrimaryGroupID 20 # Default 'staff'
sudo dscl . -create /Users/lfs NFSHomeDirectory /Users/lfs
sudo dscl . -passwd /Users/lfs dfs # Again to taste.
Observe que você deve fazer o homedir do novo usuário manualmente em um Mac:
sudo mkdir /Users/lfs
sudo chown -R lfs:staff /Users/lfs/
Agora conceda ao novo usuário acesso às fontes e ferramentas
sudo chown -v lfs $DFS/tools
sudo chown -v lfs $DFS/sources
Entrar:
su - lfs
Password: dfs
Execute o seguinte comando para limpar o ambiente (do LFS):
cat > ~/.bash_profile << "EOF"
echo "Entering clean environment…"
exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash
EOF
Agora execute o seguinte comando (consulte LFS para saber o que ele faz se você não tiver certeza):
cat > ~/.bashrc << "EOF"
set +h
umask 022
DFS=/Volumes/*DarwinOS* # As previously
LC_ALL=POSIX
LFS_TGT=$(uname -m)-dfs-darwin1242 # Look inside gcc/configure for possibilities!
PATH=/tools/bin:/bin:/usr/bin # Note symlink from before
export LFS LC_ALL LFS_TGT PATH
echo ".bashrc script complete. Environment is ready."
EOF
O CCG /configure
é bastante flexível. Tente grepping o *-
padrão, ou apenas corra gcc -v
para ver como sua máquina host foi configurada e copie isso.
- Agora efetue logout do usuário lfs e efetue login novamente. Agora você deve ter um ambiente limpo.
- Tudo a partir de agora ocorre dentro do usuário lfs. Você notará que fiquei um pouco preguiçoso ao converter apenas metade dos símbolos 'LFS' em símbolos 'DFS'. Desculpe por isso, mas você entendeu.
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:
"$DFS/usr/sbin/bless" --folder "$MOUNT/System/Library/CoreServices" --bootefi --verbose
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 e boot.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?