Mise à jour du 19 avril 2015:
Après deux ans, l’intérêt pour ce domaine semble encore très faible. Cependant, la communauté Hackintosh est toujours très active, ce qui signifie que l’un des rares chargeurs de démarrage non-Apple open source capable de démarrer xnu (Chameleon and forks) est toujours maintenu et peut démarrer Yosemite. Il existe également des exemples de réussite démarrant OS X Yosemite dans QEMU. De plus, grâce à un développeur (maintenant employé de Apple) qui suit le Winocm , nous avons un port ARM du noyau xnu . Elle a été le développeur le plus actif que je connaisse dans ce domaine.
Une suite à Mac OS X Internals d' Amit Singh sera bientôt disponible. Je n'aime généralement pas parler des pages personnelles des gens; cependant, le serveur de blog avec toutes les informations semble être un peu peu fiable, alors consultez la boîte d’informations sur la page Twitter d’ameaijou .
J'ai réussi à construire la chaîne d'outils de développement d'Apple (un auto-hébergeur, mais le "SDK Darwin" a également été porté sur Linux ). Je pense qu’un système d’exploitation Darwin est peut-être encore possible de créer à partir de rien. Il ne manque que quelques Kexts open-source. Surveillez cet espace, et si vous savez susciter l'intérêt, faites le moi savoir! :)
Réponses courtes à cette question:
Techniquement: oui
Pratiquement: non *
Avec des astuces binaires: Probablement, mais aussi non légal (non testé)
Avec les astuces binaires pour le matériel générique: Comme ci-dessus (non testé)
* sauf si vous travaillez chez Apple (* efface la gorge en direction générale de la Californie *)
Réponse plus longue:
Cela va être assez long. Je suggère du café. Si vous n'avez pas le temps ni l'envie de tout lire, vous pouvez passer à "Remarques finales".
Pratiquement possible (non):
Malheureusement, Apple a retiré le code source de trop nombreux fichiers KEXT et binaires nécessaires à Darwin pour permettre la compilation d'un système d'exploitation Darwin à partir de la source. C'est toujours techniquement possible (vous pouvez écrire vous-même la source pour la corriger correctement), mais je n'ai tout simplement pas le temps, les compétences ou l'envie de le faire (et je doute que la communauté du financement participatif soit très intéressée).
Sans surprise, le point décisif a été la publication de Darwin 10, qui a introduit xnu dans x86_64-land. La plupart des sources nécessaires existaient avant, mais elles n'étaient que x86. Au fil du temps, le sens du terme "Open Source" d’Apple semble être passé à "Open Source sur le matériel Apple uniquement", car les KEXT d’Apple sont désormais spécifiques au matériel, de sorte que même si vous pouviez tout obtenir En cours d'exécution (voir ci-dessous), vous seriez toujours limité au matériel Apple.
Techniquement possible (oui):
Cependant, tout n'est pas perdu. Le guide LFS s'est avéré utile et il est certain que toute la configuration nécessaire peut être réalisée sans créer réellement le système d'exploitation Darwin. De plus, les étapes présentées vous donnent une feuille de route presque exacte du chemin à parcourir, moins le noyau, les KEXT et le chargeur de démarrage. J'ai toutefois réussi à résoudre le problème du chargeur de démarrage (du moins pour le matériel Apple).
Si cela vous intéresse, voici un aperçu complet de ce que vous devrez faire:
- Effacez une partition (8 Go ou plus de préférence) sur un lecteur (interne ou externe - peu importe) et formatez-la en tant que Mac OS étendu (journalisé) (HFS +).
Assurez-vous qu'il dispose d'une table GPT (GUID Partition Table) et que, lorsque vous le faites, il dispose d'une partition EFI. Le moyen le plus simple de procéder consiste à utiliser l'Utilitaire de disque d'Apple, mais vous pouvez le faire en ligne de commande si vous le souhaitez (des didacticiels sont également disponibles sur la procédure à suivre). Le point important est que lorsque vous exécutez distil list diskNsM
, les informations suivantes doivent être correctes:
Type de partition: Apple_HFS
Le système d'exploitation peut être installé: oui
Médias en lecture seule: Non
Volume en lecture seule: Non
Maintenant, suivez le guide de l’EPA (avec adaptations).
Insérer (en utilisant le point de montage réel, évidemment) dans etDFS=/Volumes/DarwinOS
.bashrc
.bash_profile
Créez le répertoire utilisateur ( chown
à 0: 0 à la fin):
sudo mkdir -v "$DFS"/usr
Entrez root
:
sudo su -
Créez le répertoire des sources et définissez le sticky bit:
mkdir -v "$DFS"/sources # Make sure you still have $DFS defined; if not, redefine it.
chmod -v a+wt "$DFS"/sources
Créez le répertoire tools et faites-en un lien symbolique afin que nous puissions l'ajouter facilement à $ PATH plus tard (toujours en root
cours):
mkdir -v "$DFS"/tools
ln -sv "$DFS"/tools /
logout # Leave root
Téléchargez la source de tous les paquets que vous voulez. C'est bien sûr où vous êtes bloqué. Tous les nécessaires ne sont pas là. (Incidemment, je préfère binutils
quand même GNU .)
En supposant que vous puissiez télécharger tous ceux dont vous avez besoin, poursuivons.
Créez un utilisateur défavorisé spécifiquement pour DFS (suggéré par 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.
Notez que vous devez configurer manuellement le nouvel utilisateur de homedir sur un Mac:
sudo mkdir /Users/lfs
sudo chown -R lfs:staff /Users/lfs/
Accordez maintenant au nouvel utilisateur l'accès aux sources et aux outils
sudo chown -v lfs $DFS/tools
sudo chown -v lfs $DFS/sources
S'identifier:
su - lfs
Password: dfs
Exécutez la commande suivante pour nettoyer l'environnement (à partir de LFS):
cat > ~/.bash_profile << "EOF"
echo "Entering clean environment…"
exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash
EOF
Maintenant, lancez la commande suivante (voir LFS pour savoir ce qu’il fait si vous n’êtes pas sûr):
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
GCC /configure
est assez flexible. Essayez de rechercher le *-
modèle ou exécutez-le simplement gcc -v
pour voir comment votre ordinateur hôte a été configuré et copiez-le.
- Déconnectez-vous maintenant de l'utilisateur lfs et reconnectez-vous. Vous devriez maintenant avoir un environnement propre.
- Tout se passe désormais à l'intérieur de l'utilisateur lfs. Vous remarquerez que j'étais légèrement paresseux en ne convertissant que la moitié des symboles "LFS" en symboles "DFS". Désolé, mais vous avez l’idée.
Bon, passons maintenant à la section hypothétique.
À partir de là, il s'agira plutôt d'une procédure standard de LFS: extraire des sources, construire, installer, tester, supprimer des sources. Notez que les 2 passes de binutils, GCC et Glibc sont toujours nécessaires MAIS vous devez AUSSI avoir une copie de travail de libc++.1.dylib
- et vous devrez le faire aussi en 2 passes. Vous pouvez voir la page libcxx du projet LLVM pour plus de détails. Une fois compilé, vous pouvez le mettre en /usr/lib
po Vous devrez compiler et installer le noyau xnu (il existe quelques tutoriels sur le Web expliquant comment le faire), puis installer les fichiers KEXT. Même si tous les fichiers KEXT requis étaient disponibles, vous auriez quand même besoin de les insérer manuellement dans le package .kext. Là encore, il existe des tutoriels sur la création manuelle d'un fichier KEXT sur la ligne de commande.
Le dernier bit rend le système amorçable. Pour ce faire, vous devez exécuter la commande suivante:
"$DFS/usr/sbin/bless" --folder "$MOUNT/System/Library/CoreServices" --bootefi --verbose
En réalité, l'emplacement pour bénir ne fait pas vraiment une différence. Ce dossier est juste au standard Apple.
Dans tous les cas, en supposant que le noyau et kexts étaient dans les bons endroits, vous aviez copies propres de dyld
, launchd
, etc en place et boot.efi
fonctionnait correctement, le système devrait fonctionner et de démarrage!
Notez que si vous le vouliez vraiment, vous pourriez exécuter un faux - launchd
c'est juste un script pour lancer une invite bash - c'est ce que fait PureDarwin Nano .
Encore une fois, par tous les moyens, écrire les kexts et les binaires vous - même si vous aimez - il est techniquement possible. Appelez-moi quand vous avez fini.
Avec des astuces binaires: Probablement, mais aussi non légal (non testé)
Alors, pourquoi ne pouvez-vous pas extraire les fichiers binaires, les fichiers KEXT et les fichiers requis de Mountain Lion, bénir le volume et partir? Eh bien, vous pouvez probablement. Mais vous avez également besoin d'une licence pour le faire. De plus, si vous faites cela, vous venez essentiellement de faire une copie de Mountain Lion. N'est-ce pas en quelque sorte la question?
Avec les astuces binaires pour le matériel générique: Comme ci-dessus (non testé)
Ce à peu près est le projet OSx86. Encore une fois, vous rencontrez assez rapidement des problèmes juridiques. Il ne fait aucun doute que ces deux dernières méthodes sont tout à fait possibles - le fait de pouvoir utiliser Mountain Lion sur du matériel générique en est la preuve -, mais le but de cette opération était de pouvoir légitimement compiler votre propre système d'exploitation Darwin à partir de la source.
Note latérale
Vous avez peut-être remarqué que j'ai délibérément évité quoi que ce soit en 32 bits. Dans un monde où chaque système d'exploitation majeur est disponible en 64 bits, la compilation d'un système 32 bits n'a pas beaucoup de sens. Apple a effectivement fourni des images de disque de Darwin (jusqu'à Darwin 9) ici . Ils ont parfaitement fonctionné sur ma machine Windows.
Remarques finales
Je suppose qu'en fin de compte, les gens n'achètent pas de Mac pour Darwin, ils achètent un Mac pour Aqua. En conséquence, la prise en charge de Darwin en tant que produit autonome à source ouverte a progressivement diminué au point de devenir un simple geste symbolique de la part de la communauté des sources ouvertes. L’autre fait un peu ironique est que, pour en apprendre beaucoup sur ce sujet, vous devez vous lancer directement dans le projet OSx86, qui n’est pas sanctionné (pour le dire en termes clairs). Même dans ce cas, il n’ya pas beaucoup d’information disponible. PureDarwin est un excellent point de départ et le livre de Jonathan Levin est une référence inestimable pour tout ce qui concerne xnu.
Cette année de travail a été extrêmement instructive et je suis presque aussi heureux de savoir le faire que je le ferais réellement. Cependant, je vais devoir arrêter de travailler à un moment donné et le moment est venu. Pour finir, crie-t-il à Apple, serait-ce trop demander d’avoir une version de plus de Darwin lors de la sortie de Mavericks?