65.9K
CodeProject 正在变化。 阅读更多。
Home

选择商业库而非开源库的8个理由

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.15/5 (18投票s)

2013 年 4 月 22 日

CPOL

13分钟阅读

viewsIcon

81326

开源是免费的。这真是理想吗?

开源软件(即根据免费许可证提供、源代码可自由访问的软件)日益普及。原因显而易见——终端用户软件价格的下跌使得预先投入软件开发资金变得更加困难。而在内部活动中,更严格的 IT 预算迫使程序员选择质量不明的代码片段。

然而,虽然开源库和代码片段在使用时似乎没有初始成本,但它们会在您的软件生命周期后期开始消耗资源。而商业库能提供的,可能超乎您的想象。

我将重点关注专业开发的商业解决方案:给代码片段标价并不能神奇地将其变成行业级的商业产品。商业库必须经过彻底评估,才能回答它有多专业的问题。并非所有带有价格标签的东西都好,这是显而易见的。但如果它是商业化的,您很有可能会获得开源产品所缺失的东西。

让我们回顾一下商业软件(特别是面向软件开发者的组件和类库)究竟能提供什么,然后再讨论一些反对意见和反驳意见。

文档和示例。 

随着现代 API 变得越来越复杂,文档和示例可以实现更轻松、更快速的代码重用。您只需从示例中复制一段代码,它就能正常工作。如果您需要指导,可以查阅文档,了解下一步该做什么,或者为什么该函数可能会失败。

开源软件的拥护者声称源代码就是最好的文档。也许当代码本身写得很好,有注释,并且写得清晰(具有适当的格式和变量/函数名称)时,它就可以作为文档。但大多数情况下,代码并不是世界上最有趣的读物。

各种研究表明,源代码的存在有时有助于诊断各种问题,但对软件的使用帮助不大,因为您不知道要找什么。

此外,文档应该由技术写手编写,而不是程序员——程序员不喜欢写 proper documentation,也不知道如何写。让程序员做编码,技术写手写文本。

精心设计的 API

任何复杂的工程产品都需要设计和开发,才能在代码中实现。从头写 1000 行代码,与事先设计好这 1000 行再实现是不同的。良好的设计可以将 1000 行代码变成 200 行,而糟糕的设计会导致需要编写 10K 行代码。

在开源库方面,许多库是进化式开发的,也就是说,先创建一个小的东西,然后像新年树上添加新玩具一样添加功能。最终,您得到的是一个像新年树一样脆弱的构造。

相反,商业 API 在大多数情况下是同时考虑易用性和可扩展性而设计的。它们通常有几个 API 层级,用于低级操作(您可以获得最大的控制权)和高级任务(您可以快速完成工作)。

最后,开源库主要由编码人员开发,而专业的商业解决方案通常由软件架构师和分析师设计,然后才由程序员编码。

独特功能

由于开源开发者的目标是快速交付某种东西,因此通常只实现了特定应用领域中最受欢迎的功能。

商业库的开发者必须脱颖而出,实现更广泛的功能是实现这一目标的一种方法。

可扩展性问题(即获取您需要的功能)很难通过开源轻松解决,除非自己编写该功能,而这几乎总是一个不可行的选项,特别是当要解决的问题远离您的专业领域时。使用商业软件,您可以协商让对方为您扩展功能,或将其包含在未来的软件版本中。

商业供应商的动机是维持其业务的运转,这是有效的动机。对于开源开发者而言,即使您支付一次性费用,也可能不足以激励开发者扩展产品(该产品可能早已被放弃,正如开源世界中经常发生的那样)。

组件供应商提供的独特功能的另一个好处是,这些功能可以帮助您创建终端用户软件的 USP(独特卖点)。而在内部开发时,这些功能可以让您取悦老板,并表明您致力于帮助同事和公司更高效地运作。换句话说,这些功能表明您关心用户。

可靠性 

每个企业的宝贵资产之一就是客户的信任。如果您不赢得客户的信任,就无法长期经营企业。在软件行业,关系是长期的,信息传播迅速,信任至关重要。

当遇到 bug 时,商业供应商最关心的是修复它,否则信任就会丧失。客户需要确保,如果出现问题,它将在最短的时间内得到解决。

使用开源库时,即使您提交了一个 bug(如果开发者提供了此可能性),您也几乎没有希望在可预见的未来修复该 bug。相反,有时开源开发者会以远超同类商业产品许可证费用的价格提供 bug 修复。

现在,您遇到过多少次某个开源产品不再开发(或已经消失)的情况,因为它的作者失去了兴趣?事实上,这在开源库中非常普遍。对于商业软件,组织良好的企业会提供多种激励措施来留住其所有者和管理者。金钱是最强大的激励因素之一,但并非唯一因素。义务、责任、法律要求同样是有效的激励因素。因此,您可以确信该产品不会消失或在未通知的情况下被放弃。您可以将项目的未来建立在商业供应商的这种责任之上。

维护 

IT 世界围绕着各种参与者——服务器、服务、客户端系统、移动设备等之间的链接和连接。随着参与者众多,变化和更新频繁,您的软件必须随时适应这种环境。否则,您将面临兼容性问题、不满意的抱怨客户以及最终的业务损失。

当您在软件中使用第三方组件时,它们也需要进行适配。与新功能一样,当作者有动力时,第三方组件和库的适配会更容易。

此外,对于正在运营的企业来说,维护和兼容性更新是告知用户其业务可信赖的一种方式。因此,即使您不要求,供应商也有很大可能执行所需的适配。

专业知识

众所周知,当您可以自己编写代码时,通常不需要第三方代码。这对于通用代码来说是真的,但您敢冒风险在低级编程、神经网络、OCR 或加密领域做同样的事情吗?

没有人是万能的专家,这就是为什么我们有如此多的不同职业和专注于某个特定问题的专家。

商业供应商,特别是提供专业软件和组件的供应商,会聘请这些狭窄领域的专家来提供高质量的产品。供应商拥有该应用领域的专家(例如 OCR 或网络)、软件设计专家以及编程环境和计算机平台专家。这些专家的合作可以为您带来可靠的产品。但在开源的情况下,这种情况很少见。应用领域的专家最常选择为金钱工作,并把空闲时间花在家人和爱好上。找到一个同时是优秀的软件架构师和程序员的专家是很难的(尽管并非不可能)。

因此,使用商业软件,您通常会获得比开源软件更高质量的产品(不仅是编程质量,还有应用领域的质量)。

援助 

开源软件的初步开发通常由好奇心、对宣传的渴望和其他类似的感性因素驱动。这在短期内效果很好,通常足以完成初步开发,但不足以进行维护,尤其是为您提供产品支持。换句话说,如果您需要帮助,您必须到处寻找……或者付费给开发者。

与 bug 修复一样,此类个人援助服务的成本通常会超过商业软件许可证的成本。原因很简单——商业供应商的业务基于保险模式,总开发和支持费用由所有售出的许可证分摊,无论您“消耗”多少支持(有时也提供额外的支持包,但总体方案如上所述)。在开源产品的情况下,弥补开发和支持的唯一来源就是向您收取一切可能的费用。 

第 8 点。  

 每个人都会找到自己的理由。我会把我的理由发到我的个人博客上。

反对意见。

* 有许多开源项目质量出众。是的,确实存在(主要是终端用户和服务器软件,很少是库)开源且价值极高的软件。但如果您仔细观察,大多数都(a)是商业产品,只是由大公司或机构赞助,(b)通常仅限非商业用途免费,但谁会仔细阅读那些最终用户许可协议?(c)并没有最初看起来那么好,存在内部管理问题、代码臃肿以及设计和实现缺陷,导致需要不时从头重写。

* 开源是免费的,任何东西都无法比拟的价格。是的,捕鼠器里的奶酪也是免费的。但与捕鼠器不同,免费软件是困住每个被卷入其中的“老鼠”的陷阱。维护和 bug 修复,以及将来迁移到其他解决方案(如果选择的开源产品突然停止工作)都会产生费用。而且这些费用可能比商业解决方案的初始成本高出数倍,特别是当您试图将业务流程建立在免费解决方案之上时。即使您继续使用开源解决方案,援助也需要付费,或者您需要希望编程社区中的某个人免费帮助您(绝对没有保证)。

* 开源提供源代码。是的,大多数商业库也提供源代码。确实,商业终端用户软件很少提供源代码,但如前所述,这种源代码的用途非常小(除了满足好奇心)。

* 开源有文档。是的,有令人费解的注释以及难以阅读且格式糟糕的代码。维基和公开维护的知识库是专业编写文档的薄弱替代品。

* 我可以在编程社区中寻求示例。您可以寻求,但这并不能保证您能得到答复,也无法保证所提供答复的质量。某件事在特定情况下能正常工作,并不能证明该解决方案在实际条件下的可靠性。

* 开源拥有与商业软件一样多的功能。是的,功能列表最初可能相同,但这需要证明:商业库必须脱颖而出,而功能是实现这一目标的好方法。无论如何,开源软件的可扩展性较低,因为它缺乏这种可扩展性的主要驱动力,并且经常由于糟糕的设计。

* 开源软件拥有出色的 API。是的,萨满有时也能提供良好的医疗服务。但去医院看病还是更好的选择。

* 我可以自己修改开源产品。是的,您也可以对商业库的源代码做同样的事情。

* 开源也能提供独特的功能。是的,它可以,但只能维持一段时间。所有简单(且廉价)的独特功能很快就会变得普遍。而真正独特的功能需要资源来实现。

* 开源由于受众更广,因此测试更充分。“测试更充分”并不意味着质量更好。它只意味着 bug 跟踪器中有更多的 bug。而且由于开源软件的 bug 修复通常比商业软件慢,因此后者更有可能具有更高的质量。

* 我使用的开源库已经为我工作了很多年。是的,在封闭的环境和简单的任务中,曾经测试过的代码可以工作很多年甚至几十年。然而,如果这段代码与其他软件和网络通信或交互,外部参与者的变化可以在几分钟内导致您的业务崩溃,而当这种情况发生时,您将几乎没有时间做出反应。

* 我有一些简单的任务,不需要专业知识,而且开源对我来说很有效。火柴(点火用的)是一件很琐碎的事情。是吗?火柴的组成部分是数代科学家在化学、生物学和物理学领域研究了几十年的成果。您现在认为琐碎的事情是多年乃至几个世纪科学研究的成果。而在软件领域,没有琐碎的任务,也没有琐碎的解决方案。

* 我可以从社区获得帮助,不需要付费服务。您肯定会向社区寻求医疗、法律、汽车维修等服务。但这并不可行,就像玩火一样——一个无能的建议可能会让您陷入严重的麻烦。专业服务是现代文明所有活动所必需的。

* 您有偏见。每个人都有。

* 您不喜欢开源。我个人使用开源,我们的公司多年来也为我们的部分产品(MsgConnect、VoxPopuli 等)提供开源许可证。我看到了开源的重大问题。

* 开源将统治世界。这正是我担心的,因为如上所述,开源缺乏许多(主要是与质量相关的)可能伤害文明的特性。

* 您不懂开源。在这个行业(公开重用组件和库的开发)工作了 15 年多,我研究了所有替代方案和商业模式,并努力跟上该领域的最新动态和创新(包括许可和商业模式)。

* Linux 和其他开源软件已经在世界各地(除桌面外)占据了主导地位,而桌面是下一个。我们已经听了这个说法很多年了。Windows Server 作为服务器平台的普及率越来越高,Azure 是出色的 PaaS,许多人正从 OpenOffice/LibreOffice 切换回 Microsoft Office。事实上,Linux 在智能手机等设备上是一个重要的参与者,但这首先是微软的错,它错失了先机。我绝不是微软的传道者,但我讨厌垄断,而 Linux 倾向于成为一个垄断者。

* 我与商业供应商有过负面经历,而与开源产品没有任何问题。正如我所提到的,价格标签并不能神奇地将程序员变成可靠的商人。但使用商业软件,您更有可能获得物有所值的服务。而使用开源产品,您很可能会为投入的时间一无所获。

* 商业供应商不可信。这是一个信仰和信念的问题。如果您认为您谁都不信任,那么我们能做的就很少了。

* 我如何确保供应商值得信赖?这是一个好问题,它将您从否认带入好奇。我将发布一篇单独的文章来讨论这个问题,因为在决定投资任何产品(顺便说一句,不一定是商业产品)时,有很多因素需要考虑。


© . All rights reserved.