I think you need to be very careful when talking about 'paying back as much as you get'. It is very easy to underestimate even what a small contribution is worth. If somebody improves the kernel then that fix potentially benefits millions. The correct measure of contribution is not simply how much of the code base was improved but that multiplied by how many people it benefited. For clearly it is absurd to expect a company to contribute back the value it received to countless other people. Such a thing would be contributing millions of times more than you received.
Anyway that is how I would look at it. Measure benefit to the company as number of lines of code* used multiplied by the number of deployments. Measure contributions by a similar measure of number of lines contributed multiplied by the number of people using it. It is clear that even tiny amounts of contributions can easily outstrip what you've used yourself.
*I realise that LOC is not a good measure in practice. The concept still stands though. It is work contributed multiplied by the number of times it is used that matters in both directions.