Nel corso degli ultimi anni gli sviluppatori hanno dovuto in gran parte scegliere tra la creazione di software cloud e la realizzazione di applicazioni più tradizionali installate sui singoli dispositivi. Il cloud semplifica la condivisione dei dati tra gli utenti e semplifica l’accesso da qualunque client che possa essere collegato alla rete Internet.
Automerge è un progetto pubblicato su GitHub già da alcuni anni ma che solo in questi giorni ha raggiunto la sua veste più matura.
Gli autori di Automerge hanno messo a punto un modello per lo sviluppo software chiamato local-first software con l’obiettivo di combinare il meglio di entrambi i mondi: software affidabile eseguito localmente abbinato a un’infrastruttura di collaborazione scalabile offline.
Il progetto prende le mosse dal concetto di CRDT (Conflict-free Replicated Data Type) che descrive una struttura di dati che semplifica la realizzazione di soluzioni di archiviazione di dati distribuiti nell’ambito di applicazioni multiutente.
Automerge consente di registrare le modifiche apportate ai dati e quindi riprodurle in altri luoghi in maniera tale che lo stesso risultato venga riprodotto in modo affidabile su ciascun dispositivo.
Con una soluzione come Automerge il programmatore può abilitare senza stress meccanismi di collaborazione in tempo reale all’interno delle applicazioni senza dover implementare complicati algoritmi lato server.
È possibile avere una copia dello stato dell’applicazione in locale su più dispositivi che possono appartenere allo stesso utente o a utenti diversi. Ogni utente può aggiornare in modo indipendente lo stato dell’applicazione sul proprio dispositivo locale, anche offline, e salvarne lo stato. L’approccio di un prodotto come Automerge è complessivamente simile a Git che consente di modificare i file e confermare le modifiche offline.
In ogni caso le modifiche simultanee applicate da dispositivi differenti vengono automaticamente unite (merging) con Automerge senza la necessità di alcun server centrale (la libreria funziona comunque molto bene anche se si decidesse di avvalersi comunque di un server centrale…).
La libreria non si preoccupa del tipo di rete che viene usato; funziona con qualsiasi protocollo di rete orientato alla connessione, ad esempio client-server (ad esempio WebSocket), peer-to-peer (come WebRTC) o interamente locale (i.e. Bluetooth).
Ogni volta che viene apportata una modifica o si verifica l’unione di una modifica proveniente da altri dispositivi connessi in rete, ciò che si ottiene con Automerge è un nuovo “stato” che riflette la modifica stessa.
Il fine ultimo è conservare la cronologia delle modifiche applicate su ogni documento e consentire la ricostruzione dei dati in qualunque momento tornando indietro nel tempo.
Automerge viene distribuito con un’implementazione JavaScript compatibile con Node.js, Electron e i browser moderni. L’implementazione in Rust viene compilata in WebAssembly per l’utilizzo nei browser ed espone un’API C attraverso la quale la libreria può essere ad esempio utilizzata su iOS e su altre piattaforme senza richiedere un motore JavaScript.
“Volevamo una versione veloce ed efficiente di Automerge che fosse disponibile ovunque: nel browser, su qualsiasi dispositivo mobile e persino su microcontrollori come ESP32“, spiegano gli autori del progetto.
Il programmatore può utilizzare la guida rapida di Automerge per utilizzare la libreria per la sincronizzazione e l’unione delle modifiche applicate sugli stessi dati con pochi minuti di lavoro. Tanto di cappello.