Personally, I've always favored free software - that is, no money requested at all.
I don't mind charging for the cost of a CD, shipping and handling,
but I'm not comfortable charging $500 for a program which can be dup'ed over and over for free.
This is why I'm a strong supporter of Linux - it's all free.
Sure, there are some programs which cost money, but you don't have to use those. I don't.
Microsoft is all about money - they have billions, yet they still charger over $100 for most of their apps. Why?
As for protection, since I offer my material free, I wouldn't need it.
If a company asked me to write protection for them, I could probably make something virtually uncrackable.
But remember this - anytime someone else cracks your code, you can ask them how they did it and use that information to make your code more secure against future cracks.
Learning is important to me. If I can learn something new because someone cracked my code, I'm all for it.
I just hope people out there are willing to try.
This means the question to ask is:
Can you write code which will outlast someone's interest in trying to crack it?
This is really a matter of someone being willing to put the time and effort into doing the crack. If they give up before the job is done, then you have won. You have to make your code really tedius and time-consuming it you wish to have a chance of your code being "secure".