Cos'è una licenza legata all'iscrizione?
Una licenza legata all'iscrizione è una chiave di prodotto collegata a un'iscrizione attiva invece che a un acquisto una tantum. La copia che il membro ha del tuo plugin, script o bot controlla la chiave a intervalli regolari: funziona finché dura l'iscrizione, si ferma quando l'iscrizione finisce e riprende a funzionare se il membro si iscrive di nuovo. L'iscrizione è la licenza. È la frase che usa Nadi: la tua iscrizione è la licenza.
Perché esiste
Chiunque venda un prodotto che gira — un plugin per un'app di grafica, uno script, un bot, un piccolo strumento web — conosce lo squilibrio. La vendita avviene una volta e il lavoro non finisce mai: un aggiornamento dopo ogni rilascio dell'app che lo ospita, domande, correzioni, e un acquirente di due anni fa che ti scrive ancora.
Un abbonamento sistema il lato economico e lascia aperta una domanda: cosa rende l'abbonamento degno di essere rinnovato? Se il prodotto continua a funzionare nelle mani di chi ha smesso di pagare, rinnovare è una donazione.
Una licenza legata all'iscrizione unisce i due capi. Finché la persona è membro, la sua copia gira. Quando l'iscrizione finisce, si ferma. Quando torna, gira di nuovo. I grandi software professionali funzionano così da anni; la novità è legare la chiave all'iscrizione a una comunità invece che a un singolo acquisto.
Come funziona: una chiave, un controllo e un periodo di tolleranza
Tre pezzi, e ognuno risolve un problema evidente.
- La chiave. Una lunga stringa casuale che appartiene a un membro e a un prodotto. Una piattaforma attenta la conserva rimescolata e non in chiaro, così chi legge il database non può leggere le chiavi.
- Il controllo. Il tuo prodotto manda la chiave a un indirizzo e riceve una risposta breve: valida o non valida. Poche righe dentro il tuo prodotto, e nessun server da gestire.
- Il periodo di tolleranza. Ogni sì arriva con una scadenza firmata. Il prodotto tiene buona l'approvazione fino ad allora e non chiede di nuovo finché non scade, quindi funziona offline. La firma impedisce a chiunque di modificare un file sul proprio computer per prolungarla.
È il periodo di tolleranza a rendere l'idea usabile. Senza, una connessione a internet diventa un requisito per far girare il prodotto, e il tuo cliente smette di lavorare in aereo. Con il periodo di tolleranza, il caso peggiore è che chi se n'è andato continui a lavorare per qualche giorno in più — un prezzo più che giusto per un prodotto che non si rompe.
La domanda che conta di più: cosa succede quando il server delle licenze è fuori servizio
È questo che separa un progetto di cui ti puoi fidare da uno di cui non ti puoi fidare. Il tuo prodotto chiede, e non arriva nessuna risposta: la connessione è caduta, la piattaforma è fuori servizio, la risposta è andata in timeout. Cosa dovrebbe fare il prodotto?
Dovrebbe continuare a funzionare. Solo un rifiuto esplicito — una risposta che dice chiaramente che questa chiave è revocata o sconosciuta — può fermare un prodotto. Il silenzio, un errore e un timeout non sono rifiuti, e trattarli come rifiuti significa che il guasto di qualcun altro rompe il tuo prodotto davanti al tuo cliente.
In una riga: nel dubbio si resta aperti, nella certezza si chiude. Chiedi proprio di questo comportamento prima di costruire su qualsiasi piattaforma, e leggi il codice che ti dicono di incollare nel tuo prodotto. Se tratta un guasto di rete come una revoca, a pagare è la tua reputazione.
Cosa si può onestamente mettere sotto licenza, e cosa no
Il confine è semplice: le cose che girano si possono mettere sotto licenza, quelle che non girano no. Un controllo è il prodotto che telefona a casa, e un file statico non può telefonare da nessuna parte.
- Un plugin, uno script, un'app, un bot: si esegue, quindi può chiedere, e puoi fermarlo. Qui la licenza è reale.
- Un'immagine, un file audio, un documento, un pacchetto di preset: si scarica una volta e si tiene. Niente lì dentro chiede niente a nessuno, e dopo non c'è modo di riprenderselo.
Quindi chiamare «con licenza» un file statico è un'affermazione che nessuno può far rispettare. Il meccanismo onesto per questi file è la porta stessa: è l'iscrizione a permettere il download, e chi se ne va non riceve la versione successiva. È vero ed è utile — semplicemente non è una licenza, e non dovrebbe mai essere venduto come tale.
Cosa chiedere a qualsiasi piattaforma
Bastano sei domande per giudicare qualsiasi realizzazione di questa idea:
- La chiave muore nello stesso momento dell'iscrizione, o con un ciclo mensile o un'operazione notturna?
- Se il membro torna, torna anche la sua vecchia chiave, o deve incollarne una nuova nel tuo prodotto?
- Quanto dura il periodo di tolleranza, chi lo stabilisce, e la risposta è firmata così da non poter essere falsificata?
- Cosa dice l'endpoint quando la piattaforma è fuori servizio: «non posso rispondere» o «non valida»?
- Quante righe richiede l'integrazione, e ti serve un server o un database tuo?
- L'interruttore della licenza viene offerto anche su cose dove non si potrebbe mai farla rispettare? Una piattaforma che ti lascia mettere sotto licenza un file statico ti sta vendendo un'apparenza, non un meccanismo.
Un esempio concreto: come fa Nadi
Nadi è una piattaforma per comunità, quindi questa è la parte in cui descriviamo il nostro prodotto. Solo quello che fa oggi.
- Un proprietario mette sotto licenza un elemento della libreria della sua comunità, e ogni membro riceve la sua chiave, mostrata sulla scheda dell'elemento con un pulsante per copiarla.
- La chiave risulta valida finché l'iscrizione è viva, e risponde REVOKED nel momento in cui muore — che il membro se ne sia andato, sia stato rimosso o il suo abbonamento sia scaduto.
- Quando si iscrive di nuovo, torna in vita la stessa riga, così nessuno deve incollare una nuova chiave da nessuna parte.
- L'integrazione sono circa dieci righe nel tuo prodotto. Controlla la chiave una volta a settimana e nel frattempo continua a funzionare offline.
- Il periodo di tolleranza è di sette giorni per impostazione predefinita, e la risposta è firmata, così il tuo prodotto sa distinguere il nostro token di tolleranza da un file che qualcuno ha modificato sul proprio computer.
- L'endpoint, nel dubbio, resta aperto. Quando non possiamo rispondere lo diciamo, e non diciamo mai «non valida» al suo posto. Un guasto da parte nostra non viene mai travestito da revoca.
- Il proprietario vede chi usa l'elemento, lo stato di ogni titolare — attivo o fermo — e quando il suo prodotto ha fatto l'ultimo controllo.
- Pubblicare una nuova versione dell'elemento avvisa solo chi ha una chiave, non tutta la comunità.
- Il messaggio di rifiuto che vede un ex membro nomina la comunità e dice cosa riporta in vita il prodotto: iscriversi di nuovo.
I limiti, in tutta onestà
Su Nadi niente può essere chiamato «con licenza» finché non ha dimostrato di poterlo essere. L'interruttore resta spento su ogni elemento, file o link, finché il prodotto di quell'elemento non ha chiamato il nostro controllo con una chiave vera almeno una volta — il prodotto dimostra il meccanismo davanti a noi prima che la dicitura «Con licenza» possa comparire sulla sua pagina. Un file che un membro scarica e che non viene mai collegato al controllo non viene quindi mai chiamato «con licenza» da nessuna parte nel nostro prodotto; il suo meccanismo onesto è la porta, dove è l'iscrizione a permettere il download. Spegnere una licenza è sempre consentito.
Restare aperti nel dubbio è un impegno, non una lacuna. L'endpoint risponde «non disponibile» quando non può interrogare il database, e il frammento di codice che ti diamo tratta tutto ciò che non è una risposta esplicita come un permesso a continuare. Vuol dire che chi se n'è andato può continuare a lavorare finché non scade il suo periodo di tolleranza, e lo accettiamo di proposito: i prodotti degli altri non devono rompersi perché un nostro rilascio ha avuto un singhiozzo.
Due ultimi limiti. Una chiave arriva con l'iscrizione, e oggi non c'è modo di averne una senza iscriversi. E una chiave condivisa resta una chiave legata a una sola iscrizione — si ferma quando si ferma quell'iscrizione.