Ahora que iOS es de código abierto, ¿puede instalarse en cualquier teléfono Android con las modificaciones adecuadas?

No.

Ni siquiera han lanzado el código fuente para los componentes específicos de ARM de libSystem, específicamente, la biblioteca matemática, que son casi todas las partes mágicas.

En el mejor de los casos, podría tener un núcleo Darwin en funcionamiento en una plataforma Android con mucho menos trabajo; un BeagleBoard sería una mejor opción en este momento, en realidad.

Es solo el núcleo.


No es la gran cosa.

Personalmente he tenido un Raspberry Pi ejecutando un núcleo Darwin por un tiempo; No es tan difícil hacer la mayoría de las cosas, aunque dejé de hacer que DTrace funcionara, Apple no lo hizo.

Hace dos años que no toco el código. Probablemente tendría que cavar en una caja para encontrar la Raspberry Pi, en este punto (en realidad, estoy seguro de que tendría que cavar en una caja).

Obtener el locore y la ruta de la trampa y la VM y otro código no fue gran cosa, tenía FreeBSD como referencia para las partes ARM.

Supongo que las partes ARM64 serían geniales de ver.


Para poner en funcionamiento el resto de iOS, primero (obviamente) necesitará un núcleo.

Pero el resto de iOS no es realmente de código abierto suficiente para llegar a una GUI, como tampoco lo es el resto de Mac OS X.

No puede hacer los gráficos geniales, CoreVideo, etc., a menos que esté dispuesto a cometer muchas violaciones de derechos de autor para que ese código se ejecute en el espacio del usuario desde un iPhone con jailbreak.


El problema con el núcleo es que ARM tiene un problema real como plataforma de propósito general.

No hay ISA – Arquitectura estándar de la industria.

En una PC, arquitecturas IA32 e IA64, todos los dispositivos, excepto los gráficos, todos viven en el mismo lugar: puede usar el mismo código para ellos.

Es por eso que Linux tiene la abstracción, si puede llamarlo así; Creo que es un gran desastre, y es una de las razones por las que es difícil obtener código en una nueva plataforma de Android, o actualizar la versión de Android en una plataforma existente, de los llamados “archivos de placa”.


Parte del ímpetu para esto es que la comunidad Linux tiene una profunda desconfianza del “árbol de dispositivos” de OpenFirmware que se entrega al núcleo mediante u-boot, que es el cargador de arranque que está firmado criptográficamente y se carga mediante el arranque- cargador en ROM en los distintos núcleos ARM.

Todo esto se remonta a los días de PPC, cuando querían ejecutar Linux en el hardware de Apple, y descubrieron que no había una ID de CPU específica para cada CPU en el árbol de dispositivos, por lo que no podían fijar hilos a los núcleos.

Apple hizo esto porque no quería que los hilos se fijaran a un núcleo en particular; si, por razones de administración de energía, desea apagar uno o más núcleos, o, por razones térmicas, desea cambiar qué núcleos estaban encendidos, realmente no deseaba que el núcleo del sistema operativo se desatascara cuando los núcleos desaparecieran.

Linux, por otro lado, vivía principalmente en centros de datos, y la administración de energía no era un gran problema allí: en cambio, deseaba obtener todos los ciclos posibles de cada CPU posible, y quería (potencialmente) fijar ciertas cargas a Cierta CPU para evitar ataques de interferencia, como el almacenamiento en caché de fugas de información de una VM a otra.

Entonces, Linux quería desesperadamente tener una ID de CPU para poder fijar hilos a las CPU.

Y por lo tanto, para cada posible plataforma de Apple, copiarían el árbol de dispositivos de Apple, que incluía las diferencias de plataforma en el hardware y los chips U2 y U3, que se utilizaron para el control del bus, y así sucesivamente, y suministraron su propio Árbol de dispositivos que era sutilmente, o no tan sutilmente, diferente del árbol de dispositivos de Apple.

Entonces Linux creció esta “verruga”.

Y ninguna cantidad de Compound W ™ hará que esta verruga desaparezca: el kernel de Linux no confía en el árbol de dispositivos suministrado por el cargador de arranque para documentar adecuadamente el hardware en los controladores.

Y así, “archivos de tablero”.


El problema que surge de la mera existencia de un árbol de dispositivos separado, como si todos los sistemas ARM todavía estuvieran ejecutando Open Firmware y los “archivos de placa”, es que Linux tomó una mala decisión arquitectónica.

Esa decisión fue poner las diferencias específicas de la plataforma en el código, en lugar de extender el árbol de dispositivos lo suficiente como para proporcionar una descripción abstracta de los dispositivos en la plataforma ARM específica: generalmente un SoC.

Entonces, si tiene un Linux en ARM, no puede simplemente describir los dispositivos de manera abstracta en el árbol de dispositivos y, por supuesto, agregar cualquier controlador de hardware nuevo, como la vinculación de canales de 4 bits a 8 bits para el controlador de memoria para ciertos tipos de almacenamiento flash desde el que desea arrancar, para que las cosas arranquen el doble de rápido, etc.

Tienes que escribir un nuevo código para cada plataforma.


Ahora admito totalmente que mi propio Darwin-on-Raspberry Pi no usa la abstracción normal de Darwin / Mac OS X.

He codificado cosas que debería haber puesto en el PE ( experto en plataformas ). Pero solo quería subirlo a la única plataforma, y ​​no me importaba, ya que lo hacía por diversión, no como una cosa para publicar.

Apple probablemente se habría quedado sin pegar, si lo hubiera publicado, y todavía estaría hasta el cuello en abogados, alegando que usé la Propiedad Intelectual de Apple obtenida mientras estaba en Apple, para hacer el puerto.

O, para usar una expresión estadounidense más colorida: Ass Deep In Alligators .

Pero no hay ninguna razón por la que no pueda mover el soporte de la placa a un módulo PE para Raspberry Pi.

Bueno, “podría con mucho escribir y maldecir en el JTAG”.


No creo que mucha gente del núcleo de Linux pueda hacer esto.

Ex ingenieros de kernel de Mac OS X / iOS, de varios equipos de CoreOS, sí.

Su mentalidad sigue siendo que debe agregar un montón de código con archivos de soporte de placa para cada plataforma, porque no puede confiar en el árbol de dispositivos que le entrega el gestor de arranque.

Y que desea “aplanar” el árbol de dispositivos en el proceso, y no agregar las anotaciones específicas de la plataforma necesarias para describir completamente el hardware, en el árbol de dispositivos, en lugar de incrustar mucho en los archivos de la placa.


En conclusión …

Si quieres tener todo iOS en plataformas Android en general?

Sí; buena suerte con eso, incluso si violaste los derechos de autor en todas las otras piezas de iOS, seis maneras desde el domingo, y las sacaste de un iPhone con jailbreak para hacerlo.

Simplemente no va a suceder, a menos que algunos empleados actuales o anteriores de Apple extiendan el nuevo código escribiendo PE de referencia para, por ejemplo, Raspberry Pi, y tal vez un par de plataformas BeagleBoard, y tal vez un teléfono Android.

No.

No va a ser tan simple. La fuente del kernel de iOS ha estado disponible durante mucho tiempo. Todo lo que ha cambiado es que Apple ahora ha presentado una versión de la fuente que incluye modificaciones que hicieron para la arquitectura ARM. Cualquier grupo que estuviera lo suficientemente dedicado podría haberlo hecho ellos mismos.

Sin embargo, hay una distancia considerable entre un kernel y un sistema operativo utilizable que funciona. Esto no incluye las diversas aplicaciones que vienen con iOS con las que el usuario interactúa. Entonces, si bien podría instalarlo tal cual en un teléfono, en realidad no sería útil . Probablemente tomaría algunas personas-años de trabajo al menos convertirlo en un sistema operativo de usuario final utilizable para un teléfono.

Hubo dos proyectos que intentaron convertir el Darwin de Apple, que es esencialmente lo mismo para MacOS, en un sistema utilizable. Uno está muerto, el otro no ha publicado una actualización en unos dos años. Ninguno de los dos te permite arrancar y tener algo que realmente se vea y actúe como MacOS.

El núcleo es solo la parte que inicia el teléfono, muchos núcleos están disponibles como código abierto. Esto no es lo que es iOS, y iOS no es de código abierto y nunca será de código abierto.

Esto significa que con un pequeño ajuste, puede arrancar este kernel darwin mínimo en f.ex. una frambuesa pi, no hará nada pero está ahí.

Una parte muy pequeña del núcleo del núcleo de iOS ahora es de código abierto. Ni siquiera puede compilar el código porque faltan partes, y ni siquiera esperar tener iOS completamente desarrollado en su teléfono.

No. El desarrollo de iOS es de código abierto y algunas bibliotecas. No hay todo de código abierto. Swift se convirtió en código abierto. Por lo tanto, no hay forma de instalar iOS en el teléfono Android.