Tutanota es un servicio de correo electrónico seguro y de código abierto que ha estado disponible como una aplicación para el navegador, iOS y Android. El código de cliente se publica bajo GPLv3 y la aplicación de Android está disponible en F-Droid para que todos puedan usar una versión completamente libre de Google.
Debido a que Tutanota se enfoca en el código abierto y se desarrolla en clientes Linux, queríamos lanzar una aplicación de escritorio para Linux y otras plataformas. Al ser un equipo pequeño, rápidamente descartamos crear aplicaciones nativas para Linux, Windows y MacOS y decidimos adaptar nuestra aplicación usando Electron.
La terminal de Linux
- Los 7 mejores emuladores de terminal para Linux
- 10 herramientas de línea de comandos para el análisis de datos en Linux
- Descargar ahora:hoja de referencia de SSH
- Hoja de trucos de comandos avanzados de Linux
- Tutoriales de línea de comandos de Linux
Electron es la opción ideal para cualquier persona que quiera enviar aplicaciones multiplataforma visualmente consistentes, rápido, especialmente si ya hay una aplicación web que necesita liberarse de las ataduras de la API del navegador. Tutanota es exactamente ese caso.
Tutanota se basa en SystemJS y Mithril y tiene como objetivo ofrecer comunicaciones de correo electrónico simples y seguras para todos. Como tal, debe proporcionar muchas de las funciones estándar que los usuarios esperan de cualquier cliente de correo electrónico.
Algunas de estas funciones, como las notificaciones automáticas básicas, la búsqueda de texto y contactos, y la compatibilidad con la autenticación de dos factores, son fáciles de ofrecer en el navegador gracias a las API y los estándares modernos. Otras funciones (como las copias de seguridad automáticas o la compatibilidad con IMAP sin involucrar a nuestros servidores) necesitan un acceso menos restringido a los recursos del sistema, que es exactamente lo que proporciona el marco Electron.
Si bien algunos critican a Electron como "simplemente un envoltorio básico", tiene beneficios obvios:
- Electron le permite adaptar una aplicación web rápidamente para escritorios Linux, Windows y MacOS. De hecho, la mayoría de las aplicaciones de escritorio de Linux se crean con Electron.
- Electron le permite llevar fácilmente el cliente de escritorio a la paridad de funciones con la aplicación web.
- Una vez que haya publicado la aplicación de escritorio, puede usar la capacidad de desarrollo gratuita para agregar funciones específicas de escritorio que mejoran la facilidad de uso y la seguridad.
- Y por último, pero no menos importante, es una excelente manera de hacer que la aplicación se sienta nativa e integrada en el sistema del usuario mientras mantiene su identidad.
Satisfacer las necesidades de los usuarios
En Tutanota, no dependemos del dinero de grandes inversionistas, sino que somos un proyecto impulsado por la comunidad. Hacemos crecer nuestro equipo de forma orgánica en función del número cada vez mayor de usuarios que se actualizan a los planes de pago de nuestro servicio freemium. Escuchar lo que quieren los usuarios no solo es importante para nosotros, es esencial para nuestro éxito.
Ofrecer un cliente de escritorio era la característica más buscada por los usuarios en Tutanota, y estamos orgullosos de poder ofrecer clientes de escritorio beta gratuitos a todos nuestros usuarios. (También implementamos otra característica muy solicitada:búsqueda de datos cifrados, pero ese es un tema para otro momento).
Nos gustó la idea de proporcionar a los usuarios versiones firmadas de Tutanota y habilitar funciones que son imposibles en el navegador, como notificaciones automáticas a través de un proceso en segundo plano. Ahora planeamos agregar más funciones específicas de escritorio, como compatibilidad con IMAP sin depender de nuestros servidores para que actúen como proxy, copias de seguridad automáticas y disponibilidad sin conexión.
Elegimos Electron porque su combinación de Chromium y Node.js prometía ser la mejor opción para nuestro pequeño equipo de desarrollo, ya que solo requería cambios mínimos en nuestra aplicación web. Fue particularmente útil usar las API del navegador para todo cuando comenzamos, reemplazando lentamente esos componentes con versiones más nativas a medida que avanzábamos. Este enfoque fue especialmente útil con las descargas de archivos adjuntos y las notificaciones.
Tuning de seguridad
Sabíamos que algunas personas mencionan problemas de seguridad con Electron, pero encontramos que las opciones de Electron para ajustar el acceso en la aplicación web son bastante satisfactorias. Puede usar recursos como la documentación de seguridad de Electron y la Lista de verificación de seguridad de Electron de Luca Carettoni para ayudar a prevenir percances catastróficos con contenido no confiable en su aplicación web.
Lograr la paridad de características
El cliente web de Tutanota se creó desde el principio con un protocolo sólido para la comunicación entre procesos. Utilizamos trabajadores web para mantener la representación de la interfaz de usuario (UI) receptiva mientras encriptamos y solicitamos datos. Esto resultó útil cuando comenzamos a implementar nuestras aplicaciones móviles, que usan el mismo protocolo para comunicarse entre la parte nativa y la vista web.
Es por eso que cuando comenzamos a construir los clientes de escritorio, muchos enlaces para cosas como notificaciones automáticas nativas, abrir buzones de correo y trabajar con el sistema de archivos ya estaban allí, por lo que solo se tuvo que implementar el lado nativo (nodo).
Otra conveniencia fue nuestro proceso de compilación utilizando el transpilador Babel, que nos permite escribir el código base completo en JavaScript ES6 moderno y módulos de utilidades de combinación entre los diferentes entornos. Esto nos permitió adaptar rápidamente el código para las aplicaciones de escritorio basadas en Electron. Sin embargo, nos encontramos con algunos desafíos.
Superar desafíos
Si bien Electron nos permite integrarnos con los entornos de escritorio de las diferentes plataformas con bastante facilidad, ¡no puede subestimar la inversión de tiempo para hacer las cosas bien! Al final, fueron estas pequeñas cosas las que tomaron mucho más tiempo de lo que esperábamos, pero también fueron cruciales para terminar el proyecto del cliente de escritorio.
Los lugares donde el código específico de la plataforma fue necesario causaron la mayor parte de la fricción:
- La administración de ventanas y la bandeja, por ejemplo, todavía se manejan de maneras sutilmente diferentes en las tres plataformas.
- Registrar Tutanota como el programa de correo predeterminado y configurar el inicio automático requería sumergirse en el Registro de Windows y asegurarse de solicitar al usuario acceso de administrador de una manera compatible con UAC.
- Necesitábamos usar la API de Electron para accesos directos y menús para ofrecer funciones estándar como copiar, pegar, deshacer y rehacer.
Este proceso se complicó un poco por las expectativas de los usuarios de cierto comportamiento, a veces no directamente compatible, de las aplicaciones en diferentes plataformas. Hacer que las tres versiones se sintieran nativas requirió cierta iteración e incluso algunas adiciones modestas a la aplicación web para ofrecer una búsqueda de texto similar a la del navegador.
Resumiendo
Nuestra experiencia con Electron fue muy positiva y completamos el proyecto en menos de cuatro meses. A pesar de algunas funciones que consumen bastante tiempo, nos sorprendió la facilidad con la que pudimos enviar una versión beta del cliente de escritorio Tutanota para Linux. Si está interesado, puede sumergirse en el código fuente en GitHub.