Mantener una misma aplicación en múltiples plataformas mediante un desarrollo nativo tienen la desventaja de prácticamente duplicar el coste de mantenimiento, tener que arreglar los mismos bugs una vez por plataforma, la posibilidad de introducir bugs que sean específicos para una plataforma y por tanto más difíciles de identificar, y la necesidad de optimizar la aplicación para cada plataforma, entre otros inconvenientes.
La solución que Dropbox ha adoptado para resolver estos problemas en sus desarrollos para iOs y Android es un tanto curiosa; quizás podrías pensar inicialmente que se habrán ido por una solución del estilo de Apache Cordova. Sin embargo han hecho justo lo contrario: en vez de ir a alguna solución de más alto nivel, han implementado una capa en C++ que contiene los algoritmos "core" para todo el funcionamiento de Dropbox.
Dentro de esta capa tienen una instancia de la base de datos SQLite que es la que en cada momento indica qué es lo que hay que sincronizar, y un servicio responsable de llevar a cabo estas actualizaciones contra los servidores de Dropbox. También cuenta con una cola de operaciones que tienen que ser realizadas, y un thread que va extrayendo operaciones de esa cola y las va ejecutando.
Este código en C++ es portado a Objective C++ y empleado en Android a través del Android Native Development Kit (aunque en este segundo caso parece que es más complicado pasar de C++ al código de la plataforma móvil). De este modo consiguen tener una única implementación de la lógica de la aplicación, y en cada plataforma sólo tienen que implementar la interfaz de usuario.
Sin duda, el problema de Dropbox es un problema un tanto particular, y esta solución no será adecuada para muchos contextos. Pero no deja de ser curioso que su forma de haber resuelto el problema de dar soporte a varias plataformas diferentes haya sido apostar por un lenguaje de programación de más bajo nivel. ¿Qué te parece esta estrategia?