Friday, February 26, 2010

Building a licensing system... thoughts on EULA's

In software development, it seems as if the devil is in the details.  You just get a great whizz-bang product built, spent 100's of hours on getting every last detail to work just the way it needs to in order to work in the market.  Now, it's time to sell the product.

Initial thoughts from potential customers are hopeful, but a few create a backlash with you.  They say that you're asking for too much for the product, and then come back and purchase a license anyhow.  What do you do to control them from distributing your product 100's of times?  Ahh... the need for product licensing just arose.

Now, although there are 1,000's of tools on the market for just this situation, I have decided to roll my own.  My reasoning comes from the not-invented-here attitude, meaning that I do want a bit of the god-like control over how the software system works.  I have special needs that I only know about, and that I don't want anyone to have the intellectual knowledge of how I did it just yet, because I want to avoid having an end user override my licensing scheme until after I have it written.  I have done many different projects, and they all have a custom list of what needs to be controlled.  I also don't like the fact that I've not seen much where the EULA can be created in a single format, and then exported to PDF/RTF/HTML/etc., so that's another sticking point.

The system will be constructed of the following:
  • a WPF application that will allow data entry.
  • a WCF web service to allow license key activation.
  • a website (v2) to allow end-users to purchase and issue their own keys.
  • 1 dll per product to handle licensing.  This will lend to better custom rules needed on a per-product or per-addin scenario, where buying an off-the-shelf product may not be able to handle this as well.
So far, I've adopted the use of Markdown for formatting the EULA's and can enter reseller information.  Adopting Markdown allows the quick and easy transformation of the text into HTML, and can then eventually have a converter written to move it to other formats, or use the HTML and create that into other formats.  Once I can complete the task of entering the rest of the product information, I will publish a few wireframe screenshots to the web for anyone that is interested in my progress as I go.

My hope is that I can get something respectable that will work for my needs, and maybe market this little tool to other software developers as time goes on.