Thanks all for the ideas and comments.
Yes, some good points to consider.
To carry on the discussion;
I'm not trying to develop an invincible licencing system here (likely that's not possible and I don't want to use dongles etc), and I am developing my own one-person project on a shoe string, so paying $3k for an off the shelf solution is never going to happen.
I just want to stop it from being easy to send a licence to another developer or "get away" with one licence instead of 5 for example. Legit users will pay up, but the determined ones will get around it no matter what, so I won't bother trying to stop them. I kind of think there should be a "Developers Honour" vibe anyway - ripping off your fellow developers is bad karma IMO. Niaieve? Probably.
In answer to the developers using a run-time licence for dev. I might be missing something here, but the idea is that a run-time licence key is generated by the customer when their software is ready to ship - i.e. built and ready to go - this then makes the licence application-locked as opposed to the machine-locked developer licence key used for developing the application.
Licence I'm thinking is just a file that gets distributed with the library, so can be switched between dev and run-time as needed. My licence code will be able to tell which licence type it is (dev/r-t indicator in an encrypted block in the licence file?)
The dev licence keys would have to be activated/created by calling in to a key-issuing web service from a tool I supply with the software. The user will supply some info like name and email address. The tool will take something machine specific. All gets sent to the web service, which returns a licence file containing the personal info (raw text copy as well?), and a hash (SHA then, not MD5!)
At run-time, my library loads the licence key file (either dev or run-time), and validates the licence accordingly (verifies node its running on or the app that's calling it). I could allow user code to call in as suggested, passing the licence key file stream.
Will this work or am I really barking mad?
Cheers.