Suppose I am developing a commercial product, but one heavily based on open source software. Further suppose one of the open source projects I use has a permissive license (such as Apache 2).
At some point, I realize I need to make significant changes to that open source component. I have two choices:
- Work with the upstream team to get my changes accepted into the open source version of the component.
- Create an internal fork of the component and make my changes there.
The first option is obviously ideal, but there are considerations which may lead me to the second option. Some that I see are:
- The changes may not be acceptable/desirable to the people managing the upstream.
- The timeframe for getting changes into the upstream project and available for use may not fit within my own schedule.
- I may wish to implement some proprietary features within the project.
At what point does it become desirable/practical to take the second path, and what are seen as the major drawbacks to doing so?