The only approach I found to understand any non trivial open source project is to have a specific goal of what you want to do.
Once you have a goal it feels so much easier to understand anything because you narrow down the scope and you have some key words you can grep the code.
Example. let's say you found a Redis driver for your language. Now Redis6 include some new commands which you want to add it immediately instead of waiting for your driver. Now you will know how to search for similar command(grep the heck out of it) and try adding break points or just printf to see where the code path it.
I enjoy reading open source code and publish a newsletter[0] with a section call "Code to read" that have some repo you can try to read and see how they do thins
Once you have a goal it feels so much easier to understand anything because you narrow down the scope and you have some key words you can grep the code.
Example. let's say you found a Redis driver for your language. Now Redis6 include some new commands which you want to add it immediately instead of waiting for your driver. Now you will know how to search for similar command(grep the heck out of it) and try adding break points or just printf to see where the code path it.
I enjoy reading open source code and publish a newsletter[0] with a section call "Code to read" that have some repo you can try to read and see how they do thins
---
[0] https://betterdev.link