Aplicaciones web, de escritorio y multiplataforma por Juanda


Publicado el jue 15 marzo 2018 por Juanda
Categoría: desarrollo

Etiquetas: desktop web multiplataforma www aplicacion software electron


En el desarrollo de software uno de los principales problemas que se plantea es el esfuerzo necesario para que una aplicación pueda ejecutarse sobre distintas plataformas, es decir, sobre distintas combinaciones de sistema operativo y arquitectura del procesador.

Los desarrolladores de aplicaciones de escritorio se enfrentan especialmente con este problema ya que están destinadas al uso en ordenadores personales y, cuantas más plataformas soporte mayor difusión tendrá la aplicación creciendo el número de usuarios potenciales.

Las aplicaciones de escritorio se instalan directamente sobre el sistema operativo y las herramientas necesarias para transformar su código fuente al código máquina del procesador y al formato de ejecutable soportado por el sistema operativo, lo que se conoce normalmente como toolchain(compilador, enlazador, librerías, etcétera) varían de una plataforma a otra.

Incluso el código fuente puede variar en ciertos detalles en función de la plataforma de destino. De ahí que el esfuerzo en el desarrollo y mantenimiento de una aplicación crezca con el número de plataformas soportadas.

La máquina virtual vino a aliviar el problema de la portabilidad de aplicaciones mediante una idea muy potente: la de diseñar la especificación de una arquitectura hardware que pudiese ser implementada como una aplicación software sobre sobre las distintas plataformas existentes y que fuese capaz de ejecutar programas especificados en su propio código máquina (bytecodes) sobre la plataforma en que dicha máquina virtual se ejecute.

El caso más conocido de este modelo es, sin duda alguna, el lenguaje de programación Java. Pero también entran en este saco los lenguajes Python, PHP o Javascript. Aunque solo Java y Python han sido utilizado tradicionalmente en el desarrollo de aplicaciones de escritorio.

Entre la plétora de lenguajes de programación existentes podemos identificar a los siguientes como los más utilizados para el desarrollo de aplicaciones de escritorio:

  • Plataforma Windows

    • Visual C++
    • Visual Basic
    • C/C++ con Qt o GTK
    • Java con AWT o Swing
  • Plataforma MacOS

    • Objective-C/Swift con Cocoa
    • C/C++ con Qt o GTK
    • Java con AWT o Swing
  • Plataforma Linux

    • C/C++ con Qt o GTK
    • Java con AWT o Swing

tanto Windows como MacOS tienen su propia tecnología para el desarrollo de aplicaciones de escritorio pero también vemos tecnologías portables entre las tres plataformas tanto compiladas (C/C++ con Qt o GTK) como basadas en máquina virtual (Java con AWT o Swing).

En todos los casos se utilizan librerías de widgets (Qt, GTK, AWT, Swing) para la confección de la interfaz gráfica de usuario (GUI). Los widgets son los elementos visuales de control que componen una interfaz gráfica. El empleo de estas librerías, a pesar de que existen aplicaciones que ayudan bastante, exige enfrentarse a intensas sesiones de estudio pues el nº de widgets, propiedades y eventos que exponen es muy elevado.

Así pues, estrictamente hablando una aplicación es multiplataforma cuando se ha construido para varias plataformas distintas y, por tanto, puede utilizarse en cualquiera de ellas, ya sea directamente compilada o basada en máquina virtual. No obstante, las aplicaciones basadas en máquina virtual adquieren el rango de multiplataforma en el momento en que son escritas, ya que las plataformas más utilizadas; Windows, MacOS y Linux, disponen de la máquina virtual y pueden ejecutar dichas aplicaciones una vez compiladas a los bytecodes intermedios de la máquina virtual. Por eso cuando hablamos de aplicación multiplataforma, por abuso del lenguaje, solemos referirnos a aplicaciones que se ejecutan sobre una máquina virtual.

En 1992 aparece en escena la Word Wide Web, con el protocolo de comunicación HTTP y el lenguaje de marcado HTML con el que se producen los documentos intercambiados en la red. Y con la Word Wide Web aparece el browsero navegador, un nuevo tipo de aplicación de escritorio que en poco tiempo se convertiría en absolutamente imprescindible. Con el browser podemos solicitar e interpretar las páginas web escritas en código HTML y ofrecidas por los servidores web y pintarlas correctamente en la pantalla.

Al poco tiempo, en 1994, aparecen las CSS’s un lenguaje de estilos mediante el cual se puede controlar el aspecto con el que se dibuja una página web basándose en las etiquetas, clases y otros atributos que permite el lenguaje HTML.

Más adelante, al HTML se le añadió soporte para formularios con los widgets más típicos de las aplicaciones de escritorio (cuadros de textos, botones, desplegables, cajas de selección, etcétera), de manera que desde una página web se puede enviar datos a los servidores web que pueden procesar para construir dinámicamente las páginas devueltas. Es el origen de la aplicación web.

Pero el elemento que realmente añadió potencia al navegador fue la incorporación de un intérprete (máquina virtual) para un lenguaje de script denominado Javascript. Esto permitía, además de pintar páginas web y enviar datos a través de los formularios, ejecutar código en el propio navegador.

Manipular el aspecto de la página web, enriquecer los elementos de la misma, realizar cálculos, realizar peticiones HTTP asíncronas son algunas de las tareas que se han realizado tradicionalmente con javascript. Sin embargo, con el tiempo, el uso de javascript se ha extendido y generalizado de manera que actualmente se distribuyen mediante la web aplicaciones completas escritas en Javascript con el aspecto de aplicaciones de escritorio.

El acceso de calidad a internet con factores de disponibilidad elevados ha provocado que el desarrollo de aplicaciones web se haya incrementado exageradamente durante los últimos años, y se puede hablar de una tendencia general de los productores de software a ofrecerlas como servicio (SAAS, Software As A Service). Por poner algunos ejemplos:

  • Google ofrece un amplio conjunto de aplicaciones web entre las que destaca una suite ofimática.
  • Microsoft también ofrece algunas de sus aplicaciones estrella, como la suite microsoft office como aplicaciones web.
  • Todos los bancos ofrecen a sus clientes una aplicación web mediante la que consultar y operar con sus cuentas.
  • Las redes sociales como facebook, twitter, instagram, basan su funcionamiento en aplicaciones web.
  • Y muchísimos más ejemplos.

Podemos considerar, por tanto, a la aplicación web como otro tipo de aplicación multiplataforma, ya que allá donde se encuentre un browser, se podrá ejecutar una aplicación web.

Sin embargo existen una diferencia fundamental entre las aplicaciones web y de escritorio:

  • Las aplicaciones de escritorio se instalan localmente en el equipo, mientras que las aplicaciones web son cargadas en el navegador a través de la red mediante peticiones a servidores web.

Es decir, la aplicación web requiere de una conexión a internet (o a la red donde vivan sus servidores) para su funcionamiento. Esto supone una enorme ampliación de las fuentes desde donde descargar código malicioso que podría, eventualmente, provocar daños en la computadora donde se ejecute.

Por ello, todo browser que se precie muestra las páginas y/o aplicaciones web en procesos aislados denominados sandboxes. En dichos procesos las aplicaciones tienen acceso a un conjunto reducido de recursos, todos limitados al ámbito del browser. Por ejemplo no se puede acceder al sistema de ficheros para cargar o guardar archivos en la carpeta que deseemos. O no se puede utilizar directamente la cámara sin solicitar permiso del usuario. Tampoco se puede integrar completamente la aplicación en el sistema de ventanas del sistema operativo puesto que se ejecuta en una ventana del browser, que es el que realmente está integrado al ser una aplicación de escritorio.

La conclusión es que, aunque la aplicación web (en la parte cliente, es decir la que se ejecuta en el browser no en el servidor) cada vez se parezca más a una aplicación de escritorio, no puede ser considerada como tal al estar supeditada su ejecución sobre el browserque limita sus capacidades.

El amplio interés y demanda de aplicaciones web, ha convertido al lenguaje Javascript en uno de los más demandados y exitosos. Tanto es así que Javascript ha trascendido la frontera del browser y se está utilizando también para el desarrollo de aplicaciones que se ejecutan directamente sobre el sistema operativo, siguiendo el modelo de máquina virtual, es decir como Java o Python. El responsable de este salto desde el browser al sistema operativo ha sido el proyecto Node.js, y ha permitido desarrollar la parte servidora de la aplicación web también en Javascript, de manera que actualmente se puede emprender el desarrollo de una aplicación web completamente en Javascript, es decir tanto la parte cliente que se ejecuta en el browser como la parte que se ejecuta en el servidor.

Actualmente Node.js se utiliza fundamentalmente para desarrollar servidores web y herramientas de desarrollo como grunt o gulp. Pero en el momento en que Javascript se independiza del browser y se puede utilizar directamente sobre el sistema operativo a través de su máquina virtual, como Java o Python, estamos a un pequeño paso de poder desarrollar aplicaciones de escritorio con Javascript.

Basta con desarrollar bindigspara Node.js a librerías de widgets como Qt o GTK y ya tendríamos las herramientas necesarias para crear aplicaciones de escritorio con Javascript. Y, por supuesto, hay algunos proyectos como:

que están trabajando en esa línea.

Sin embargo, teniendo en cuenta que desde sus orígenes Javascript ha estado vinculado al browser y a la creación de interfaces gráficas con HTML + CSS, existe una línea de trabajo alternativa para hacer de Javascript un lenguaje apto para el desarrollo de aplicaciones de escritorio, que es la que proponen los creadores del proyecto electron.

Se trata de utilizar Node.js para la parte de la aplicación que requiere una integración más íntima con el sistema operativo, es decir la parte que requiere hacer uso de llamadas al sistema. Y usar el motor de renderización del browser Chromium para mostrar la interfaz gráfica de usuarios.

Esta manera de enfocar el problema permite a los muchísimos programadores de aplicaciones web introducirse en el mundo del desarrollo de aplicaciones de escritorio con muy poco esfuerzo, reduciendo la curva de aprendizaje a una cuesta con apenas desnivel, ya que cuentan con el conocimiento del lenguaje Javascript y con el de la construcción de interfaces gráficas HTML+CSS+Javascript. Gracias al uso del motor de renderizado del browser, se evita la necesidad de aprender las complicadas y costosas librerías de widgets típicas en el desarrollo de aplicaciones de escritorio.