Aplicaciones de escritorio con tecnología web por Juanda


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

Etiquetas: desktop web multiplataforma www aplicacion software electron


Las aplicaciones de escritorio son aquellas orientadas a su uso en los ordenadores personales. A diferencia de las aplicaciones web, se instalan directamente sobre el sistema operativo.

En el desarrollo de software uno de los principales problemas que se plantea es conseguir la portabilidad de la aplicación, es decir, la capacidad de que pueda instalarse y ejecutarse sobre distintas plataformas.

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 al crecer el número de usuarios potenciales.

En las aplicaciones compiladas nativamente, la portabilidad se consigue mediante el uso de herramientas que sean capaces de transformar el código fuente al código máquina del procesador y al formato de ejecutable soportado por el sistema operativo. A estas herramientas se les conoce normalmente como toolchain (compilador, enlazador, librerías, etcétera) y 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.

Otro enfoque más práctico a la hora de tratar la portabilidad son los lenguajes basados en máquina virtual. La idea consiste en diseñar la especificación de una arquitectura computacional, la máquina virtual, con su propio código máquina, denominado bytecodes, que pueda ser implementada como una aplicación software sobre sobre las distintas plataformas existentes. De esta manera, con un solo proceso de construcción (compilación) del código fuente se garantiza la ejecución de la aplicación sobre cualquier plataforma donde exista una instancia de la máquina virtual.

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.

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.

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 multiplataforma:

  • 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.

## Aplicaciones basadas en web browser

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 browser o 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 browser que 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.

## Electron: aplicaciones de escritorio con tecnología web

Y es aquí donde entra en juego el proyecto electron.

En principio bastaría con desarrollar librerías de widgets para Node.js o bindigs a librerías existentes 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:

node-qt (https://www.npmjs.com/package/node-qt) node-gtk (https://www.npmjs.com/package/node-gtk)

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, los creadores de electron han tomado un camino alternativo para hacer de Javascript un lenguaje apto para el desarrollo de aplicaciones de escritorio.

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 extensas librerías de widgets típicas en el desarrollo de aplicaciones de escritorio.

Parafraseando a lo que se dice en la página web de electron:

“Construye aplicaciones de escritorio multiplatafoma con Javascript, HTML y CSS”.

“Si puedes construir un website, puedes construir una aplicación de escritorio. Electron es un framework para crear aplicaciones nativas con tecnología web como Javascript, HTML, y CSS. El framework se encarga de las partes difíciles y tu puedes centrarte en el núcleo de tu aplicación”.

La primera versión publicada de electron, tal y como recoge su repositorio de github, data del 15 de julio de 2013. Desde entonces hasta el día de hoy se han desarrollado un gran número de aplicaciones con este framework, entre las que se encuentran algunas muy conocidas como:

Estas aplicaciones por sí solas indican claramente que la estrategia seguida por electron funciona muy bien, y dan al framework la credibilidad suficiente como para que merezca la pena estudiarlo. Al menos para los desarrolladores web.

## Conclusión La portabilidad de las aplicaciones de escritorio se consigue:

  • Con múltiples compiladores.
  • Con Lenguajes basados en máquina virtual.

Las aplicaciones basadas en web browser muy similares a las aplicaciones de escritorio en aspecto, aunque con funcionalidades limitadas.

Electron es un framework Javascript que permite el desarrollo de aplicaciones de escritorio con tecnología web.

Las aplicaciones de escritorio se convierten en un nuevo campo de trabajo para los desarrolladores web.