I think that simply allowing people to donate to specific projects would do the job. Perhaps just a little 'donate' button on the download page would do? I don't really see how a general fund could be given out in a fair way. If you go by popularity, then what about the dev who's just getting started, but spending a lot of time on their project. They won't have a popular app yet, and if they don't see the same payments that other devs of more popular projects do, they might tend to give up. Whereas, if you just leave it as a 'donate' button, then if a user feels that the dev is on to something, and thinks that the app is useful, or fun, the user can donate directly to that project.
I don't think that users should be restricted based on their willingness to donate, and I don't think that devs should necessarily expect to get money from this. If that's what they're after, they can sell their software. The problem with restricting users is that you might discourage them from contributing. As fusion_power mentioned, the user could be helpful to the development process, either by testing and debugging, or actual development. That's what open source is about, community development.