Aggiornamento 19 aprile 2015:
Dopo due anni sembra esserci ancora poco interesse in questo ambito. Tuttavia, la comunità di Hackintosh è ancora molto attiva, il che significa che uno dei pochi bootloader open source non Apple 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 fa chiamare winocm , abbiamo un port ARM del kernel xnu. È stata la sviluppatrice più attiva che io conosca in quest'area.
C'è anche un sequel di Mac OS X Internals di Amit Singh in arrivo. Di solito non mi piace menzionare le pagine personali delle persone; tuttavia, il server del blog con tutte le informazioni sembra essere un po' inaffidabile, quindi controlla il riquadro delle informazioni sulla pagina Twitter di ameaijou.
Sono riuscito a creare la toolchain di sviluppo di Apple (un self-host, tuttavia anche il "Darwin SDK" è stato portato su Linux). Credo che sia ancora possibile creare un sistema operativo Darwin da zero:tutto ciò che potrebbe mancare sono alcuni Kext open source. Guarda questo spazio e se sai come suscitare interesse, fammelo sapere! :)
Risposte brevi a questa domanda:
Tecnicamente: Sì
In pratica: No*
Con 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 voglia di leggerlo tutto puoi saltare a "Osservazioni conclusive".
Praticamente possibile (no):
Purtroppo, Apple ha ritirato il codice sorgente di troppi KEXT e binari necessari a Darwin per rendere possibile la compilazione di un sistema operativo Darwin esclusivamente dalla fonte. È ancora tecnicamente possibile (potresti scrivere tu stesso la fonte per correggerla correttamente), ma semplicemente non ho il tempo, le capacità o l'inclinazione per farlo (e dubito che la comunità del crowdfunding sarebbe molto interessata).
Non sorprende che il punto di svolta chiave sia stato il rilascio di Darwin 10, che ha portato xnu in x86_64-land. La maggior parte delle fonti necessarie esisteva prima di allora, ma erano solo x86. Col passare del tempo, il significato di "Open Source" di Apple sembra essersi spostato in "Open Source solo su hardware Apple" poiché i KEXT di Apple sono ora in gran parte specifici dell'hardware, quindi anche se potessi ottenere tutto e in esecuzione (vedi sotto) saresti ancora confinato all'hardware Apple.
Tecnicamente possibile (Sì):
Tuttavia, non tutto è perduto. La guida LFS è tornata utile e certamente tutta la configurazione necessaria può essere eseguita senza creare effettivamente il sistema operativo Darwin. Inoltre, i passaggi presentati forniscono una tabella di marcia quasi esatta del percorso da percorrere, meno il kernel, i KEXT e il bootloader. Tuttavia, sono riuscito 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 8 GB o superiore) su un'unità (interna o esterna, non importa) e formattala come Mac OS Extended (Journaled) (HFS+).
-
Assicurati che abbia una tabella di partizione GUID (GPT) e che quando lo fai abbia una partizione EFI. Il modo più semplice per farlo è tramite Utility Disco di Apple, ma puoi farlo dalla riga di comando se lo desideri (ci sono tutorial altrove su come farlo). Il punto importante è che quando esegui
distil list diskNsM
, le seguenti informazioni dovrebbero essere corrette:Tipo di partizione:Apple_HFS
Sistema operativo installabile:Sì
Supporti di sola lettura:No
Volume di sola lettura:No
-
Ora segui la guida LFS (con gli adattamenti).
-
Inserisci
DFS=/Volumes/DarwinOS
(usando l'effettivo punto di montaggio, ovviamente) in.bashrc
e.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 lo sticky bit:
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 crea un collegamento simbolico ad essa in modo che possiamo aggiungerla facilmente a $PATH in seguito (sempre in
root
a proposito):mkdir -v "$DFS"/tools ln -sv "$DFS"/tools / logout # Leave root
-
Scarica il sorgente di tutti i pacchetti che desideri. Questo è, ovviamente, dove ti blocchi. Non ci sono tutti quelli necessari. (Per inciso, preferisco
binutils
di GNU comunque.)
Supponendo che tu possa effettivamente scaricare tutti quelli di cui hai bisogno, andiamo avanti.
-
Crea un utente svantaggiato specifico 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 la 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
-
Accedi:
su - lfs Password: dfs
-
Eseguire il seguente comando 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 seguente comando (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
-
/configure
di GCC è abbastanza flessibile. Prova a eseguire il grep del*-
pattern, o esegui semplicementegcc -v
per vedere come è stata configurata la tua macchina host e copiala. - Ora disconnettiti dall'utente lfs e accedi di nuovo. Ora dovresti avere un ambiente pulito.
- Tutto da ora avviene all'interno dell'utente lfs. Noterai che sono stato leggermente pigro nel convertire solo la metà dei simboli "LFS" in simboli "DFS". Mi dispiace ma hai capito.
Va bene ora alla sezione ipotetica.
Da qui in avanti sarà piuttosto una procedura LFS standard:estrarre i sorgenti, compilare, installare, testare, eliminare i sorgenti. Nota che i 2 passaggi di binutils, GCC e Glibc sono ancora necessari MA devi ANCHE 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 metterlo in /usr/lib
. Dovrai compilare e installare il kernel xnu (ci sono alcuni tutorial sul Web su come farlo) e quindi installare i KEXT. Anche se fossero disponibili tutti i KEXT richiesti, dovresti comunque inserirli manualmente nel pacchetto .kext. Ancora una volta ci sono tutorial su come creare manualmente un KEXT sulla riga di comando.
L'ultimo bit sta rendendo il sistema avviabile. 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 molta differenza. Quella cartella è solo standard Apple.
In ogni caso, supponendo che il kernel e le KEXT fossero nei posti giusti, avevi le copie corrette di dyld
, launchd
, ecc. e boot.efi
funzionava correttamente, il sistema dovrebbe essere funzionante e avviabile!
Nota che se lo desideri davvero puoi eseguire un falso launchd
questo è solo uno script per eseguire un prompt bash:è quello che fa PureDarwin Nano.
Ancora una volta, in ogni caso, scrivi tu stesso i KEXT e i binari, se vuoi:lo è tecnicamente possibile. Chiamami quando hai finito.
Con trucchi binari:probabilmente, ma anche non legale (non testato)
Quindi, perché non puoi semplicemente strappare i binari, i KEXT e i file richiesti da Mountain Lion, benedire il volume e andare? Beh, probabilmente puoi. Ma hai anche bisogno di una licenza per farlo. Inoltre, se lo fai, hai praticamente creato una copia di Mountain Lion. Non è un po' fuori luogo?
Con trucchi binari per hardware generico:come sopra (non testato)
Praticamente lo è 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 era essere in grado di compilare legittimamente il tuo sistema operativo Darwin dai sorgenti.
Nota a margine
Potresti aver 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 sulla mia macchina Windows.
Osservazioni conclusive
Immagino che alla fine la gente non compri Mac per Darwin, compri Mac per Aqua. Di conseguenza, il supporto per Darwin come prodotto autonomo e open source è gradualmente diminuito al punto da diventare solo un gesto simbolico per la comunità open source. L'altro fatto leggermente ironico è che per imparare molto di 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 tutto ciò che riguarda xnu.
Questo è stato un anno di lavoro estremamente istruttivo e sono felice di sapere come farlo quasi quanto lo farei davvero. Ad un certo punto dovrò smettere di lavorarci e ora è il momento. Come ultimo futile grido ad Apple, sarebbe troppo chiedere di avere solo un'altra build di Darwin quando rilascerai Mavericks?