Wat is een lidmaatschapslicentie?
Een lidmaatschapslicentie is een productsleutel die aan een actief lidmaatschap hangt in plaats van aan een eenmalige aankoop. Het exemplaar dat het lid van je plug-in, script of bot heeft, controleert de sleutel volgens een schema: het werkt zolang het lidmaatschap loopt, stopt als het lidmaatschap eindigt, en werkt weer als het lid zich opnieuw aansluit. Het lidmaatschap is de licentie. Dat is de zin die Nadi ervoor gebruikt: je lidmaatschap is de licentie.
Waarom dit bestaat
Wie een product verkoopt dat draait — een plug-in voor een ontwerpapp, een script, een bot, een kleine webtool — kent de scheve verhouding. De verkoop gebeurt één keer en het werk houdt nooit op: een update na elke release van de app waarin het draait, vragen, bugfixes, en een koper van twee jaar geleden die je nog steeds schrijft.
Een abonnement lost de geldkant op en laat één vraag open: wat maakt het abonnement het verlengen waard? Blijft het product werken bij iemand die gestopt is met betalen, dan is verlengen een donatie.
Een lidmaatschapslicentie knoopt de twee uiteinden aan elkaar. Zolang iemand lid is, draait zijn exemplaar. Eindigt het lidmaatschap, dan stopt het. Komt hij terug, dan draait het weer. Grote professionele software werkt al jaren zo; wat nieuwer is, is de sleutel koppelen aan een lidmaatschap van een community in plaats van aan één aankoop.
Hoe het werkt: een sleutel, een controle en een respijtperiode
Drie onderdelen, en elk lost een voor de hand liggend probleem op.
- De sleutel. Een lange willekeurige tekenreeks die bij één lid en één product hoort. Een zorgvuldig platform bewaart hem in onleesbare vorm in plaats van zoals hij geschreven is, zodat niemand die de database leest de sleutels kan lezen.
- De controle. Je product stuurt de sleutel naar één adres en krijgt een kort antwoord terug: geldig of niet geldig. Een paar regels in je product, en geen server die jij hoeft te draaien.
- De respijtperiode. Elk ja komt met een ondertekende vervaldatum. Het product bewaart de goedkeuring zo lang en vraagt pas opnieuw als die verlopen is, dus het werkt offline. De handtekening voorkomt dat iemand een bestand op zijn eigen computer bewerkt om de periode te verlengen.
De respijtperiode maakt het idee bruikbaar. Zonder respijtperiode wordt een internetverbinding een voorwaarde om het product te gebruiken, en ligt het werk van je klant in een vliegtuig stil. Met respijtperiode is het slechtste geval dat iemand die vertrok nog een paar dagen doorwerkt — een heel redelijke prijs voor een product dat niet stukgaat.
De belangrijkste vraag: wat gebeurt er als de licentieserver plat ligt
Dit scheidt een ontwerp dat je kunt vertrouwen van een ontwerp dat je niet kunt vertrouwen. Je product vraagt, en er komt geen antwoord: de verbinding viel weg, het platform ligt plat, het antwoord bleef te lang uit. Wat moet het product doen?
Het moet blijven werken. Alleen een uitdrukkelijke weigering — een antwoord dat duidelijk zegt dat deze sleutel is ingetrokken of onbekend is — mag een product stoppen. Stilte, een fout en een time-out zijn geen weigeringen, en wie ze wel zo behandelt, laat de storing van een ander je product stukmaken waar je klant bij is.
In één regel: bij twijfel open blijven, bij zekerheid dichtgaan. Vraag naar precies dit gedrag voordat je op welk platform ook bouwt, en lees de code die je in je product moet plakken. Behandelt die een netwerkstoring als een intrekking, dan is het jouw reputatie die de rekening betaalt.
Wat je eerlijk kunt licentiëren, en wat niet
De grens is eenvoudig: wat draait, kun je licentiëren; wat niet draait, niet. Een controle is het product dat naar huis belt, en een statisch bestand kan nergens naartoe bellen.
- Een plug-in, een script, een app, een bot: het voert code uit, dus het kan vragen, en je kunt het stoppen. Licentiëren is hier echt.
- Een afbeelding, een audiobestand, een document, een set presets: één keer gedownload en bewaard. Niets erin vraagt iemand iets, en je kunt het achteraf op geen enkele manier terugnemen.
Een statisch bestand gelicentieerd noemen is dus een bewering die niemand kan afdwingen. Het eerlijke mechanisme daarvoor is de deur zelf: het lidmaatschap geeft toegang tot de download, en wie vertrekt, krijgt de volgende versie niet. Dat is waar en nuttig — het is alleen geen licentie, en het mag nooit als licentie worden verkocht.
Wat je elk platform moet vragen
Zes vragen zijn genoeg om elke uitwerking van dit idee te beoordelen:
- Sterft de sleutel op hetzelfde moment als het lidmaatschap, of pas bij een maandelijkse ronde of een nachtelijke taak?
- Komt een lid terug, komt dan zijn oude sleutel terug, of moet hij een nieuwe in je product plakken?
- Hoe lang is de respijtperiode, wie stelt die in, en is het antwoord ondertekend zodat het niet te vervalsen is?
- Wat zegt het endpoint als het platform plat ligt: „ik kan niet antwoorden”, of „niet geldig”?
- Hoeveel regels kost de integratie, en heb je een eigen server of database nodig?
- Wordt de licentieschakelaar aangeboden voor dingen die nooit af te dwingen zijn? Een platform dat je een statisch bestand laat licentiëren, verkoopt je schijn, geen mechanisme.
Een uitgewerkt voorbeeld: zo doet Nadi het
Nadi is een communityplatform, dus dit is het deel waarin we ons eigen product beschrijven. Alleen wat het vandaag doet.
- Een eigenaar markeert een item in de bibliotheek van zijn community als gelicentieerd, en elk lid krijgt een eigen sleutel, zichtbaar op de itemkaart met een kopieerknop.
- De sleutel is geldig zolang het lidmaatschap leeft, en staat op REVOKED op het moment dat het sterft — of het lid nu vertrok, werd verwijderd, of zijn abonnement verliep.
- Wordt hij opnieuw lid, dan komt dezelfde rij weer tot leven, dus niemand hoeft ergens een nieuwe sleutel in te plakken.
- De integratie is ongeveer tien regels in je product. Het controleert de sleutel één keer per week en blijft tussendoor offline werken.
- De respijtperiode is standaard zeven dagen, en het antwoord is ondertekend, zodat je product ons respijttoken kan onderscheiden van een bestand dat iemand op zijn eigen computer heeft bewerkt.
- Het endpoint blijft bij twijfel open. Kunnen we niet antwoorden, dan zeggen we dat, en we zeggen nooit „niet geldig” in plaats daarvan. Een storing aan onze kant wordt nooit vermomd als een intrekking.
- De eigenaar ziet wie het item gebruikt, de status van elke houder — werkt of gestopt — en wanneer hun product voor het laatst incheckte.
- Een nieuwe versie van het item publiceren laat alleen de sleutelhouders weten, niet de hele community.
- De weigeringsmelding die iemand met een verlopen lidmaatschap ziet, noemt de community en zegt wat het product terugbrengt: weer lid worden.
De eerlijke grenzen
Niets op Nadi mag gelicentieerd heten voordat het heeft bewezen dat het dat kan zijn. De schakelaar blijft uit op elk item, bestand of link, totdat het eigen product van dat item onze controle minstens één keer met een echte sleutel heeft aangeroepen — het product laat het mechanisme zien waar wij bij zijn, voordat het woord „Gelicentieerd” op de pagina mag staan. Een bestand dat een lid downloadt en nooit aan de controle koppelt, heet daarom nergens in ons product gelicentieerd; het eerlijke mechanisme daarvoor is de deur, waar het lidmaatschap toegang geeft tot de download. Een licentie uitzetten mag altijd.
Open blijven bij twijfel is een toezegging, geen gat. Het endpoint antwoordt „niet beschikbaar” als het de database niet kan raadplegen, en het stukje code dat we je geven, behandelt alles wat geen uitdrukkelijk antwoord is als toestemming om door te draaien. Dat betekent dat iemand die vertrok mogelijk blijft werken tot zijn respijtperiode afloopt, en dat accepteren we bewust: de producten van anderen mogen niet stukgaan omdat een uitrol van ons haperde.
Twee laatste grenzen. Een sleutel hoort bij een lidmaatschap, en je kunt er vandaag op geen enkele manier een hebben zonder lid te worden. En een sleutel die wordt gedeeld, blijft één sleutel die aan één lidmaatschap vastzit — hij stopt als dat lidmaatschap stopt.