If a project starts having large companies relying on it, traditionally there have been 2 mechanisms to address this:
- start a company around providing enterprise support services;
- ask for the large companies to provide some resources such as a part (or all) of an employee's time to work on the project, for the parts that are more dear to that company.
If a company is unwilling to pay, either in the form of a support contract or employee's time, it should look at another solution. Not just because they are being disrespectful/annoying/distracting to the maintainers of the OSS project but also because it means they don't have a good contingency plan for when things go wrong.
For a larger business, the value of using OSS is not to save money, it's to get the right level of customization for specific needs.
You are forgetting about a third tool in the toolbox. Licenses. If you don't want your open source work to be used for profit select a license that is restrictive.
Ok but sometimes you don't care or encourage this as long as you don't have to support it for free. And you even expect companies not to be assholes taking but not giving back - not enforcing but if it's the nth ticket or bug from mega Corp X that profit from it then let them solve it themselves.
"Fix it yourself" is not a full solution to this problem. It takes time to review and merge pull requests. Especially if some well staffed team is dropping a large chunk of code for a relatively esoteric use case. It will inevitably take a lot of back and forth to work it into the right form for the project's primary goals, and it may never fit. If a company really depends on a project, it behooves them to contribute financially through a license or employment, or to maintain a fork.
- start a company around providing enterprise support services;
- ask for the large companies to provide some resources such as a part (or all) of an employee's time to work on the project, for the parts that are more dear to that company.
If a company is unwilling to pay, either in the form of a support contract or employee's time, it should look at another solution. Not just because they are being disrespectful/annoying/distracting to the maintainers of the OSS project but also because it means they don't have a good contingency plan for when things go wrong.
For a larger business, the value of using OSS is not to save money, it's to get the right level of customization for specific needs.