1:确实如你所说,就以绝大多数的事实而言:没区别。
2:少数情况下,如果是重要的基础库/组件,那么严谨的团队会在选型结束后,自己fork一份出来,自己维护。如果好一点的团队,会后续跟踪主干上的提交,merge自己感兴趣的代码(一般都是为了bug fix)。但绝大多数团队,连这个跟踪都很少做(毕竟这样的跟踪,也是很耗费人力精力的)。发现了bug,也是自己fix就完事了,甚至都懒得回到社区去报这个bug(当然,有时候是因为分支和主干的代码差异很大了,所以报了也往往得不到确认的)。
3:再少一点的情况,就是fork了一个分支之后,自己去加自己要的特性,经过若干版本后,根本就合不回主干了。一些经历过重构的项目,那基本上除了外部api为了兼容性还和原版保持一致外,内部实现被彻底重写,这样的例子我见过不少。
因为有需求了就要加功能改功能,加功能改功能都涉及到改代码,开源软件有源代码就可以自己改。没源代码的话,你用闭源收费软件还可以找技术支持让卖方定制需求,用闭源免费软件就是真的走投无路了。
洋耗子所说的第3种情况在我看来恰恰是最常见的情况。
只是为了改功能加功能并不需要review整个代码,而且比review整个代码要容易得多。