开源基础架构有大量的开发者来维护,讨论改进,反馈。假如软件的质量用人年工作量来衡量,开源的软件积累了很多开发者的工作,必然比一个小组独立完成的软件质量好。很多东西可以直接复用。并且有大量的用户来测试同一套基础框架,节约了测试成本。
由于有大量的用户反馈,最新的技术趋势往往在开源软件里被迅速加上。而独立软件开发者可能没有这样的动力。比如,Rails 中增加的 CoffeeScript 支持,asserts 聚合支持。
每个开发者或者架构师都有自己的盲点。因为大型软件是个系统工程,少量的人难以覆盖所有的点。象很多国内大型网站暴出的 XSS 漏洞。可能仅仅是知识面的问题和重视程度的问题。开源软件则有擅长各个方向的开发者共同决策,改进。
文档维护和后期的技术支持可能是比开发本身更耗费成本的工作。开源软件往往有大量的人分享文档和写博客。同样的需求和问题,大部分情况下别人已经遇到过,并且有解决方案。而内部开发文档维护极难,培训和沟通也非常耗费时间。
开源基础框架的弊端是它过于庞大,弄清楚所有细节是非常耗费时间的。所以经常会遇到问题,而且需要重新研究如何处理。相对于从零架构我们了解所有细节,开源产品更像面对和使用一个黑盒。不过好在很多人在用就已经证明了它的正确性。
假如团队时间和资源相对缺乏,相关经验比较少,架构于开源可能是最好的选择。节约了开发成本,就可以将更多精力放到其他方面。
如果架构师有足够经验熟悉整个系统的各个方面,有足够精力追踪所有技术趋势,而且所建系统很简单,或者所建系统跟现有开源产品差别很大,则可以选择从零架构。不过这”很难”。有时候群策群力的结果比一个专家更好。