Licensing a commercial product
This is another forum question, this time from Brendan Rice:
A lot of developers are unsure of how best to go about making money from a product, how do you go about implementing licensing, what pay system do you use, how do you accept payment, are there any legal issues...
Well, talk about an open ended question. There are several aspects for the answer, legal, licensing and payment processing. There are somewhat related, though.
From the legal side, you need to understand basic concepts in the legal side of software engineering. You need to understand copyright, the idea of licensing software, what rights you care about and what you shouldn’t. I got a lot of my knowledge from simply researching the topic.
You might want to have a lawyer draft your EULA, but there are two major things that you want to remember about the EULA. Some people actually read the bloody things. If you put things there that are too nefarious people will get pissed at you. There is such a thing as bad publicity. You want to avoid that.
The second important thing about EULA is that if you take someone to court over it, you have already lost. I like to think about EULA as just setting the grounds for what is expected from either side. By all means, get that through your lawyer, but be sure that you know what is in there. And be sure that it is an agreement that you would be willing to sign.
From the licensing perspective, I had a disastrous experience using one licensing component, after which I decided that I might as well write my own. It is a pretty simple system, based on signed XML files, I have the secret private key and the application ship with the public key. It allows to pass data around in a very simple form while protecting the license files from tampering. The code is available, and it is pretty simple, so I won’t get deeper into it.
The last part, payment processing, is probably the most interesting bit. I use a payment provider, because trying to manage something like that yourself is a nightmare. My payment provider handles all sort of payment options, including things that require someone to answer the phone or manually clear mailed checks, etc.
They also provide nice admin site, where I can do things like generate coupons, like this one: NHP-45K2D46S27 (yes, it is a valid one, at least until someone will use it), refund people, taxation, view interesting reports and in general administer all aspects of the accepting payments.
They take a commission that isn’t significantly larger than most credit cards and in general they solve so much headache that I am happy to pay them.
The result of a successful order in the payment provider is an email generated that is sent to a mailbox monitored by a service. That email is read, parsed, and the corresponding license file is then sent to the user.
Nothing really earth shattering in all the process, yes, I know. But it is probably important to outline that clearly for people who haven’t done it yet. It isn’t complex or hard by any measure.
Comments
Ok, I'll bite. Who do you use for your payment provider?
swreg
Aside from licensing enforcement, developers also have to think about binaries protection and reversing. I'd love to know you idea.
I am having trouble with XHEO customer service right now (like, in the last three hours). I did a search for XHEO reviews and found a blog post that linked to your original post about your problems with them. I thought it was wild that you were having these problems probably within weeks of me becoming a regular reader of your blog.
Now I come back to do my daily read of your blog and you reference the same post. What are the chances?
Van,
I didn't, I don't like obfuscation.
I know people are going to succeed in trying to hack NH Prof, they always do.
I made it just hard enough that you would have to work on it.
Oren & Van,
Peldi of Balsamiq fame has an interesting take on this subject.
Take a look at this blog post from him: www.balsamiq.com/.../my-views-on-software-piracy/
the coupon doesn't seem to work. somebody must have used it already.
Comment preview