This post has corrections, see the "Corrections" section for more information!
Imagine you checked out the sources of a large software project. You have an idea of what changes you want to do to it. The problem? Where do you start?
No, seriously, where _do_ you start? You have ~50 GB (without Git history) of sources in front of you. Where do you begin adding even the smallest thing?
You might think to yourself that _someone_ must've documented how everything fits together. Nope! The project's own documentation only has API usage and how to work on something _targeting_ it, not on its own source code.
Other third party documentation is either lacking, or _very_ surface level. Explaining the simple things like how to clone & build the software, which doesn't help if you want to modify the software and not just use it.
You _can_ read how the old code works, or look through how others do their changes, but that's way too much effort to apply a change that you don't even plan to upstream or maybe even share. Even if you are _really_ motivated to apply your change, the code is _50 GB_, where do you even look _first_?
You might assume you can just throw stuff onto the wall and see what sticks... Good luck. Even the most trivial changes take *at least* 15 minutes to compile, not to mention the extra hassle to deploy the changes. (Since this code compiles to an external device)
What _can_ you do other than just steal commits off of other people? Genuinely curious...
It's Actually Not 50 GB
After receiving a reply to this post, that asked which project had 50 GBs of sources, I wanted to make sure my number was accurate.Reply by Nolan of perplexing.space
The raw sources are around 45-50 GBs, but a large part of these are either:
- Pre-built binaries (a very large part at ~25 GB).
- Various binary resources like images, short videos, proprietary blobs from vendors.
- Parts of code that won't be needed for my uses.
Approximating the impact of all these, I would say the parts of the source that get built for my uses are around 5 GBs, maybe lower.
I have no idea why I kept this post unnecessarily vague, but the project in question is Android (specifically, the LineageOS fork, but it doesn't impact the upstream complexity in any meaningful way)