Sabe que es un tema que me preocupa. Y como ya conté en alguna ocasión, me ha llevado por la calle de la amargura durante bastante tiempo.
Un servidor tiende a utilizar desde hace unos cuantos años varios sistemas operativos al día. OS X como escritorio, Windows/Linux para portátil, Android/Windows Phone para móvil e iOS para tablet. Eso sin contar con los devices que voy probando (firefox os, ubuntu os,…).
Entiendo que mi caso no es el habitual, pero quien más quien menos tiene al menos a su alrededor dos sistemas operativos distintos, y entre ellos sigue habiendo las mismas imcompatibilidades de antaño.
Dicho sea de paso que el auge de los lenguajes web e Internet ha democratizado algo el sector. La mayoría de herramientas en cada SO son incompatibles entre sí, pero cuentan con un servicio web que sí es compatible entre ellas, por lo que en la práctica los problemas se reducen.
Y aun así, sigue rondándome en la mente el porqué ninguno de los grandes ha querido dar un paso en firme en este sentido. Cuando estás arriba, no te resulta interesante que haya compatibilidad.
Apple lo está dando, pero dentro de sus fronteras. OS X e iOS son y seguirán (al menos por ahora) siendo dos sistemas operativos distintos, pero gracias a continuity, la interacción entre uno y otro se acerca. El poder contestar llamadas «nativamente» desde el escritorio, o seguir con lo que estamos haciendo en el móvil es un claro ejemplo.
Ahí está Google, que parte con la ventaja de tener un claro dominio en el mundo de internet. Y sin embargo, optó por un Android que a cada paso es menos open source y más código privado. Basado en Java, sí, y con Linux por abajo, pero en la práctica imcompatible con el resto. Que tenemos emuladores, pero no eso NO ES compatibilidad.
De Linux a secas ni hablo. Hay problemas de compatibilidad entre las propias distribuciones, como para esperar que se pongan de acuerdo y alguien lidere la batalla. Canonical es de lejos la que mejor posicionada está, y ese Ubuntu Phone, si al final acaba saliendo, sería el primero en apostar de lleno por la convergencia móvil/escritorio. Dentro de Linux, eso sí.
Y así llego a Microsoft, una empresa que ha sabido renovarse, y que a cada paso apunta maneras. Aquí no voy a hablar de si te gusta Windows 8 o no. Aquí hablamos de una compañía que cuenta con las herramientas suficientes para dar el paso definitivo. Y lo mejor de todo, que tiene la necesidad/presión suficiente para llevarlo a cabo.
Con Android/iOS monopolizando el móvil, y OS X recogiendo a los clientes insatisfechos de Windows, lo que necesita Microsoft es que Windows Phone funcione.
Y un servidor que lleva unos meses probándolo da fe ciega de las buenas intenciones. Ahora bien, lo que echa para atrás a cualquier posible comprador de dispositivos móviles es la compatibilidad. Lo que algunos llaman «el tener WhatsApp«, pero llevado al resto de aplicaciones.
Aquí la cosa flojea si es de los míos. Para el grueso de la sociedad la tienda de Windows Phone tiene todo lo necesario. Está WhatsApp, sí, y Twitter, y Facebook, y …
Pero tienen la necesidad de engordar las cifras de apps, y hay dos alternativas en la mesa: compatibilizar desarrollos externos (Android principalmente) o incentivar su plataforma como universal.
El primero es el esperado. Si yo puedo desarrollar para Android y portarlo sin problemas a WP, pues hago eso. Y el resultado será una amalgama de aplicaciones «medio-nativas» sin compatibilidad real con los live tiles y demás características únicas del ecosistema Windows. Ha habido intentos semejantes y tienen siempre el mismo final.
El segundo es el que de verdad me parece interesante. Con un Visual Studio gratuito, con un .NET que ahora es open source, con la gestión asíncrona que ofrece Windows y la compatibilidad de lenguajes (ojo a Cordova para webapps), Microsoft tiene las herramientas perfectas para posicionarse como plataforma universal.
Ojo que no hablamos ya de hacer apps para Windows, y luego portarlas. Hablamos de hacer aplicaciones universales, y luego empaquetarlas para cada sistema. Microsoft lo que ofrece es la plataforma, las herramientas, no sus sistemas operativos. Cada una con sus peculiaridades.
A nivel técnico es posible (EN), y si se hace bien, casi transparente de cara al desarrollador, que tendrá que adaptar ligeramente cada desarrollo antes de darle a compilar (de eso no nos vamos a librar en la vida).
Y el resultado es una Microsoft que recupera pastel ya no como proveedor de servicios, sino como plataforma (lo primero seguramente acabe llegando). Una Microsoft en la cresta de la ola, haciendo las cosas bien, y demostrando que es ahora más abierta que nunca.
Ese sería un camino interesante para la informática. Por supuesto, habrá que ver si acaba llegando :).
el camino es duro y no resulta conveniente para muchos. que yo conozca apache flex es la tecnologia que esta mas cerca de esta idea. con el ecosistema de flash y flexjs
Buen aporte Rodrigo. Le echaré un ojo.
En cierto modo Microsoft ya está intentando dar el paso hacia las apps universales, pero en su ecosistema. El paso que están dando ahora con Windows 10 es el de universalizar las apps de escritorio y las del teléfono.
Es decir, los desarrolladores se van a ver mas tentados en crear para windows porque su app no solo va a estar en la tienda de aplicaciones de la Windows Phone Store, sino tambien en la de Windows Store; y esta segunda cuenta con muchísimas apps.
Según mi entender, es un gran paso y una muy buena estrategia. Puede funcionar, o puede que no. Llegado el caso que no funcione, se rumorea que el plan b es que se puedan correr apps de Android en Windows Phone; pero muchos dicen lo contrario, llevar las apps de Windows a los otros sistemas y asi tentar a los usuarios mostrándoles el buen funcionamiento.
En fin, creo que todos estos movimientos hacen muy bien a nosotros, los usuarios finales!
pd: excelente artículo!
Así es Ignacio. De hecho intenté evitar el término Universal Apps ya que es el que usaron oficialmente para referirse a estas apps. En el artículo intento ir un poco más allá.
Ya no tanto a desarrollar para Windows y portarlo al resto de plataformas, sino desarrollar en el ecosistema de desarrollo de Microsoft, y que este porte con ligeras variaciones el proyecto nativo para cada plataforma, como puede ser Windows/WP, Android, iOS, OS X,…
Eso sí que sería una pasada. Y técnicamente, como puedes observar en el hilo de reddit que linkeo, es posible. Tienen las herramientas y tienen la presión necesaria para realizarlo. Solo falta que den el paso.
Al menos bajo mi humilde punto de vista, claro.
Saludos, ¡y muchas gracias por el comentario!
Creo que partes con un error cuando hablas de «servidor», según entiendo haces referencia a un usuario, pero al hablar de servidor se puede entender como un computador que sirve de servidor, y entre un servidor y un usuario existe mucha diferencia.
Cuando hablas de .Net y su universalidad, olvidas que todo lo que Microsoft hace no responde a ningún estandar, lo que hace que su desarrollo sea cerrado a sus plataformas.
El desarrollo de aplicaciones universales es complicado, pues debes desarrollar aplicaciones para distintas arquitecturas. Aquí es donde debo inmediatamente señalar que NO SE PUEDE usar la misma arquitectura en todos lados, pues una arquitectura para tablets o smartphones no te entrega la potencia que un computador de escritorio o una laptop. Por otro lado, creo que has dejado de lado lo que Google está haciendo con sus Chromebook.
Saludos.
Buen aporte Felipe, y perdona por los mareos.
A veces uso servidor para referirme a mí, a un servidor. El problema viene cuando en artículos como este servidor también es usado para referirse a un ordenador que trabaja como servidor.
.NET empezó como un lenguaje propietario. No tiene estándares por el simple hecho de que es un lenguaje propio. Pasaría lo mismo con Java, con C, con Perl y con el resto. Las estandarizaciones vienen después, y en este caso, al haber sido propietario, venían de la propia compañía, que hacía y deshacía a su antojo.
Veremos ahora como evoluciona al volverse abierto…
Y totalmente de acuerdo con el tema de la arquitectura. La cuestión es la siguiente: Hablamos de que el desarrollador tuviera que programar la lógica y la presentación de la aplicación. A nivel de arquitectura, debería ser el propio compilador el que «colocara» cada cosa en su sitio. Partiendo de un XML real y la típica estructura MVC, a nivel técnico debería ser posible.
Claro está que a veces habría que pedir trabajo al desarrollador (hay features en cada SO que requieren que se programen), pero en todo caso hablamos de cosas puntuales, no de tener que reescribir todo el código para cada SO.
con respecto a .NET solo el «core» es Open Source. (no WPF,WCF,etc que son las cosas mas interesantes)
apache-cordova en un proyecto open source que no es de microsoft.
El dia que .NEt corra nativamente en linux… sera otra cosa (Mono dev es un jueguete comparada con la version de .NET de windows)
Saludos.
Tengo entendido que ya corre nativo en OS X (o que estaban en ello). Me suena haberlo leído, pero tómalo con pinzas.
Y sí, faltar falta mucho trabajo. Eso está claro. Pero oye, que han dado los primeros pasos. A ver si lo continúan… :P.
Platicaba con un conocido que es programador, me mostraba como a traves de visual e incorporando un ide(creo que eso menciono) se podia crear app de android. Mi pregunta y duda al final por los dos fue, si se hace un programa para android en un programa diseñado para programas de windows, pero que estos van para la plataforma android, acaso no deberian de poder instalarse en windowsphone si usando visual tambien se incluian en su diseño algunas dll o scripts de visual. Deberia posiblemente pero no pasa esto, terminamos concluyendo nuestra platica.
Pero, acaso si se lograra hacer eso, programas de android en windowsphone, podria tambien alguno de windowsphone pasarse a android ahora que en visual ya esta incorporado el ide, o aun asi los mantiene por aparte y solo esta dando la oportunidad a los desarrolladores de no estar pasando de ide en ide, cuando con visual lo manejarian todo en un solo lugar.
El funcionamiento actual dbillyx es el siguiente. Hay entornos de desarrollo, como el de Visual Studio, que permiten elegir qué tipo de proyecto vas a hacer (uno por ejemplo para android, otro para WP).
Tu programas en un entorno de windows, pero en la práctica lo haces con la tecnología de Android (Java).
El paso medio, es programar con tecnologías webs, y luego portarlas mediante intermediarios al resto de sistemas.
Lo que comentamos aquí, sería que indiferentemente del lenguaje que usáramos, en vez de elegir al principio qué queremos desarrollar, hiciéramos algo como lo comentado en el paso medio, pero que al portarlo al resto de sistemas, se portara nativamente (sin intermediarios).
El trabajo por tanto lo hace el entorno de programación, no el programador, que debería desarrollar una vez, y luego adaptar ligeramente a cada sistema en ese «porting» seudo-automático.
Y hablaba de Microsoft porque como señalas es quizás la que mejor está preparada para ello (VS tiene su propio emulador de Android). De Google o de Apple no esperes que salga la iniciativa, porque directamente no les interesa.
Saludos!
En fin, preparada o una estrategia para abarcar mas mercado.
Excelente artículo, totalmente de acuerdo. Creo que la única variable en la ecuación que faltó agregar fue Xamarin, con los guiños que han habido entre MS y los de Icaza, parece que tarde o temprano terminarán siendo uno solo, teniendo un Visual Studio gratuito y con una herramienta REAL para crear código multi-plataforma, se puede hacer realidad la panacea.
Así es Jimmy. Xamarin. Es una de mis asignaturas pendientes. Siempre digo que me tengo que poner a usarlo y al final, entre el trajín diario…
En fin, que es posible que el futuro pase por ahí. O al menos por algo bastante parecido a eso. hoy en día, es lo más cercano.
Saludos, y muchas gracias por el comentario.