Si va a escribir un sistema operativo para una plataforma móvil, entonces debe considerar algunas decisiones importantes de ingeniería.
- El procesador es relativamente lento, por lo que desea que sea súper eficiente. No es un desperdicio.
- La pantalla debe ser receptiva, por lo que debe hacer todo lo posible con el hardware de renderizado.
- La memoria siempre estará limitada, por lo que necesita el reciclaje de memoria más eficiente posible.
iOS fue el resultado de convertir una pila de software madura (que se remonta a NeXT) y adaptarla para una plataforma móvil.
Es eficiente, ya que ejecuta código compilado nativo.
Utiliza un modelo de representación que explota la GPU, y el hardware siempre proporciona uno.
Su uso de memoria es súper eficiente con memoria no utilizada constantemente y liberada rápidamente para reanudar. iOS es efectivamente una solución de clase de estación de trabajo, reducida a un dispositivo móvil.
Android no es así.
Java es significativamente menos eficiente que el código nativo, se basa en una máquina virtual que requiere múltiples operaciones de CPU para realizar una instrucción VM.
- ¿Debo actualizar mi iPhone 4 a iOS 9? No me actualicé a iOS 8.
- Parece que la etiqueta del icono de una aplicación en iOS 7 sería negra o blanca, según el fondo de pantalla. ¿Cuál es el principio exacto de esto?
- ¿Es posible actualizar mi versión de iPhone 6 iOS a través de iTunes sin tener jailbreak?
- ¿Cuál debería ser la arquitectura de mi servidor de aplicaciones para una aplicación móvil que muestra una fuente de datos?
- ¿Por qué debería volcar un Android e iOS para un Windows Phone?
EDITAR: el nuevo tiempo de ejecución de Android (ART) realmente vuelve a compilar el código de bytes de Java en código nativo para resolver este problema exacto. No tenemos datos sobre cómo esto se compara con el código objeto compilado “correctamente” en términos de rendimiento.
El modelo de representación solo hace un uso parcial de la representación de hardware. Y la diversidad de hardware dificulta el cambio.
El modelo de memoria requiere una tarea de limpieza para ir a buscarlo. Y esto afecta el rendimiento cuando se llena.
Entonces, ¿por qué Google hizo tan extrañas llamadas de ingeniería?
Creo que porque realmente necesitaban llegar al mercado muy rápido. Y en lugar de trabajar durante décadas en su propia solución óptima, recurrió al estante para usar piezas prefabricadas.
El kernel gratuito de Linux y Java, que rápidamente tuvieron que rediseñar para evitar pagar licencias a Oracle.
Las decisiones de ingeniería que sustentan a Android no se trata de hacer la mejor experiencia móvil posible, sino de hacer que la cosa salga por la puerta lo más rápido posible. Hazlo rápido, hazlo barato.
Esa diferencia en ingeniería todavía está con nosotros.