Difference between revisions of "Support emulation projects"

From Emulation General Wiki
Jump to navigation Jump to search
(Help with technical documentation)
(copyedit and adding more info. what's commented out can also be explained to readers.)
Line 1: Line 1:
 
'''''WIP page, help wanted.'''''
 
'''''WIP page, help wanted.'''''
  
There are several ways to support or contribute to an emulation project (or similar projects such as [[Compatibility layers]], [[Game engine recreations]] or simulators). Explained here are different ways you can get involved, even if you have low technical skill and no money.
+
There are several ways to support or contribute to an emulation project (or similar projects such as [[compatibility layers]], [[game engine recreations]] or simulators). Explained here are different ways you can get involved, even if you have low technical skill and/or no money.
 +
 
 +
Note that almost all these methods require getting involved in some way. Offering to help in a specific area may not be necessary in some cases, so you'll have to check with each project you're interested in to determine what they're looking for and what they find useful.
  
 
==Testing & bug reporting==
 
==Testing & bug reporting==
 +
One area you may be able to help in is reporting information, especially if you notice bugs in games that you play. This can be done a number of ways, but they all help the developer see where the emulator still has to improve.
 +
 
''more text here...''
 
''more text here...''
  
 
=== Compatibility reporting ===
 
=== Compatibility reporting ===
  
A compatibility report communicates the emulation quality. It is aimed at other users.
+
A compatibility report communicates the emulation quality. It is aimed at other users, and often consists of a compatibility list.
 
 
<!-- Sending users to GitHub is dangerous - you should only do it if the project has a simplified compatibility list which doesn't require technical understanding / writing; most projects actually uses wikis or custom tools / websites for compatibility reporting -->
 
  
Some emulators use GitHub for their compatibility list.
+
Some emulators use GitHub for their lists. Most projects have instructions on how they should be written. Make sure you search to see if any issues you're having has already been encountered by another user. Note that sending users to GitHub is dangerous - you should only do it if the project has a simplified compatibility list which doesn't require technical understanding / writing; most projects actually use wikis or custom tools / websites for compatibility reporting. Some use spreadsheets and forms to get their data.
Create a GitHub account, most projects have instructions on how bug reports should be written, make sure you search to see if the issues is already brought up by another user, in that case just add your observation to that report.
 
  
 
''more text here...''
 
''more text here...''
 
  
 
=== Bug reporting ===
 
=== Bug reporting ===
  
A bug report is about one specific problem. It is aimed at emulator developers.
+
A bug report concerns one specific problem. It is aimed at emulator developers.
  
 
Because bug reports are meant for developers, they are expected to be more technical than a compatibility report.
 
Because bug reports are meant for developers, they are expected to be more technical than a compatibility report.
Bug reports are typically expected to include details about specific situations when the problem arises, but also technical details as to why it happens.
+
They're also typically expected to include details about specific situations when the problem arises, but also technical details as to why it happens.
 
Developers also read compatibility reports and create respective bug reports themselves.
 
Developers also read compatibility reports and create respective bug reports themselves.
  
''If you are not a software developer, you probably shouldn't do bug reports.''
+
Sometimes you need a fair bit of experience in order to report bugs to the major projects. If you lack the experience to match what developers themselves report then most smaller projects are fine with it as long as you try to make it coherent and professional. Many projects have the program set up to automatically forward logs to developers at the user's discretion. This can avoid having to explain the problem, though sometimes they'll want context in case they need to reproduce it.
  
 
Generally you should chat to other developers / maintainers (via IRC or Discord) before creating a bug report.
 
Generally you should chat to other developers / maintainers (via IRC or Discord) before creating a bug report.
Often they are aware of issues and have grouped them under a technical term.
+
Often they are aware of issues and have grouped them under a known technical term.
  
 
''more text here...''
 
''more text here...''
Line 37: Line 37:
 
Despite being aimed at developers, users should read / follow bug reports they care about.
 
Despite being aimed at developers, users should read / follow bug reports they care about.
  
Many emulators not only need games tested in the emulator, but also on real hardware.
+
Many emulators not only need games tested in the emulator, but also on real hardware, because games aren't perfect. If you've been involved with the speedrunning community, you ''know'' bugs exist, and can be taken advantage of to get a faster time.
Sometimes it looks like there's a bug in the emulator, but it might be a bug in the game, so it also happens on the console.
+
Determining what is a bug in the game and what is inaccurate emulation can prevent developers from wasting time on problems they didn't create. All projects encounter this at some point; even the testers behind [[Dolphin]] encounter [https://www.youtube.com/watch?v=kd29mWwp5c8 bugs that happen on hardware].
So you can possibly prevent developers from wasting time on bugs which aren't really bugs in the emulator.
+
Ideally, you should have a capture card for recording footage from hardware.
Ideally, you have a capture card to record footage as proof.
 
  
Also, during the research and documentation phase, some developers will write small programs to test hardware behaviour.
+
During the research and documentation phase, some developers will also write small programs to test hardware behavior.
In some cases the developers don't have access to the physical hardware or they need test results from many users.
+
In some cases the developers don't have access to the physical hardware or they need to confirm results by having multiple users run the tests. This can also be done in cases where the code doesn't work on all hardware revisions, and the developer needs to test it on all revisions to understand where each model has deficiencies; sometimes they don't have all models, but the more accuracy-focused projects will have this covered in some way. Hackers and those in the homebrew scene may have documented these deficiencies already.
You can follow developer chat-rooms, so you can offer your help with running tests and collecting data from real hardware.
+
You can follow developer chat-rooms, and offer assistance by running tests and collecting data from real hardware.
  
 
==Provide support for end users==
 
==Provide support for end users==
Discord, IRC, forums
+
Helping and guiding other users through problems is one of the pillars of open communities. If there's one thing a developer doesn't want to have to do alone, it's troubleshoot problems that end users get themselves into. Providing support for end-users will allow developers to focus on the software they make, creating a filter that allows actual bugs to be reported and saving time in the process. You also need a slight sense of confidence to make decisions for the user. For most people who work in IT (or just Google their problems), this comes naturally.
  
 +
Support can be provided on a Discord server, IRC server, or a project's forums.
  
 +
==Write & promotion==
 +
Outreach and promotion is an important factor in the success of an emulator because it gets people talking about it, especially emulators for newer consoles that make strides in their efforts regularly.
  
==Write & promotion==
+
This can be done by writing official blog posts, posting news on social media, providing information, making videos for YouTube, explaining and summarizing changelogs, etc.
Write blog posts, promote news, provide information, make videos on YouTube, explain change logs, etc.
 
  
== Archival and hardware donations ==
+
== Archival & hardware donations ==
  
Optical discs like CD or DVDs have a limited lifespan, they degrade over time and will eventually be unreadable.
+
Optical discs like CD and DVDs have a limited lifespan. They degrade over time and will eventually be unreadable to a disc reader.
There is projects like [http://wiki.redump.org/index.php?title=Redump.org redump.org] which are focused on identifying all officially released discs.
+
Projects like [http://wiki.redump.org/index.php?title=Redump.org Redump] are focused on identifying all officially released discs.
 
Each known disc is stored with information which makes it possible for users to verify the correctness of their disc.
 
Each known disc is stored with information which makes it possible for users to verify the correctness of their disc.
 
Contributing to these databases (by dumping your discs and contributing metadata) helps to build a full-set for testing emulators.
 
Contributing to these databases (by dumping your discs and contributing metadata) helps to build a full-set for testing emulators.
 
It also encourages users to make legal backups of their discs before they break.
 
It also encourages users to make legal backups of their discs before they break.
  
Game databases like [https://www.mobygames.com/ MobyGames] can be used find additional information for each game. Launchers can use the uploaded descriptions and cover-artwork. You can contribute by scanning you game artwork, finding and adding game information (such as release dates).
+
Game databases like [https://www.mobygames.com/ MobyGames] can be used to find additional information for each game. Launchers can use the uploaded descriptions and cover artwork. You can contribute by scanning your game artwork, finding and adding game information (such as release dates).
MobyGames also stores barcodes and serial numbers which can be used to find releases in redump.org.
+
MobyGames also stores barcodes and serial numbers which can be used to find releases in Redump's database.
 
You can look at the existing cover artwork and extract such information.
 
You can look at the existing cover artwork and extract such information.
  
Alternatively, you can also donate games or hardware to developers or other volunteers who are accepting such donations.
+
You can donate games or hardware to developers or other volunteers who are accepting such donations.
 
Donated games can then be analyzed by the recipient and their information can be added to databases such as those listed above.
 
Donated games can then be analyzed by the recipient and their information can be added to databases such as those listed above.
Emulator developers usually require a large number of consoles, games and peripherals (controllers, memory cards, ..), so donations are typically welcome.
+
Emulator developers usually require a large number of consoles, games, and peripherals (controllers, memory cards, ..), so donations are typically welcome.
 
Depending on the project structure these will be forwarded to people who are in need of such hardware.
 
Depending on the project structure these will be forwarded to people who are in need of such hardware.
Contact project maintainers to find out more.
+
Contact project maintainers to find out what they accept.
  
 
== Help with technical documentation ==
 
== Help with technical documentation ==
  
Emulators depend on technical emulation about the systems they emulate.
+
Emulators depend on technical documentation about the systems they emulate.
Typically, there are dedicated communities (often includes people from emulation, homebrew and piracy scene) for these research and documentation tasks.
+
Typically, there are dedicated communities (often including people from the homebrew scene, and much less commonly the piracy and warez scene) for these research and documentation tasks.
  
These research communities often uses Wikis which need to be maintained.
+
These research communities often uses wikis that need to be maintained.
 
Beginners can help by fixing typos or formatting. For some of these tasks, no coding skills are required.
 
Beginners can help by fixing typos or formatting. For some of these tasks, no coding skills are required.
 
Advanced users and developers can contribute their own research, or participate in technical discussions.
 
Advanced users and developers can contribute their own research, or participate in technical discussions.
  
 
Many of these communities also maintain their own tools which can be helpful for ROM dumping or testing emulation.
 
Many of these communities also maintain their own tools which can be helpful for ROM dumping or testing emulation.
These tools are often written in beginner-friendl programming languages (such as C# or Python) and can be stepping-stone for moving towards actual emulator development.
+
These tools are often written in beginner-friendly programming languages (such as C# or Python) and can be stepping-stone for moving towards actual emulator development.
  
 
=== Communities ===
 
=== Communities ===
Line 90: Line 91:
  
 
== Learn how to code and help out ==
 
== Learn how to code and help out ==
WIP
+
A pretty obvious one, but it should be stated that most open-source emulation projects don't get nearly enough support in the programming area. Bigger projects often have an abundance of developers to constantly check on the code and make sure it's written well, but those are rare, so most projects are often one man operations or have few (if multiple) developers. Many projects are actively looking for programmers, so if you have knowledge in systems programming and such, you could definitely be of help.
 +
 
 +
Programming for the emulator itself isn't even necessary, as many projects are in need of websites and CI integration. If the emulator doesn't use stable builds (or all that exists are instructions for compiling from source), you could implement a CI and integrate it with the website so you can get it to host precompiled builds for users. CIs are also useful because they can run the program with test ROMs to ensure that compatibility isn't broken between commits. The major projects will have this covered. Sometimes older project developers don't like to change the website's infrastructure, so you're better off handling projects for which there is no existing website.
 +
 
 +
If you're experienced with Linux, you can help port a program to your distribution (or mostly every distro if the main developers are already considering something like AppImages).
  
 
==Donate money==
 
==Donate money==
  
Emulation development is a time intensive task. It's only fair to reward the contributors.
+
Emulator development is a time-intensive task. A lot of projects could use some money, especially ones where they often don't get it when they should. Some projects are simply possible because the developers have money from their existing job to be able to fund their efforts on the emulator. Sometimes it goes a long way in helping archivists on the team hunt for rare items.
  
However, emulator development is often a group effort and there is no fair way to distribute money.
+
Many projects are often a group effort, so from a user's perspective there's no fair way to distribute what comes in.
 
Often developers of emulators can only do their work because research has been done by other people - unfortunately, that work often goes unrewarded.
 
Often developers of emulators can only do their work because research has been done by other people - unfortunately, that work often goes unrewarded.
It's therefore important to understand who you donate to, and how that money will be shared or how it will be used.
+
It's therefore important to understand who you donate to, and how that money will be shared and used among the group. Make sure developers are upfront about who gets paid and what they're using your donations for. More informal ones will say they use the donations on a beer or coffee, but it's also often put towards project operations like domain registration for the website and such to keep the website running.
 
 
Especially for Open-Source projects, there can also be problems with only supporting the core developer group: it might actively discourage other contributors because of the unfair reward system ("Why should I work for free, but XYZ is getting paid on a monthly bases?").
 
This can quickly lead to one "hero" developer - if they ever disappear the project is essentially dead because nobody else is familiar with the source-code.
 
  
For some projects, there is also no practical use for money: money doesn't write code.
+
Some problems may arise from this; money can potentially be a deterrent for newcomers on open-source projects. By only supporting the core developer group, it might actively discourage other contributors because the reward system would be unfair. ("Why do I have to work for free when ''x'' is getting paid on a monthly basis?") This can quickly lead to one "hero" developer - if they ever disappear, the project essentially dies because nobody else is familiar with the [[source code]]. Some projects have countered this by implementing a bounty system, where newcomers can be rewarded for fixing bugs that are outside the scope of what the core developers focus on. Keep in mind that even in the hundreds of dollars, a bounty isn't going to pay the developer's bills, but it's a better incentive than otherwise.
There's also a lot of free services for Open-Source projects, so many projects don't have any expenses.
 
  
 +
For some projects, there is no practical use for money: money doesn't write code.
 +
There's also a lot of free services for open-source projects, so many projects don't have any expenses.
  
 
=== Patreon ===
 
=== Patreon ===
Several emulators have a Patreon. [[Emulators on Patreon|Here is a list]]
+
[[Emulators on Patreon|Several emulators have a Patreon.]] We've been tracking projects that use Patreon since mid-2017.
  
 
=== BountySource ===
 
=== BountySource ===
BountySource let's you directly donate money to certain features or improvements you wish for
+
BountySource lets you directly donate money to certain features or improvements you wish for. Some known projects that use BountySource include [https://www.bountysource.com/teams/libretro libretro] and [https://www.bountysource.com/teams/reicast Reicast].
* [https://www.bountysource.com/teams/libretro Libretro]
 
* [https://www.bountysource.com/teams/reicast Reicast]
 
  
 
=== PayPal and other ways to donate ===
 
=== PayPal and other ways to donate ===
Line 119: Line 120:
  
 
== Big projects ==
 
== Big projects ==
 
+
Note that this list is only intended to provide examples of ways to help out/getting involved, so we only list major examples.
<!-- This list is only intended for the four or five biggest projects in emulation/compability layers, and is intended as an example of ways to help out/getting involved -->
 
  
 
=== MAME ===
 
=== MAME ===
It is not possible to donate directly to MAME, but several other projects that help MAME's development can be supported.
+
It's not possible to donate directly to MAME, but several other projects that help MAME's development can be supported.
  
 
* [http://www.mameworld.info/ubbthreads/showthreaded.php?Number=311481 The Dumping Union] - Accepts donations from PayPal.
 
* [http://www.mameworld.info/ubbthreads/showthreaded.php?Number=311481 The Dumping Union] - Accepts donations from PayPal.
Line 134: Line 134:
  
 
=== Libretro / RetroArch ===
 
=== Libretro / RetroArch ===
* Has a [https://www.libretro.com/index.php/contributions/ contribute page] with wish lists for hardware and other info.  
+
The libretro Team has
* Has a [https://www.patreon.com/libretro Patreon].
+
* A [https://www.libretro.com/index.php/contributions/ contribute page] with wish lists for hardware and other info.  
* Has a [https://www.bountysource.com/teams/libretro Bountysource] where you can donate money directly to functions and improvements you wish to see.
+
* [https://www.patreon.com/libretro A Patreon.]
 +
* [https://www.bountysource.com/teams/libretro A BountySource system] where you can donate money directly to features, bugfixes, and improvements you'd wish to see.
  
  
  
 
=== ScummVM / ResidualVM ===
 
=== ScummVM / ResidualVM ===
* ScummVM has a [http://sourceforge.net/donate/index.php?group_id=37116 PayPal]
+
The ScummVM Team has
* ScummVM Has a [https://bugs.scummvm.org/ Bug tracker]
+
* [http://sourceforge.net/donate/index.php?group_id=37116 A PayPal.]
* You can [https://translations.scummvm.org/projects/scummvm/scummvm/ help translate] ScummVM
+
* [https://bugs.scummvm.org/ A bug tracker.]
* ScummVM has a [https://wiki.scummvm.org/index.php?title=Developer_Central devolper instruction] on how to contribute code
+
* [https://translations.scummvm.org/projects/scummvm/scummvm/ A translation portal.]
* ResidualVM has a [http://wiki.residualvm.org/index.php/Getting_Involved getting involved page] and a [http://wiki.residualvm.org/index.php/Reporting_Bugs Bug reporting page].
+
* [https://wiki.scummvm.org/index.php?title=Developer_Central A Developer Central page] with instructions on how to contribute code.
 +
 
 +
ResidualVM has a [http://wiki.residualvm.org/index.php/Getting_Involved getting involved page] and a [http://wiki.residualvm.org/index.php/Reporting_Bugs page for reporting bugs].
  
  
  
 
=== WINE ===
 
=== WINE ===
* Has a [https://www.winehq.org/donate donate page] where you find information on how to donate with Paypal and other ways to send money, you can also support them by buying merch. Another option is to buy [https://www.codeweavers.com/about/support-wine CrossOver] which is a commercialized, supported version of Wine from CodeWeavers. They contribute all of their work on Wine back to the Wine Project and make up for 2/3 of the Wine commits.
+
The WINE Team has a [https://www.winehq.org/donate Donate page] where you can find information on how to donate with PayPal and other ways to send money. You can also support them by buying merchandise.
 +
 
 +
Another option is to buy [https://www.codeweavers.com/about/support-wine CrossOver] which is a commercialized, supported version of Wine from CodeWeavers. They contribute all of their work on CrossOvers back to Wine and make up about two thirds of the commits made to Wine.

Revision as of 01:54, 10 January 2019

WIP page, help wanted.

There are several ways to support or contribute to an emulation project (or similar projects such as compatibility layers, game engine recreations or simulators). Explained here are different ways you can get involved, even if you have low technical skill and/or no money.

Note that almost all these methods require getting involved in some way. Offering to help in a specific area may not be necessary in some cases, so you'll have to check with each project you're interested in to determine what they're looking for and what they find useful.

Testing & bug reporting

One area you may be able to help in is reporting information, especially if you notice bugs in games that you play. This can be done a number of ways, but they all help the developer see where the emulator still has to improve.

more text here...

Compatibility reporting

A compatibility report communicates the emulation quality. It is aimed at other users, and often consists of a compatibility list.

Some emulators use GitHub for their lists. Most projects have instructions on how they should be written. Make sure you search to see if any issues you're having has already been encountered by another user. Note that sending users to GitHub is dangerous - you should only do it if the project has a simplified compatibility list which doesn't require technical understanding / writing; most projects actually use wikis or custom tools / websites for compatibility reporting. Some use spreadsheets and forms to get their data.

more text here...

Bug reporting

A bug report concerns one specific problem. It is aimed at emulator developers.

Because bug reports are meant for developers, they are expected to be more technical than a compatibility report. They're also typically expected to include details about specific situations when the problem arises, but also technical details as to why it happens. Developers also read compatibility reports and create respective bug reports themselves.

Sometimes you need a fair bit of experience in order to report bugs to the major projects. If you lack the experience to match what developers themselves report then most smaller projects are fine with it as long as you try to make it coherent and professional. Many projects have the program set up to automatically forward logs to developers at the user's discretion. This can avoid having to explain the problem, though sometimes they'll want context in case they need to reproduce it.

Generally you should chat to other developers / maintainers (via IRC or Discord) before creating a bug report. Often they are aware of issues and have grouped them under a known technical term.

more text here...

Console verification

Despite being aimed at developers, users should read / follow bug reports they care about.

Many emulators not only need games tested in the emulator, but also on real hardware, because games aren't perfect. If you've been involved with the speedrunning community, you know bugs exist, and can be taken advantage of to get a faster time. Determining what is a bug in the game and what is inaccurate emulation can prevent developers from wasting time on problems they didn't create. All projects encounter this at some point; even the testers behind Dolphin encounter bugs that happen on hardware. Ideally, you should have a capture card for recording footage from hardware.

During the research and documentation phase, some developers will also write small programs to test hardware behavior. In some cases the developers don't have access to the physical hardware or they need to confirm results by having multiple users run the tests. This can also be done in cases where the code doesn't work on all hardware revisions, and the developer needs to test it on all revisions to understand where each model has deficiencies; sometimes they don't have all models, but the more accuracy-focused projects will have this covered in some way. Hackers and those in the homebrew scene may have documented these deficiencies already. You can follow developer chat-rooms, and offer assistance by running tests and collecting data from real hardware.

Provide support for end users

Helping and guiding other users through problems is one of the pillars of open communities. If there's one thing a developer doesn't want to have to do alone, it's troubleshoot problems that end users get themselves into. Providing support for end-users will allow developers to focus on the software they make, creating a filter that allows actual bugs to be reported and saving time in the process. You also need a slight sense of confidence to make decisions for the user. For most people who work in IT (or just Google their problems), this comes naturally.

Support can be provided on a Discord server, IRC server, or a project's forums.

Write & promotion

Outreach and promotion is an important factor in the success of an emulator because it gets people talking about it, especially emulators for newer consoles that make strides in their efforts regularly.

This can be done by writing official blog posts, posting news on social media, providing information, making videos for YouTube, explaining and summarizing changelogs, etc.

Archival & hardware donations

Optical discs like CD and DVDs have a limited lifespan. They degrade over time and will eventually be unreadable to a disc reader. Projects like Redump are focused on identifying all officially released discs. Each known disc is stored with information which makes it possible for users to verify the correctness of their disc. Contributing to these databases (by dumping your discs and contributing metadata) helps to build a full-set for testing emulators. It also encourages users to make legal backups of their discs before they break.

Game databases like MobyGames can be used to find additional information for each game. Launchers can use the uploaded descriptions and cover artwork. You can contribute by scanning your game artwork, finding and adding game information (such as release dates). MobyGames also stores barcodes and serial numbers which can be used to find releases in Redump's database. You can look at the existing cover artwork and extract such information.

You can donate games or hardware to developers or other volunteers who are accepting such donations. Donated games can then be analyzed by the recipient and their information can be added to databases such as those listed above. Emulator developers usually require a large number of consoles, games, and peripherals (controllers, memory cards, ..), so donations are typically welcome. Depending on the project structure these will be forwarded to people who are in need of such hardware. Contact project maintainers to find out what they accept.

Help with technical documentation

Emulators depend on technical documentation about the systems they emulate. Typically, there are dedicated communities (often including people from the homebrew scene, and much less commonly the piracy and warez scene) for these research and documentation tasks.

These research communities often uses wikis that need to be maintained. Beginners can help by fixing typos or formatting. For some of these tasks, no coding skills are required. Advanced users and developers can contribute their own research, or participate in technical discussions.

Many of these communities also maintain their own tools which can be helpful for ROM dumping or testing emulation. These tools are often written in beginner-friendly programming languages (such as C# or Python) and can be stepping-stone for moving towards actual emulator development.

Communities

Learn how to code and help out

A pretty obvious one, but it should be stated that most open-source emulation projects don't get nearly enough support in the programming area. Bigger projects often have an abundance of developers to constantly check on the code and make sure it's written well, but those are rare, so most projects are often one man operations or have few (if multiple) developers. Many projects are actively looking for programmers, so if you have knowledge in systems programming and such, you could definitely be of help.

Programming for the emulator itself isn't even necessary, as many projects are in need of websites and CI integration. If the emulator doesn't use stable builds (or all that exists are instructions for compiling from source), you could implement a CI and integrate it with the website so you can get it to host precompiled builds for users. CIs are also useful because they can run the program with test ROMs to ensure that compatibility isn't broken between commits. The major projects will have this covered. Sometimes older project developers don't like to change the website's infrastructure, so you're better off handling projects for which there is no existing website.

If you're experienced with Linux, you can help port a program to your distribution (or mostly every distro if the main developers are already considering something like AppImages).

Emulator development is a time-intensive task. A lot of projects could use some money, especially ones where they often don't get it when they should. Some projects are simply possible because the developers have money from their existing job to be able to fund their efforts on the emulator. Sometimes it goes a long way in helping archivists on the team hunt for rare items.

Many projects are often a group effort, so from a user's perspective there's no fair way to distribute what comes in. Often developers of emulators can only do their work because research has been done by other people - unfortunately, that work often goes unrewarded. It's therefore important to understand who you donate to, and how that money will be shared and used among the group. Make sure developers are upfront about who gets paid and what they're using your donations for. More informal ones will say they use the donations on a beer or coffee, but it's also often put towards project operations like domain registration for the website and such to keep the website running.

Some problems may arise from this; money can potentially be a deterrent for newcomers on open-source projects. By only supporting the core developer group, it might actively discourage other contributors because the reward system would be unfair. ("Why do I have to work for free when x is getting paid on a monthly basis?") This can quickly lead to one "hero" developer - if they ever disappear, the project essentially dies because nobody else is familiar with the source code. Some projects have countered this by implementing a bounty system, where newcomers can be rewarded for fixing bugs that are outside the scope of what the core developers focus on. Keep in mind that even in the hundreds of dollars, a bounty isn't going to pay the developer's bills, but it's a better incentive than otherwise.

For some projects, there is no practical use for money: money doesn't write code. There's also a lot of free services for open-source projects, so many projects don't have any expenses.

Patreon

Several emulators have a Patreon. We've been tracking projects that use Patreon since mid-2017.

BountySource

BountySource lets you directly donate money to certain features or improvements you wish for. Some known projects that use BountySource include libretro and Reicast.

PayPal and other ways to donate

Some emulators have PayPal addresses and such on their homepages.

Big projects

Note that this list is only intended to provide examples of ways to help out/getting involved, so we only list major examples.

MAME

It's not possible to donate directly to MAME, but several other projects that help MAME's development can be supported.


Libretro / RetroArch

The libretro Team has


ScummVM / ResidualVM

The ScummVM Team has

ResidualVM has a getting involved page and a page for reporting bugs.


WINE

The WINE Team has a Donate page where you can find information on how to donate with PayPal and other ways to send money. You can also support them by buying merchandise.

Another option is to buy CrossOver which is a commercialized, supported version of Wine from CodeWeavers. They contribute all of their work on CrossOvers back to Wine and make up about two thirds of the commits made to Wine.