Tutanota è un servizio di posta elettronica open source sicuro disponibile come app per browser, iOS e Android. Il codice client è pubblicato sotto GPLv3 e l'app Android è disponibile su F-Droid per consentire a tutti di utilizzare una versione completamente priva di Google.
Poiché Tutanota si concentra sull'open source e si sviluppa su client Linux, volevamo rilasciare un'app desktop per Linux e altre piattaforme. Essendo un piccolo team, abbiamo rapidamente escluso la creazione di app native per Linux, Windows e MacOS e abbiamo deciso di adattare la nostra app utilizzando Electron.
Il terminale Linux
- I 7 migliori emulatori di terminale per Linux
- 10 strumenti da riga di comando per l'analisi dei dati in Linux
- Scarica ora:cheat sheet SSH
- Cheat sheet sui comandi avanzati di Linux
- Esercitazioni sulla riga di comando di Linux
Electron è la scelta ideale per chiunque desideri distribuire rapidamente applicazioni multipiattaforma visivamente coerenti, soprattutto se esiste già un'app Web che deve essere liberata dalle catene dell'API del browser. Tutanota è esattamente un caso del genere.
Tutanota si basa su SystemJS e Mithril e mira a offrire comunicazioni e-mail semplici e sicure per tutti. In quanto tale, deve fornire molte delle funzionalità standard che gli utenti si aspettano da qualsiasi client di posta elettronica.
Alcune di queste funzionalità, come le notifiche push di base, la ricerca di testo e contatti e il supporto per l'autenticazione a due fattori, sono facili da offrire nel browser grazie alle API e agli standard moderni. Altre funzionalità (come i backup automatici o il supporto IMAP senza coinvolgere i nostri server) richiedono un accesso meno limitato alle risorse di sistema, che è esattamente ciò che fornisce il framework Electron.
Mentre alcuni criticano Electron come "solo un involucro di base", ha ovvi vantaggi:
- Electron ti consente di adattare rapidamente un'app Web per desktop Linux, Windows e MacOS. In effetti, la maggior parte delle app desktop Linux sono create con Electron.
- Electron ti consente di portare facilmente il client desktop alla parità di funzionalità con l'app web.
- Una volta pubblicata l'app desktop, puoi utilizzare la capacità di sviluppo gratuita per aggiungere funzionalità specifiche per desktop che migliorano l'usabilità e la sicurezza.
- E, ultimo ma non meno importante, è un ottimo modo per far sembrare l'app nativa e integrata nel sistema dell'utente mantenendone l'identità.
Soddisfare le esigenze degli utenti
In Tutanota, non ci affidiamo al denaro di grandi investitori, piuttosto siamo un progetto guidato dalla comunità. Facciamo crescere il nostro team in modo organico in base al numero crescente di utenti che effettuano l'aggiornamento ai piani a pagamento del nostro servizio freemium. Ascoltare ciò che gli utenti vogliono non è solo importante per noi, è essenziale per il nostro successo.
Offrire un client desktop era la caratteristica più richiesta dagli utenti in Tutanota e siamo orgogliosi di poter ora offrire client desktop beta gratuiti a tutti i nostri utenti. (Abbiamo anche implementato un'altra funzionalità molto richiesta, la ricerca su dati crittografati, ma questo è un argomento per un'altra volta.)
Ci è piaciuta l'idea di fornire agli utenti versioni firmate di Tutanota e abilitare funzioni impossibili nel browser, come le notifiche push tramite un processo in background. Ora prevediamo di aggiungere altre funzionalità specifiche per desktop, come il supporto IMAP senza dipendere dai nostri server per fungere da proxy, backup automatici e disponibilità offline.
Abbiamo scelto Electron perché la sua combinazione di Chromium e Node.js prometteva di essere la soluzione migliore per il nostro piccolo team di sviluppo, poiché richiedeva solo modifiche minime alla nostra app web. È stato particolarmente utile utilizzare le API del browser per tutto quando abbiamo iniziato, sostituendo lentamente quei componenti con versioni più native man mano che procedevamo. Questo approccio è stato particolarmente utile con i download di allegati e le notifiche.
Ottimizzazione della sicurezza
Eravamo consapevoli del fatto che alcune persone citano problemi di sicurezza con Electron, ma abbiamo trovato le opzioni di Electron per la messa a punto dell'accesso nell'app Web abbastanza soddisfacenti. Puoi utilizzare risorse come la documentazione sulla sicurezza di Electron e l'Electron Security Checklist di Luca Carettoni per prevenire incidenti catastrofici con contenuti non attendibili nella tua app web.
Raggiungere la parità di funzionalità
Il client web Tutanota è stato costruito fin dall'inizio con un solido protocollo per la comunicazione tra processi. Utilizziamo i web worker per mantenere l'interfaccia utente (UI) reattiva durante la crittografia e la richiesta di dati. Ciò è stato utile quando abbiamo iniziato a implementare le nostre app mobili, che utilizzano lo stesso protocollo per comunicare tra la parte nativa e la visualizzazione Web.
Ecco perché quando abbiamo iniziato a creare i client desktop, c'erano già molti binding per cose come le notifiche push native, l'apertura di cassette postali e il lavoro con il filesystem, quindi doveva essere implementato solo il lato nativo (nodo).
Un'altra comodità è stata il nostro processo di compilazione utilizzando il transpiler Babel, che ci consente di scrivere l'intera base di codice nel moderno JavaScript ES6 e di combinare moduli di utilità tra i diversi ambienti. Questo ci ha permesso di adattare rapidamente il codice per le app desktop basate su Electron. Tuttavia, abbiamo incontrato alcune difficoltà.
Superare le sfide
Sebbene Electron ci consenta di integrarci abbastanza facilmente con gli ambienti desktop delle diverse piattaforme, non puoi sottovalutare l'investimento di tempo per ottenere le cose giuste! Alla fine, sono state queste piccole cose che hanno richiesto molto più tempo di quanto ci aspettassimo, ma sono state anche cruciali per completare il progetto del client desktop.
I punti in cui era necessario il codice specifico della piattaforma hanno causato la maggior parte dell'attrito:
- La gestione delle finestre e il vassoio, ad esempio, sono ancora gestiti in modi leggermente diversi sulle tre piattaforme.
- La registrazione di Tutanota come programma di posta predefinito e la configurazione dell'avvio automatico hanno richiesto l'immersione nel registro di Windows assicurandosi di richiedere all'utente l'accesso come amministratore in modo compatibile con UAC.
- Dovevamo utilizzare l'API di Electron per scorciatoie e menu per offrire anche funzionalità standard come copia, incolla, annulla e ripeti.
Questo processo è stato un po' complicato dalle aspettative degli utenti riguardo a determinati comportamenti, a volte non direttamente compatibili, delle app su piattaforme diverse. Rendere le tre versioni native richiedeva alcune iterazioni e persino alcune modeste aggiunte all'app Web per offrire una ricerca testuale simile a quella nel browser.
Conclusione
La nostra esperienza con Electron è stata ampiamente positiva e abbiamo completato il progetto in meno di quattro mesi. Nonostante alcune funzionalità piuttosto dispendiose in termini di tempo, siamo rimasti sorpresi dalla facilità con cui siamo riusciti a fornire una versione beta del client desktop Tutanota per Linux. Se sei interessato, puoi immergerti nel codice sorgente su GitHub.