rizinorg / rizin

UNIX-like reverse engineering framework and command-line toolset.
https://rizin.re
GNU Lesser General Public License v3.0
2.7k stars 361 forks source link

Onboading guide to aid newbies understand the codebase #736

Open caribpa opened 3 years ago

caribpa commented 3 years ago

Is your feature request related to a problem? Please describe. I'd like to contribute to Rizin but I don't how where to start in order to understand how the different files/libraries/modules interact with each other.

I've read the CONTRIBUTING and DEVELOPERS documents, generated the doxygen documents, attempted to recreate something that resembles an evidence cork board and fainted several times after failing miserably out of exhaustion 🤯

Describe the solution you'd like An accessible way for getting to understand the Rizin project for contribution purposes without annoying too much the devs with the same newbie questions.

For example:

  1. Newbies are encouraged to start by reading files X and Y, overlooking details such as Z
  2. Next, see how file X is interacting with library P, library P is one of the most used libraries in the project so getting familiar with it gradually is recommended
  3. ...
  4. Now that you have a general idea of files X, Y, A, B and libraries P, Q, R you should be able to understand most of the codebase
  5. As an example, see file J, which is one of the most complex files and constantly being improved. Check the issues page to see if you are capable of adding/refactoring something to J on your own

Describe alternatives you've considered 💔

Additional context 🤷

Btw, generating the call graphs with doxygen helps to get an idea of the flow and dependencies, but you have 8874 files generated to dive in (call-graph only, callee, include-graphs and others are not counted), and still makes you dizzy, see the rizin tool call graph as an example:

rizin_call_graph

ret2libc commented 3 years ago

Yes, definitely needed. See also #286

caribpa commented 3 years ago

Maybe I could start bugging the devs myself with newbie questions and produce an onboarding guide following the structure I referred in the example of the OP.

Do you think I'll be more successful by creating a discussion and asking there, or in Mattermost?

ret2libc commented 3 years ago

Mettermost, I'd say.