If you've been following along up to now you'll be familiar with what we mean by "software" and also "secure." That leaves perhaps the most mis-understood term, "licensing." Let's look at that today.
I have in my wallet a driver's license, which gives me the right to drive a car in those jurisdictions that recognize its validity (currently all of the United States and many other parts of the world). Along with that right is a restriction to obey the laws governing motor vehicle use. Right now my license says I can drive a non-commercial vehicle as long as I'm wearing my glasses but I can't ride a motorcycle anymore.
When you buy or sell software, you don't really get to "own" but instead you get a license that allows you to use it under the restrictions that are in place. These restrictions are usually spelled out in legalese in a document called an End User License Agreement or EULA.
Now in a perfect world that document would be all we need to make sure no one violated our license agreements. But it's not a perfect world.
Besides, we want to have licensing rules that optimize our business model. So some of the licensing that might be interesting includes:
- Pay per user: the most traditional style--each user pays for a license and they can use the software in perpetuity.
- Pay per time (subscription): More normal with SaaS software, but with the right licensing system this is easy for desktop applications as well.
- Pooled or floating licenses (concurrency): You have a block of licenses (say 10 for example's sake) and they can be used by anyone on the network until all 10 are in use. The next person who wants one has to wait until a license is freed up by someone exiting the program.
- Pay per use: In this model, each time the program is run there is a fee required. For simplicity's sake you can sell blocks of usage credits in advance; the licensing system has to decrement those credits each time the software is run.
- Pay per feature: Perhaps the most obscure of all, and normally the most difficult to implement. In this model, some aspects of the software are metered by their own licenses. A trivial example would be a program that charges extra to save a file or print a document.
- Maintenance period: Many ISVs charge a separate maintenance fee to customers to cover the cost of support and any releases that ship during the contract period (typically a year at a time). With maintenance period licensing, you can simplify ensuring that only customers currently under contract can run the releases.
- Trial and/or demo versions: A trial is typically a full version but time limited. A demo is frequently a crippled version with some functionality removed (like saving data or work). Either should be easily enabled by a licensing solution without you having to branch your code and develop new stuff.
- Internet activation: Your customers should be able to buy, download, and activate their software over the Internet without jumping through a lot of hoops. You, as the ISV, should be able to offer this via an ecommerce website that easily connects to your license management system, your back-end systems like ERP and CRM, and to your application with minimal fuss and bother. A good license management system will handle this for your via XML/SOAP web services.
Again, if all we had was a EULA to enforce these models we'd be out of luck; too many people are willing to violate these licensing agreements, as the BSA knows all too well. So we need a "secure software licensing" system that provides the security to enforce the license rules and restrictions. CodeMeter is designed to do just that.