硬件商店最近ZachTellman和Factual开源了一些他们想要解决甚至不存在的特定需求的存储库。在Reddit的评论中,有人在抱怨,因为这款软件很可能在1-2年内被废弃,如果依赖这款软件,他们将陷入困境。我认为这种想法源于对开源软件的误导和自私自利的观点。作为一名软件工程师,处理软件库、应用程序和框架的开发就像在五金店里一样,非常有吸引力。如果您遇到标准存储库无法解决的问题,请引入依赖项。需要工具集功能?在GitHub上搜索并添加依赖项。想利用最近疯狂流行的单页应用程序吗?然后拉另一个依赖。需要用Ruby处理XML?只需立即安装Nokogiri,您就可以开怀大笑了。也许这会奏效一段时间,但它忽略了软件工程最关键的方面之一:软件随时间的衰减,也称为熵。软件不作为一个独立的系统存在,它与其他随时间变化的软件交互,包括您的操作系统、内存、其他外部服务、数据库、CPU、网络、IO设备(打印机、显示器)以及最重要的因素——用户。这些系统被新系统替换或更新。有时这些更改是向后兼容的,有时则不是。因此,代码一次编写,终身维护。使用某人的开源代码是一个巨大的帮助,因为您不必编写它。然而,随着时间的推移和条件的变化,熵开始发挥作用,代码需要维护和更新。一个资源库的支撑,需要一个村的共同努力。除了把开源软件看成是五金店,我觉得更好的类比应该是入村供养一个孩子。您提取的每个依赖项及其依赖的依赖项都需要随着时间的推移进行维护,等等。这里的问题不是是否需要维护,而是谁来维护。更大的社区有更多的资源和时间去做,成熟的项目优化好、测试好、API稳定。如果您使用的是新生的、模棱两可的或快速变化的语言,那么您需要承担更多的维护工作。我不认为将开源软件作为礼物送给世界上的某个人会让人觉得有责任为您维护软件。有些项目确实声称负责,但仅仅因为有人在GitHub上发布了项目并不意味着责任就自动被授予。我想更多的责任应该放在使用该项目的人身上。将要使用它的是您的代码,您的代码需要更新,您的代码将被破坏。在开始使用库或框架之前,您应该考虑以下问题:这个软件依赖于谁?它所依赖的依赖项是什么?是否合理更新?存储库是否在使用类加载器、字节码和运行时做一些奇怪的事情?这些情况更有可能发生在您的语言或运行时的较新版本中。除了使用其他库或框架或自己编写之外,使用该库或框架对我有多大好处?这个存储库写得好吗?代码是否经过彻底测试?它通过测试了吗?作者是否建议您在生产中使用它,或者它只是一个概念证明或探索性想法?作者是否有维护开源软件的经验?他们自己用吗?如果我想增加一个功能或修复一个错误,作者很乐意接受,或者是“没有公开拉取请求的开源”?顺便说一句,这很好,意味着当您的需求出现偏差时,您需要维护自己的分支。如果是数据库驱动,是否会及时更新数据库的新版本?例如,Netflix的Cassandra驱动程序Astynax支持最新版本的Cassandra。我对老板的风险承受能力如何?我是否有时间,并且在老板允许的情况下,有能力自己维护或优化这个存储库?如有必要,此存储库是否已通过安全审查?作者有没有讲API的稳定性?该项目的问题跟踪器的实施情况如何?作者是否有回应,或者他们不再参与?许可证是否与软件的其他部分兼容?如果由商业公司支持和分发,他们是否倾向于修改许可证或为未来的企业客户保留重要功能?是否有一个具有多个存储库实现的通用API,我可以在它们之间切换。Java中有JPA、XQJ等软件,可以避免绑定到一个资源库。最后一次重要提交是什么时候?整个项目存活了多长时间?是否有相应的用户社区?有邮件列表吗?我正在编写的代码的预期寿命和危险是什么?一旦您考虑了这些问题,您就会更好地理解从您正在使用的存储库继承的风险,以及项目未来可能的方向。如果您决定采用它,那么我建议您加入邮件列表并在GitHub上关注它以随时了解更改。alternativedependencies的选择pulladependency应该深思熟虑,你可以先看看其他的选择:如果你只需要非常少量的相对简单的代码,只需要将代码复制到你的项目中就可以了。确保标准存储库不提供类似的功能。如果它只是另一个依赖的包装库,你可以直接使用那个依赖吗?如果您正在为某个数据结构提取另一个依赖项,是否有可以使用的替代算法不需要该数据结构?有没有你应该自己写的代码?虽然这并不总是最佳选择,但有时没有其他选择可以满足您的质量标准,您需要自己构建它。有商业选择吗?开源是免费的[注1],维护它也是免费的。付钱给维护软件的其他人会增加他们继续为你维护软件的动力,这可能是许多公司的最佳选择。***开源软件极大地促进了程序员的生产力,为人类节省了数百年的努力。但请记住,正如您拥有自己的可用性一样,您也拥有自己的软件及其附带的一切。注1:http://en.wiktionary.org/wiki/free_as_in_beer英文原文:http://danielcompton.net/2014/11/19/dependencies翻译自:http://www.labazhou.net/2014/11/虽然开源与啤酒一样免费,但它也像婴儿一样免费/
