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

英文原文:8 reasons to choose commercial library instead of open-source one 编译:oschina

本文是Third Party Products and Tools 章节,本文旨在分享并不是用来商业推广或者广告,欢迎指出任何出现在本文中任何形式的广告和垃圾信息。

开源软件(备注:免费获得许可和源代码)日益流行,很明显的原因是——为事先很难投资现金到软件开发的最终软件用户降低了成本。使得在有限的IT预算中,程序员选择使用了质量不明的代码。不管怎样,在使用开源库和代码片段的时候似乎是0成本,在整个软件生命周期中,你可能消耗更多的资源。而商业软件可以提供给你更多意想不到的。

我将专注于专业化的商业开发解决方案:在你的代码段上贴上价格标签不会神奇地把代码转变成产业级商业产品。商业库必须进行详尽的评估来说明这个库专业在哪里。不是每个要收费的库都是好的,这个很明显。但是,如果是商业库,获得开源库中缺少的东西的机会就会很大。

让我们审视下商业软件(和给软件开发人员的特殊的模块和类库)到底能够提供什么,然后再讨论到底选择商业库还是开源库。

文档和实例

随之现代APIs文档越来越复杂并且实例变得更容易和更快的代码重用。你仅仅需要从实例中复制一段代码就可以正常执行。如果你需要指导,你可以查看文档找出下一段如何执行或者函数为什么会调用失败。

牛X的开源软件却声称源代码是最好的文档,只有在详细注释和高质量的代码情况下(正确的格式和规范的变量 函数名),源代码才可以作为文档使用。在大部分情况下,阅读代码不是一件很有趣的事情。

研究表明,现存的源代码有时有助于诊断的各种各样的问题,但没有多大帮助使用该软件因为你不知道要寻找什么。

同样文档应该由技术作家来编写而不是程序猿。——程序猿不喜欢而且不知道如何编写合适的文档。让程序猿写程序技术作家编写文档,个安天命。

(译者注:擦,我实在无法忍受这边文章对开源软件的吐槽,本文以下内容我不翻译了,谁爱翻译谁翻译)

精雕细琢的APIs

任何作为复杂工程的软件都需要在真正实施前做好设计和开发。使用scratch编写1000行的代码,与事先设计好再编写1000行代码是完全不一样的。合适的设计可以使1000行代码变成200行,而坏的设计可能导致需要多编写10K行的代码。

对于开源库,很多都是逐步被开发出来的,例如,一些小的功能,然后不断在上面添加新功能,就像一个在新年树上的添加新的玩具。最后,这个新年树的结构会变得复杂而且脆弱。

相反,商业APIs在很多情况下,设计时综合考虑了使用的方便性和扩展性。通常它们会有多个层次的APIs,对于底层的操作(你可以得到最大程度的控制)还有对高层次的任务(你可以最快程度的完成工作)。

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

独一无二的特性

开源开发者的目标是发布一些功能,并且快速的完成任务,通常在这个应用中只包含一些主要的流行的功能。

而商业库的开发者,必须超越在大众用户之前,实施一些拓展的功能。

扩展性方面的问题(例如,获取你需要的功能)在开源软件很难获得,除非你自己去开发这些特性,但是,通常这不是一个好的选择,尤其面对一些我们不熟悉的领域。而对于商业软件,你可以和供应商协商,并基于你的需求扩展应用,添加到你的软件版本中。

商业软件供应商的动力来自于他们想让他们的公司运营下去,这是最有效的推动力。而对于开源开发者,即使你愿意去一次性支付他们,也未必让他有足够的动力去扩展他们的产品(可能在很久之前已放弃更新,对于开源世界,这是很平常的事情)。

由组件供应商提供的独一无二的特性,其中一个得益是,这个特性可以让你创建一个USP(独特的卖点)的终端软件。并且,当你在做内部开发时,这些特性可以让你取悦你的上司,并展现你的对于帮助你的同事的积极态度,还有让商业流程更加有效的工作。换而言之,这些特性体现了你对你的客户的关注。

可靠性

对于每一个行业中,最重要的一个资产是得到客户的信任。你不可能长期维持你的商业,而一直得不到用户的信任。而在商业软件,与客户的关系是长期的,所以信任是必须的。

当一个缺陷出现后,对于商业供应商会很热衷于解决它,否者信任就会流失。并且用户需要得到保证,每个缺陷都要在最短的时间内得到解决。

对于开源库,即使你提交了一个缺陷(当开发者向你提供了这个错误报告),你通常不会觉得到这个缺陷会很快得到解决。相反,开源开发者收费去修复错误的成本往往超过同类商业软件的商业许可费用。

现在,你碰到过多少回,一个开源产品没有再被开发(或者已经过时了),因为开源软件的作者已经对它失去兴趣?事实上,对于开源库,这是很常见的。对于商业软件,有一个合理的组织去管理,不单单属于一个人,而是有很多相关人员和管理人员来支持。金钱是其中一个重要的支柱,但并非是唯一一个。义务,责任,合法的需求同样是有效的动机。所以,你可以安心,这个产品不会过时或者被抛弃。并且,你可以基于这个负责人的商业软件供应商,来开发你的项目。

维护

IT世界就是一个不同用户,服务器,商业服务,客户端系统,手机服务之间的连接或者桥梁。对于拥有这么多的参与者,修改和更新会变得很频繁,并且你必须保证你的应用能与时俱进。否则,你的应用出现兼容问题,得不到用户的满意,并且被用户所抱怨,最终导致生意的丢失。

当你的软件中使用第三方的组件,他们也必须得到同样的适应能力。对于新的功能,采用第三方组件和库通常比较容易,因为他们的作者也有这样的动机。

同样,软件的维护和兼容性的更新也是一个很好的途径,告诉你的用户,你的软件是可信赖的。那么,这里会有一个很大的可能行,你的供应商会不断的更新软件,即使你没有告诉他们这么去做。

专业知识

对于你知道如何解决的问题,你通常不会去采用第三方的代码,而是自己来编写。这对于通常的代码,是合理的,但是你在做底层的编程或者神经网络编程,OCR或者密码相关编程的时候,需要承受相应的风险。

任何一个人都不能是各方面的专家,所以我们才有这么多专注于不同领域的教授和专家。

商业供应商,尤其那些提供特殊的软件和组件的,雇佣那些顶尖的技术专家,提供高质量的软件。供应商拥有该领域的专家(例如OCR或者网络),软件设计的专家,编程的专家。这些专家们的合作,让你得到的是值得信赖的产品。但对于开源软件,很少有这样的例子。拥有某个领域的专业知识的专家通常只会为人民币服务,在业余时间陪陪家人,还有他的爱好。很难会到找一个软件架构专家(虽然不是完全不可能),同时也是一个编程专家。

所以,对于商业软件,你通常能得到一个高质量的软件(不单单是高质量的编程,而且是该领域的高性能),相对于开源的软件。

协助

开发开源软件的初衷,往往是好奇心,或者宣传的欲望,还有其他类似的情感因素。对于短期来说,这个非常好,对于软件的雏形的开发已经足够了,但是对于长期的维护和尤其帮住你去使用软件方面,却远远不够。换而言之,如果你需要帮助,你需要到处去搜索它相关的资料,或者支付软件的开发者。

对于缺陷的修复的成本往往超出同类商业软件的许可费用。这个原因很简单 – 商业软件供应商是基于风险模型,对于所有的开发和支持开销都会伴随许可的销售,不管你是否需要使用他们的支持(通常提供更多的技术支持,但总体的方案就如许可上面所说的)。对于开源软件,补偿开发和支持的唯一资金来源是,想方设法的让你去支付他们。

原因8

每个人都有自己的理由,我把我的放到个人博客中

缺陷

有很多开源项目都提供卓越的品质。是的,的确存在很多开源却提供极大价值的软件产品(主要是最终用户和服务器软件,很少是库)。但如果你仔细观察的话,它们大部分是(a)只是由大公司或机构赞助的商业软件;(b)仅对非商业用途免费但谁会读那些使用者许可协议呢;(c)并不像起初感觉的那么优秀,伴随着内部管理问题、代码臃肿已经设计和实现缺陷从而必须时不时重写。

开源是免费的且没任何价格可以挑战它。是的,在鼠标陷阱里的奶酪也是免费的。但不像鼠标陷阱,免费软件是一个涉及每个鼠标的陷阱。参与维护、bug修复以及如果移植到其他解决方案后开源产品突然不能工作时都需要成本。而这些成本可能大大超过商业解决方案的初始成本,特别是试图依赖免费方案的业务流程。即便当你继续使用开源解决方案时,援助要么需要付费要么希望编程社区里有人会无偿帮助你(绝对没有保证)。

开源项目提供源代码。是的,大多数商用库也提供。商业终端用户软件很少提供源代码,这是事实,但正如上面提到的,很少有人使用这些代码(除满足好奇心外)。

开源项目有文档记录。是的,伴随着令人困惑的注释以及不可读和格式混乱的代码。相对于专业的书面文档来说,维基和公开维护的知识库也是一个薄弱的替代品。

我可以在编程社区寻求样板。你可以发问但并不能保证有答案,也不能保证所提供的答案的质量。事实上,一个在特定情况下可以工作的东西,在真实环境中不一定能保证方案的可靠性。

开源项目跟商业软件有同样的特性。是的,可能起初它们的特性一样,虽然这需要证明:商业库必须脱颖而出而提供特性是一个很好的方法。在任何情况下可扩展性的开源软件是较低的,因为缺少实现可扩展性的主动力以及糟糕的设计。

开源软件有很大的API嗯,巫师有时可以提供良好的“医疗服务”。但还有一个更好的主意——“去医院”。

我可以自己修改开源了产品嗯,你可以做同样的商业库的源代码。

*  开源还可以提供独特的功能。嗯,它可以,但只在一段时间内。简单和廉价的独特功能成为普遍功能相当快。真正独特的功能,需要资源来实现。

由于有更多读者,所以可以更好地测试开放源码 “这是更好地测试”并不意味着更好的质量。这意味着只是在bug跟踪系统有更多的bug。并且bug修复一般较慢,开放源码与商业软件相比,后者有更好机会和更高质量。

* 开源库对于我来说一直都用的挺好的。的确是,在封闭的环境和面对简单任务的时候,只测试过一次的代码可以正常工作几年。但是,如果这些代码与其他软件和网络交互时,外部程序的修改就会让你的系统停止服务,而当这个情况发生时,你只有很短的时间来应对。

* 有时候一些简单的任务,不需要专家,这个时候开源软件对我来说是非常好的选择。匹配是一件繁琐的事情。不是吗?匹配的组件是几十年前,很多来自化学,生物学和物理学的科学家发明的。你现在觉得繁琐的东西是以前的科学家经过多年研究的成果。在软件领域,没有繁琐的任务和繁琐的解决方案。

* 我可以得到来自社区的帮助,我不需要付服务费。并且,你还可以向社区获取保健方面的支持,法律援助,汽车维修等等。但是,这个途径并不高效,并且就像玩火一样 – 一个不完整的建议,可能会给你带来很大的麻烦。在现代的生活中,专业的服务是必须的。

* 你有偏见。每个人都是。

* 你不喜欢开源软件。我个人也使用开源软件,并且在过去几年,我的公司在某些产品上获取到开源的许可(MsgConnect, VoxPopuli等等)。我看到了来自开源软件的大麻烦。

* 开源软件会统治世界。这就是我所担忧的,因为,就如上面所述,开源缺乏很多特性(尤其是质量相关的),这样会伤害我们。

* 你不了解开源软件。在这个行业中(开发面向公众的可重用组件和库)工作超过15年,我学习到所有可以替代的软件和商业模型,并且我尝试跟踪在这个领域的修改和改进(包括授权和商业模型)。

* Linux和其他开源软件已经改变了世界每个角落,除了个人电脑桌面,并且桌面将会是下一个目标。我们已经听说这个说法很多年了。Windows服务器变得越来越受欢迎,Azure是一个优秀的PasS, 很多人从OpenOffice/LibreOffice回到Microsoft Office。实际上,Linux在智能手机和类似设备上是个佼佼者,但是微软的错误导致丢失这么好的势头。我本身并不是微软的传道者,但是我并不希望Linux垄断这个市场。

* 我 与商业软件供应商之间有些伤心的经历,而用开源库,却从来没有任何问题。正如我所提到的,明码标价不会神奇地把程序员变成一个可靠的商人。但使用商业软件,对于你花的钱,得到与之相符的价值和服务的机会要大得多。而对于你耗费在使用开源库的时间,很可能 你 什么也得不到。

*商业软件供应商不能被信任。这是一个 观念和信心 的 问题 。如果你认为你不能相信任何人,那么,我们也没什么办法让你相信。

*我怎样才能确保供应商可以信任?这是一个很好的问题,说明你从完全否定,转变到有点好奇心了。 因为对于任何产品( 顺便提一下 , 不一定是商业的),制定投资决策时,都有许多因素要考虑,所以 我打算 单独 发布一篇文章来解释 问题 。

收藏 3 评论

相关文章

可能感兴趣的话题



直接登录
最新评论
  • 这篇文章是用来引发口水战的吗……咦?怎么没人喷呢?

  • 我的观点是这要分情况来讨论,有些情况下我还可以说《选择开源而不是商业库的 10 个理由》。

    1. 标准库和基础库:比如说 STL,用个 gcc 带的 STL 不是问题吧!用个 Boost 能出啥事?我用个开源库解析 XML 难不成还阻碍开发?这些标准库基本上不需要定制,所以不需要商业库,也非常成熟稳定了。
    2. 前沿技术与标准技术:比如 OpenCV 、OpenCL 这些技术本来就是开放标准,而基本上目前这些技术和库都属于试验阶段,基本上用这些东西搞的目前还都是比较前沿的产品,商业库不一定存在,也不一定满足需求。
    3. 垄断技术和不存在开源库的技术,亦或除了以上两点的其它技术:使用商业库理所当然。

  • Michael   2013/05/04

    佩服,很少有人愿意得罪那群骄傲的猫敢把真相敢说出来。

跳到底部
返回顶部