There are several ways to contribute to the development of ReactOS. The most often encountered problem is not knowing where to begin or what to do. If you are able to program or understand the technical information that is pertinent to this project, helping the development can be easy.
- 1 Documentation
- 2 Test ReactOS
- 3 Patches
- 4 Implement new things
- 5 Finding a good project to start
- 6 See also
- 7 Places to find information
There are some important points if you'd like to help document ReactOS:
- Make sure the documentation doesn't exist yet (if it does, help improve it).
- Respect clean room reverse engineering practices.
- Add your knowledge to a place where the other developers can find it.
As code is added, changed, or removed, it is possible for unintended results to occur. These unintended results are known as bugs. By localizing bugs, developers can identify what causes the bug and what it affects. There are a variety of methods to debug ReactOS while testing it. After identifying a bug, check if it is already known about by searching JIRA and adding any additional information to the report. If you think that it is an unidentified bug, consider filing a bug report.
Instead of looking for bugs, you can also try to fix a few that are already listed in JIRA. Fixing bugs requires a lot more skill than simply searching for them, and can be time consuming.
Tests are used to check the functionality and correctness of APIs on ReactOS compared to Windows implementations. There are also some unit tests that you could help ReactOS pass, which can be found here.
A patch is a set of changes to existing source code. The changes in a patch can be merged into existing source code. This process is referred to as applying a patch (to source code). Which changes a patch contains and the way the patch is structured can have significant impact on the consequences that can happen from applying the patch. Below are a few recommendations on how to create and use patches.
Create small patches
Reviewing has proven to be an effective method of discovering bugs, so one should strive towards creating patches that are easy to review. Unfortunately, humans are terrible at tracking large amount of information. Therefore keep the patches as small as possible to make reviewing easier.
Putting only related changes in a patch will make reviewing easier as the reviewer needs to recall less information about the existing source code that is changed.
Notice the risks which are associated with applying the patch
The risk of introducing a bug is higher with some types of changes than others. Formatting is a relatively safe change while semantic changes to complex code is a highly risky change. This means that reviewing a formatting-only patch is not as important as reviewing a patch with semantic changes to complex code (and thus it doesn't hurt so much if a formatting patch is large). When mixing safe and unsafe changes, the overall risk of introducing a bug in a given patch is the same as if the changes were spread over several patches. However, the risk of the individual patch is equal to risk of the most risky change in the patch. So if a 1 line highly risky change is hidden in a 2000 line otherwise safe patch, then the overall risk for the whole patch is highly risky. Therefore strive towards putting changes of similar risk into the same patch.
Set goals for your next patch
To help prevent your patches from becoming too large, set one or more goals for your next patch before you start making any changes. A goal could be to refactor a part of the source code which is hard to understand. It could be to implement part or all of a new feature, or fix a bug that exists in the existing source code. If achieving the goals requires too many changes and would make the patch become large and/or contain many unrelated changes, then define new goals which, when reached, would ensure that the original goals would be partially achieved.
Keep focus when developing the patch
While developing a patch, it can be tempting to fix existing issues as you come across them while reading the source code. This can however quickly cause the patch to become large and contain several unrelated changes which have nothing to do with achieving the goals which were defined for the patch. Resist the temptation and put in a note in the source code instead, or (even better) put the issue in the issue tracking system.
Drupal has some tips for reviewing patches.
Implement new things
Considering ReactOS is alpha quality software, there is a lot of missing functionality that Windows operating systems have. Before starting a project to implement something, find out if another person is working on the same thing. If you find that someone is already working on it, ask if any assistance is needed for what specifically is being worked on or a related project. Plenty of times a person will start to implement something and never finish before moving to something else. Make sure you stay committed to what you are going to implement, and do not be afraid to ask for assistance if you need help with something.
Finding a good project to start
Finding a good project to start with can be a challenge, because when starting out you are (usually) not aware of all the possibilities. To help you find a project, here are some ideas to try:
- Find a test that fails, and try to make it succeed: https://reactos.org/testman/
- Look around in jira, and if you have problems finding nice projects to start with, there is a label for this: https://jira.reactos.org/issues/?jql=labels%20%3D%20starter-project
- Ask for help in IRC
- Additionally, there are some tests that cause crashes / hangs, but these might be slightly harder: https://jira.reactos.org/browse/ROSTESTS-125
Places to find information
- Microsoft Developer Network (MSDN) – Your search should start here.
- External Documentation Links – Otherwise you should try to find something here.
- ReactOS Techwiki – Documentation provided or collected by ReactOS developers.
- HOWTO Install a driver in ReactOS
- Advanced Windows Debugging
- Windows Internals Fifth Edition (or later versions)
- Windows via C/C++