Reciprocity and the conditions that trigger it (I link to your GPL library and so must release my application source code) has never been ruled on from what I've seen.
Courts don't want to be moral arbiters if they can possibly avoid it because questions of morality are inherently political. Contractual relations are a mechanism for dealing with that problematic social reality.
Edit: if it helps, think of contract law as a language specification. The compiler cannot and does not evaluate the worthiness or value of a program, only its semantic consistency. An individual contract is like a program, the law as a whole is like the operating system, institutions are the firmware, physical assets are the hardware. It's an imperfect analogy but it might make the scope issues easier to understand.
From your ethical perspective, yes. From a court's perspective, reciprocity can't be enforced without the existence of a valid contract because there is no legal obligation for people to be nice to each other. Contracts are the mechanism we use to establish obligations between private parties.