Aggiornamento 19 aprile 2015:
Dopo due anni sembra esserci ancora poco interesse in questa sfera. Tuttavia, la comunità di Hackintosh è ancora molto attiva, il che significa che uno dei pochi bootloader non Apple open source in grado di avviare xnu (Chameleon e fork) è ancora mantenuto e può avviare Yosemite. Ci sono anche storie di successo che avviano OS X Yosemite all'interno di QEMU. Inoltre, grazie a uno sviluppatore (ora impiegato da Apple) che si occupa dell'handle winocm , abbiamo una porta ARM del kernel xnu . È stata la sviluppatrice più attiva che io conosca in questo settore.
C'è anche un sequel di Amit Singh per Mac OS X Internals in arrivo. Di solito non mi piace menzionare le pagine personali delle persone; tuttavia, il blog server con tutte le informazioni sembra essere un po 'inaffidabile, quindi vedi la finestra informativa sulla pagina Twitter di ameaijou .
Sono riuscito a costruire la toolchain di sviluppo di Apple (un self-host, ma anche "Darwin SDK" è stato portato su Linux ). Credo che un sistema operativo Darwin potrebbe essere ancora possibile costruire da zero - tutto ciò che potrebbe mancare sono alcuni Kexts open source. Guarda questo spazio e se sai come suscitare interesse, fammelo sapere! :)
Brevi risposte a questa domanda:
Tecnicamente: sì
Praticamente: No *
Con i trucchi binari: probabilmente, ma anche non legale (non testato)
Con Trucchi binari per hardware generico: Come sopra (non testato)
* a meno che tu non lavori in Apple (* si schiarisce la gola in direzione generale della California *)
Risposta più lunga:
Questo sarà piuttosto lungo. Suggerisco il caffè. Se non hai il tempo / la propensione a leggere tutto, puoi saltare a "Osservazioni conclusive".
Praticamente possibile (No):
Purtroppo, Apple ha ritirato il codice sorgente per troppi KEXT e binari necessari di Darwin per rendere possibile la compilazione di un sistema operativo Darwin esclusivamente dalla fonte. È ancora tecnicamente possibile (potresti scrivere tu stesso la fonte per rattopparla correttamente), ma semplicemente non ho il tempo, le capacità o l'inclinazione per farlo (e dubito che la comunità di finanziamento della folla sarebbe molto interessata).
Non sorprende che il punto chiave del ribaltamento sia stato il rilascio di Darwin 10, che ha portato xnu in x86_64-land. La maggior parte delle fonti necessarie erano in circolazione prima di allora, ma erano solo x86. Con il passare del tempo, il significato di "Open Source" di Apple sembra essersi spostato su "Open Source solo su hardware Apple" poiché i KEXT di Apple sono ora specifici dell'hardware in generale, quindi anche se si potesse ottenere tutto e in esecuzione (vedi sotto) saresti comunque limitato all'hardware Apple.
Tecnicamente possibile (Sì):
Tuttavia, non tutto è perduto. La guida LFS è risultata utile e certamente tutte le impostazioni necessarie possono essere eseguite senza effettivamente creare il sistema operativo Darwin. Inoltre, i passaggi presentati forniscono una tabella di marcia quasi esatta del percorso da seguire, meno il kernel, i KEXT e il bootloader. Sono riuscito comunque a risolvere il problema del bootloader (almeno per l'hardware Apple).
Se sei interessato, ecco una panoramica completa di ciò che dovrai fare:
- Cancella una partizione (preferibilmente almeno 8 GB) su un'unità (interna o esterna - non importa) e formattala come Mac OS Extended (Journaled) (HFS +).
Assicurati che abbia una tabella delle partizioni GUID (GPT) e che quando lo fai abbia una partizione EFI. Il modo più semplice per farlo è tramite l'Utility Disco di Apple, ma puoi farlo dalla riga di comando se vuoi (ci sono tutorial altrove su come farlo). Il punto importante è che quando si esegue distil list diskNsM
, le seguenti informazioni dovrebbero essere corrette:
Tipo di partizione: Apple_HFS
Sistema operativo installabile: Sì
Supporti di sola lettura: No
Volume in sola lettura: no
Ora seguiamo la guida LFS (con adattamenti).
Inserisci (usando l'attuale punto di montaggio, ovviamente) in eDFS=/Volumes/DarwinOS
.bashrc
.bash_profile
Crea la directory utente ( chown
a 0: 0 alla fine):
sudo mkdir -v "$DFS"/usr
Inserisci root
:
sudo su -
Crea la directory dei sorgenti e imposta il bit appiccicoso:
mkdir -v "$DFS"/sources # Make sure you still have $DFS defined; if not, redefine it.
chmod -v a+wt "$DFS"/sources
Crea la directory degli strumenti e creane un link simbolico in modo da poterlo aggiungere facilmente a $ PATH in seguito (sempre a root
proposito):
mkdir -v "$DFS"/tools
ln -sv "$DFS"/tools /
logout # Leave root
Scarica la fonte di tutti i pacchetti che desideri. Questo è, ovviamente, dove ti blocchi. Tutti quelli necessari non ci sono. (Per inciso, preferisco binutils
comunque GNU .)
Supponendo che potresti effettivamente scaricare tutti quelli di cui hai bisogno, andiamo avanti.
Crea un utente non privilegiato appositamente per DFS (suggerito da 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.
Nota che devi creare manualmente il homedir del nuovo utente su un Mac:
sudo mkdir /Users/lfs
sudo chown -R lfs:staff /Users/lfs/
Ora concedi al nuovo utente l'accesso alle fonti e agli strumenti
sudo chown -v lfs $DFS/tools
sudo chown -v lfs $DFS/sources
Accesso:
su - lfs
Password: dfs
Eseguire il comando seguente per pulire l'ambiente (da LFS):
cat > ~/.bash_profile << "EOF"
echo "Entering clean environment…"
exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash
EOF
Ora esegui il comando seguente (vedi LFS per cosa fa se non sei sicuro):
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
è abbastanza flessibile. Prova a visualizzare il *-
modello in sequenza o esegui semplicemente gcc -v
per vedere come è stato configurato il tuo computer host e copiarlo.
- Ora disconnettiti dall'utente lfs ed esegui nuovamente l'accesso. Ora dovresti avere un ambiente pulito.
- Tutto da ora avviene all'interno dell'utente lfs. Noterai che ero leggermente pigro nel convertire solo metà dei simboli "LFS" in simboli "DFS". Mi dispiace ma hai avuto l'idea.
Va bene ora alla sezione ipotetica.
Da qui in avanti sarà piuttosto una procedura LFS standard: estrarre fonti, costruire, installare, testare, eliminare fonti. Nota che i 2 passaggi di binutils, GCC e Glibc sono ancora necessari, MA ANCHE devi avere una copia funzionante di libc++.1.dylib
- e dovrai farlo anche in 2 passaggi. Puoi vedere la pagina libcxx del progetto LLVM per qualche dettaglio in più. Una volta compilato, puoi inserirlo /usr/lib
. Dovrai compilare e installare il kernel xnu (ci sono alcuni tutorial sul web per come farlo) e quindi installare i KEXT. Anche se fossero disponibili tutti i KEXT richiesti, dovrai comunque inserirli manualmente nel pacchetto .kext. Ancora una volta ci sono tutorial su come creare a mano un KEXT sulla riga di comando.
Il bit finale sta rendendo avviabile il sistema. Per fare ciò, dovresti eseguire il seguente comando:
"$DFS/usr/sbin/bless" --folder "$MOUNT/System/Library/CoreServices" --bootefi --verbose
In realtà il luogo da benedire non fa davvero la differenza. Quella cartella è solo standard Apple.
In ogni caso, supponendo che il kernel e kexts erano nei posti giusti, hai avuto le copie corrette di dyld
, launchd
ecc a posto e boot.efi
funzionava correttamente, il sistema dovrebbe funzionare e avviabile!
Nota che se lo desideri davvero potresti eseguire un falso - launchd
che è solo uno script per eseguire un prompt di bash - è quello che fa PureDarwin Nano .
Ancora una volta, in ogni caso, scrivi tu stesso i file KEXT e i file binari, se tecnicamente è possibile. Chiamami quando hai finito.
Con i trucchi binari: probabilmente, ma anche non legale (non testato)
Quindi, perché non puoi semplicemente estrarre binari, KEXT e file richiesti da Mountain Lion, benedire il volume e andare? Bene, probabilmente puoi. Ma hai anche bisogno di una licenza per farlo. Inoltre, se lo fai, hai praticamente fatto una copia di Mountain Lion. Non è questo il punto?
Con Trucchi binari per hardware generico: Come sopra (non testato)
Questo più o meno è il progetto OSx86. Ancora una volta ti imbatti praticamente in problemi legali immediatamente. Non c'è dubbio che questi ultimi due metodi siano sicuramente possibili - il fatto che tu possa eseguire Mountain Lion su hardware generico ne è la prova - ma il punto centrale di tutto ciò era poter compilare legittimamente il tuo sistema operativo Darwin dal sorgente.
Nota a margine
Forse avrai notato che ho deliberatamente evitato qualsiasi cosa a 32 bit. In un mondo in cui tutti i principali sistemi operativi sono disponibili a 64 bit non ha molto senso compilarne uno a 32 bit. Apple ha effettivamente fornito immagini del disco di Darwin (fino a Darwin 9) qui . Hanno funzionato perfettamente sul mio box di Windows.
Osservazioni conclusive
Credo che alla fine della giornata, la gente non compra Mac per Darwin, ma compra Mac per Aqua. Di conseguenza, il supporto per Darwin come prodotto autonomo e open source è gradualmente diminuito al punto in cui è davvero solo un gesto simbolico per la comunità open source. L'altro fatto leggermente ironico è che per imparare molto su questo, devi saltare direttamente al progetto OSx86, che non è esattamente sanzionato (per dirla blandamente). Anche allora, non ci sono molte informazioni in giro. PureDarwin è un ottimo punto di partenza e il libro di Jonathan Levin è un riferimento inestimabile per tutte le cose xnu.
È stato un anno di lavoro estremamente istruttivo e sono quasi felice di saperlo come lo farei davvero. Dovrò smettere di lavorarci su ad un certo punto e ora è quel momento. Come ultimo inutile grido ad Apple, sarebbe troppo chiedere di avere solo un'altra build di Darwin quando rilasci Mavericks?