Commercial users of Open Source should at least donate generously to projects they use and depend upon. Preferably, they should also hire maintainers or pay support contracts.
Getting some donations is probably not that hard, but getting donations received in a project to a sufficient level so that the money can actually be used to something constructive is difficult.
You will find that donations are primarily done by individuals, and with rather small amounts that require a huge following for the amount to build up. Companies who could be able to pay more rarely do that via donations or sponsorship. Companies prefer to have invoices to pay. Selling something might be easier to get company money.
Making a living out of donations is rare.
Most Open Source projects start out as a one-person hobby thing that ideally grows into multiple contributors, but still only as a collection of random humans under a name on the Internet. Receiving money from companies and individuals when not having a legal entity can be tricky.
Fortunately, there are several collectives and foundations you can join these days that will help your project receive and hold on to money for the sake of your project. Usually, at the price of a percentage of the revenue.
Many projects are run by a single person and many such individual persons accept donations.
As a donor or sponsor, thinking about the difference between sponsoring a person and a project can be worthwhile exercise. In many cases there might not be a distinct difference, but in others there might.
Donating to a single person will probably help further that person's efforts into their projects, which might push the project further that you think they should work on. But donating to a single person will also help that human to easier buy food or raise their family with that funding, while donating to a project often makes that a slightly trickier endeavor due to reasons explained above.
Sponsors and donations to Open Source projects are indeed welcome and often necessary, and they can certainly help to cover expenses and make life easier for lots of people involved. However, it is rare for the donated amount to actually reach a level at which they can actually be used to employ developers.
When the donated amounts, while welcome, are not enough to replace a person's income it can be hard to use it for development. People have full-time jobs with responsibilities, mortgages to pay and families to feed. Taking time off work to do part-time assignments for an Open Source project for hire is only possible for a rare few. Lots of employers even forbid their employees from doing it.
A close sibling to donations is the grant. It is usually a donation in disguise that you have to apply for. To motivate and to give a proper reason for why you need the money and what you intend to spend it on. Applying for a grant can be time and energy consuming. The donor might also require benefits and actions in return for giving money to you. Some grants are not even monetary but rather free use of that company's services or similar.
A big difference is of course that donations are often given because of something you have already done and managed to perform, while grants are usually for something you think you want to going forward.
Grants have some of the same difficulties as getting companies to pay: "maintenance" is rarely seen as sexy work worth spending money on. They rarely pay enough for people to quit their jobs so you still end up with the challenge of work vs spare time as with all other donations.