Key thing you missed for the agreement.
They shouldn't be allowed to sell their new version of your code as an independant component, only within a larger project as a "building block". Otherwise, if I'm a component vendor, I can resell your stuff by changing a few property names and fixing a bug ... personally I don't think thats shouldn't be part of the rules.
They can submit the change back to you and if you don't take it on you get the right to say "Yes they can or no they can redistribute" ... possibly you open a market place to allow them to resell their "flavour" of yours or something as a seperate business model. BUT get first right of refusal.
The good and bad to consider.
- Everyone can see how you did it. If its tricky or unique then you have given stuff away.
- You will be asked a million questions about some decision you made that the average developer doesn't understand ... either setup a stackoverflow tag to answer them under like Xamerin (MonoTouch) do OR understand your potentially going to be stuck providing lots of support to the newbies.
- Customers feel safer "taking the risk" because its not a closed entity. Nothing worse than investing in a component that looks fantastic from a new vendor and 6 months later you discover that they got bored and no longer sell and support the component. This is one of the major barriers to entry for new players, selling the source is the key way of mitigating this problem.
- You get feedback and improvements from your customers. If you in it for the long haul this is a key way to gain acceptance and win over people to talk about you "they included MY patch in their main product!!!", with a thankyou in the About page on the website this goes a long way both with product improvement and with marketing ground swell.
- You have an additional revenue stream from selling the source code.
- You could have an additional revenue stream providing "support tickets" for newbies wanting to hassle you personally. Individuals aren't likely to pay but larger companies will pay to get the answer sorted and let them get on with the $2M project that is now running behind.
The component vendors generally aren't doing anything super special or tricky with their development, people pay because its hours they haven't had to spend themselves developing and debugging. If your stuff fits into this "save me time" catagory then your pretty safe that your not giving away anything.
Lastly the legal agreement.
You want more detail because I can type in email@example.com and you have no idea who it was that just got the source code so you have no way of enforcing the agreement (thus may as well not have it).
More importantly you want to ask for all their other details like country, name, company, EMAIL, etc for marketing and demographic understanding so that you know exactly who to target with advertising and who to contact again when you have "Awesome component #2" to sell.