È stato pubblicato il rilascio 1.7 della piattaforma P2P Radicle, progettata per creare un servizio decentralizzato di sviluppo collaborativo e archiviazione del codice, simile a GitHub e GitLab, ma non legato a server specifici, non soggetto a censura e funzionante utilizzando le risorse dei partecipanti alla rete P2P. La piattaforma supporta elementi standard di interazione sociale tra sviluppatori, come issue, patch e revisioni del codice. I componenti del progetto sono scritti in Rust e distribuiti sotto licenze Apache 2.0 e MIT. Le build sono disponibili per Linux e macOS. Sono inoltre in fase di sviluppo un client desktop, un'interfaccia web e un'interfaccia da console.
Radicle consente di non dipendere dallo sviluppo e dalla distribuzione del codice da piattaforme e corporation centralizzate, i cui vincoli comportano rischi aggiuntivi (unico punto di errore, la società potrebbe chiudere o cambiare i termini di servizio). Per la gestione del codice in Radicle si utilizza Git, esteso con strumenti per la definizione dei repository nella rete P2P. Tutti i dati vengono prima salvati localmente (concetto local-first) e sono sempre disponibili sul computer dello sviluppatore, indipendentemente dallo stato della connessione di rete.
I partecipanti forniscono accesso al proprio codice e agli artefatti correlati, come patch e discussioni sulle correzioni (issues), che vengono salvati localmente e replicati sui nodi di altri sviluppatori interessati, connessi alla rete decentralizzata P2P comune. Alla fine, si forma un repository Git decentralizzato globale, i cui dati sono replicati e duplicati su diversi sistemi dei membri.
Per la determinazione dei nodi vicini nella rete P2P viene applicato il protocollo Gossip, mentre per la replicazione dei dati tra i nodi è utilizzato il protocollo Heartwood, basato su Git. Poiché il protocollo si basa su Git, è facile integrare la piattaforma con gli strumenti di sviluppo esistenti per Git. Per identificare i nodi e verificare i repository viene utilizzata la crittografia a chiave pubblica, senza l'uso di account. L'autenticazione e l'autorizzazione avvengono sulla base di chiavi pubbliche senza autorità di certificazione centralizzate. server.
Ogni repository nella rete P2P ha un proprio identificatore unico ed è auto-certificato, cioè tutte le azioni nel repository, come l'aggiunta di commit e la scrittura di commenti agli issue, sono convalidate dal proprietario con una firma digitale, che consente di verificare l'integrità dei dati su altri nodi senza l'uso di autorità di certificazione centralizzate. Per accedere al repository è sufficiente che almeno un nodo sia online, in possesso di una copia replicata.
I nodi nella rete P2P possono iscriversi a repository specifici e ricevere aggiornamenti. È possibile creare repository privati, accessibili solo a determinati nodi. Per la gestione e il possesso del repository viene utilizzata la nozione di "delegati". Un delegato può essere un singolo utente, un bot o un gruppo, legati a un identificatore speciale. I delegati possono accettare patch nel repository, chiudere issue e impostare i diritti di accesso al repository. A ciascun repository possono essere associati più delegati.
I repository Radicle sono archiviati sui sistemi degli utenti come normali repository git, all'interno dei quali sono presenti spazi dei nomi aggiuntivi per l'archiviazione dei dati dei peer e dei fork con cui si sta attualmente lavorando. Le discussioni, le patch proposte e i componenti per l'organizzazione delle recensioni sono anch'essi conservati nel repository git come oggetti collaborativi (COB - Collaborative Objects) e replicati tra i peer.
Nel nuovo rilascio:
- È stata rielaborata l'implementazione dei riferimenti firmati (sigrefs - Riferimenti Firmati), che ora include una protezione contro il riutilizzo delle firme. La vecchia struttura del repository consentiva di sostituire il codice con una sua versione precedente, riutilizzando una vecchia firma valida. Per bloccare questo problema, nella nuova implementazione è stato aggiunto un puntatore alla registrazione precedente, coperto dalla firma attuale, creando così una catena continua di modifiche la cui integrità può essere tracciata rispetto alla radice.
- Ampliata la capacità di blocco dei nodi, che ora vengono bloccati a livello di gestione delle connessioni. Se in precedenza veniva bloccata solo la ricezione dei dati, senza limitare la connessione del nodo, ora il blocco viene applicato anche nella fase di stabilimento della connessione con un nodo bloccato e alla ricezione di una connessione da un nodo bloccato.
- È consentito utilizzare qualsiasi riferimento a oggetti Git esterni, ad eccezione dei rami temporanei. In precedenza, erano consentiti solo riferimenti a rami esterni, tag, metadati Radicle, note e oggetti per collaborazione.
- Migliorata l'informatività dei messaggi di errore che si verificano durante il tentativo di eseguire operazioni per le quali l'utente non dispone di diritti sufficienti.
- È stata aumentata l'efficienza delle operazioni di input/output. Gli sviluppatori hanno scoperto che sui nodi in esecuzione da lungo tempo, la combinazione delle impostazioni «journal_mode = WAL» e «synchronous = FULL» nel database SQLite, utilizzato per memorizzare lo stato locale, porta a un elevato volume di operazioni di input/output. Per ridurre il carico, per impostazione predefinita il parametro «synchronous» è ora impostato su «NORMAL», e nel file di configurazione Radicle sono state aggiunte impostazioni per consentire all'utente di modificare i valori di questi parametri.
- È stata risolta una vulnerabilità, le informazioni sulla quale saranno rivelate il 23 marzo. Attualmente si riporta solo che il team di sviluppatori ha eseguito la scansione di tutti i repository pubblici di Radicle e non ha trovato tracce di sfruttamento di questo problema.
Fonte: opennet.ru
