在工作中使用过一些开源软件,有过一些美好的体验,也有一些不好的体验。

对于那些纯粹开源,不掺杂任何商业考量的贡献者,我感激他们的辛苦工作,但仍然希望他们的作品可以更好。
对那些借助开源社区力量,着眼商业的各种组织,我仍然感激他们的辛苦工作,也希望他们的作品可以更好。

我想澄清一件事情,那就是:

并不是因为一个软件开源,并且没有直接从我的手里获得收益,我就不能指责它的缺点和不足:

也许存在一些特别的例子,某些个人和组织,故意把开源软件的文档写的晦涩难懂,以此来逼迫客户购买技术支持服务。

当节约成本成为强大的压力,客户、开发组织需要开发者、使用者使用某些流行开的开源软件的时候,
开源软件的不足,需要各方加以重视,如此才能促进其发展。否则,就变成了以势压人了。

一个软件没有流行开时,它有再多缺点都无所谓。但是流行开来后,如果有人跟我说:
人家是开源的、免费的,你怎么不知感恩,反而挑三拣四呢。我是不赞同的。
谁知道这些开源软件背后,站着哪些力量呢?

开源软件开发者也要生存,开源软件软件背后的商业组织,也需要生存,
但是,除了用低劣文档、复杂配置逼迫用户就范之外,就真的没有其他生存之道了吗?

世上软件千千万万,为何使用者要选择这个而不是那个,都有各种理由,
我认为,长期为普通开发者所不喜的,其前景是黯淡的。

想想也很容易理解:你如果总给别人制造麻烦,还能指望别人感激你,喜欢你吗?

当然,开源软件的使用决定,有时候是客户做出,有时候是公司高层作出。
很多时候作出决定的人和实际使用的人是不同的两个群体。
但是即便如此,如果一个软件长期使用不便,配置复杂,甚至常常出错。如果出现更好的替代者,长期看结局也是可以预知的。

开源软件也应当与时俱进,在我心目中,它应当是这样的:

第一:Contributor Open

一套开源软件,可以由少数核心开发者控制,但不应当被他们所恶意把持,不过这估计很难。
因为,大多数人是自负的,不愿意放弃手中的权利。
所以,可以预计,在不久的将来,git hub 那种没有核心控制的开源方式将成为主流。

第二:Design OPen

好的开源软件,不仅仅应当是代码开放;它为何这样设计代码,它的设计意图如何,应当是有明确的说明。
有的时候,因为后来者对之前的各项参数的意义不熟悉,导致改乱了程序结构,破坏了原有参数的含义。pgpool是其中的典型。

第三:Test Open

无论哪种软件,不管它是否开源,都受到到工程规律的支配。
如果一个小的组件没有经过充分测试,那么没有人可以保证在更大范围内它会引发意想不到的问题。

打上开源标签,也不能保证它就是对的,如果出现错误,即便是很快出来补丁,也很可能改正错误的代码,由于没有充分的测试,会再次引入更多的错误。最近PostgreSQL的安全补丁事件就是这样。

所以说一套可以信赖的软件,理想情况下,应当附带一整套完整的自动测试套件和测试用例文档,

当然,还不仅仅是测试,广义上讲,在代码级别进行良好的检查,对开源软件一样十分必要。

我在这里再特别提出一点:对于内存泄漏方面的检测,是十分必要的。
应当有相关的测试套件,有测试文档专门对本软件的内存泄漏检测方案加以说明。

例如那种很多国外大型软件中,西方老程序员们很喜欢用的 strdup,
如果没有极为特殊的理由,是否应当用代码检查工具直接拒之门外?

第四:Architecture Open

现代软件的体系越来越复杂,就像软件设计应当遵循低耦合的原则一样,软件的各个组合部分应当在体系上易于分割,易于替换。让好的功能组件,不断脱颖而出,这样才能保持一个开源软件内部良性竞争,保持其旺盛的生命力。MySQL配备各种引擎算是一个例子。

第五:Documentation Open

一个软件,如果想走上与使用者或者开发者互动的良性循环,文档的质量是必须加以考虑的。一个开源软件如果对待文档如同对待代码一样上心,允许大家来共同有序地维护文档,将会使减少用户的障碍,降低门槛,使用者更多,这个软件也将更有分量。

最后回到开源软件的赚钱模式上来:

恐怕有人会问,如果开源软件本身十分优秀出色,用户用起来很容易,它怎么赚钱?

我的看法是:

如果一套软件非常重要,比如7x24小时需要维护。
无论它使用起来多么方便,恐怕公司也要找服务商来负责支持吧。

现在BSD协议方式,允许进行基于开源软件的二次开发。
用社区赚取眼球扩大签字用户基础,用高级商业版来赚钱,有是可行之道。Redhat的做法与此类似吧。

开源软件 不等于 一定是好软件,它仍然必须遵守软件工程的规律。所以它需要更加开放以获得更好的产品质量和用户体验。

转载于:https://www.cnblogs.com/gaojian/archive/2013/05/22/3092145.html

我心目中理想的开源软件相关推荐

  1. 学计算机的理想是什么样的,你心目中理想的游戏空间是什么样子的?

    结束了一天的工作学习,回到电脑桌前,劳累一天的身心便会放松下来.由屏幕,键盘和鼠标构成的小小空间,便是我们大多数人的灵魂栖所. 你心目中理想的游戏空间是什么样子的?是灯光炫酷,RGB拉满:还是清新简约 ...

  2. 我心目中理想的“元宇宙”

    现在所有的元宇宙概念,都不过只是VR + AR plus罢了,只是巨头们缺乏想象力的一场金融游戏.实际上以现在的科技继续发展,我认为一个理想的元宇宙,按照我的现象,应该是这样的: 1.能自我增殖的超级 ...

  3. [转]针对文献管理软件Note谈我心目中的个人资源信息管理软件

    作者:sealogos    Email:sealogos@gmail.com    个人主页:http://hexun.com/zyt0538 本文的起因与目的:随着自己大脑和电脑储存的资源越来越多 ...

  4. 算法实现太难了?机器学习也需要开源软件

    作者 | Soren Sonnenburg等 译者 | 刘畅 出品 | AI科技大本营(ID:rgznai100) 导读:开源工具已经趋于成熟,这使其能构建大规模的自然场景下的系统.与此同时,机器学习 ...

  5. 软件协会发布开源软件与商业软件知识产权报告

        日前,中国软件行业协会发布了<有关开放源代码软件与商业软件知识产权的研究报告>(以下简称<研究报告>),明确提出"反对政府直接支持或干预任何形式的软件商业模式 ...

  6. 开源软件及国内发展趋势

    源是大势所趋 随着计算机技术的发展,尤其是互联网技术和相关企业的兴起,开源软件在操作系统.编译工具链.数据库.WEB服务器.移动操作系统等各个方面已经成为主流.而且许多企业利用开源软件形成了独特的商业 ...

  7. 开源软件及国内发展现状

    1 开源是大势所趋 随着计算机技术的发展,尤其是互联网技术和相关企业的兴起,开源软件在操作系统.编译工具链.数据库.WEB服务器.移动操作系统等各个方面已经成 为主流.而且许多企业利用开源软件形成了独 ...

  8. 开源软件使用的风险和应对方法

    目录 一.开源软件的漏洞 1.1 发现漏洞并评估影响范围 1.1.1 开源软件清单和SBOM 1.1.2 如何得到软件产品完整的SBOM 1.1.3 通过SBOM识别漏洞影响范围 1.1.4 漏洞感知 ...

  9. 十大开源软件贡献者排名

    国外知名博客主评出了自己心目中的对 开源 贡献者 Top 10,列出的自然是大家耳熟能详的大人物.您心目中的十大 开源 贡献者是下面的这些人吗? 1. Linux之父-Linus Torvalds L ...

最新文章

  1. 【文本分类】深入理解embedding层的模型、结构与文本表示
  2. JDOM是JAVA中最常用的一种解析XML的工具
  3. Windows 2003 服务器播放FLV的问题解决
  4. 在ASP.NET Core中获取客户端IP地址
  5. easy admin java_GitHub - zzccbb8/easyadmin: 简易的java后台管理框架,基于SpringBoot+FreeMark+ace admin+mysql...
  6. django默认数据库sqlite3改为mysql
  7. 十天学会ASP.Net——(2)
  8. windows server 驱动精灵_还在用Windows文件共享?我来教你一键摆脱Windows海量小文件使用和备份的噩梦...
  9. 异步通信在生活中的例子_AJAX简单异步通信实例分析
  10. Cloudera-Manager 与 原生集群 免密登录问题
  11. 抖音诉腾讯不正当竞争案撤诉;微信更新,表情包上限999个;PyTorch 1.8.1 发布 | 极客头条...
  12. 华为怎么删除自带的音乐_华为手机独有的这个模式,让睡觉更舒畅
  13. GitLab 9提供了子群组、部署面板和集成监控
  14. 0基础入门学PLC,只需掌握好这5个步骤让您从0变精通
  15. linux aria2 多线程,Mac/Linux 多线程下载解决方案(Aria2 YAAW是什么)
  16. 【java】解决安装时时显示this version of the jdk is already installed……
  17. alt 工程开发时,atl向导报IE脚本错误问题的处理
  18. 中级微观经济学:Chap 9 购买和销售
  19. PASCAL VOC数据集训练集、验证集、测试集的划分和提取
  20. L2-025 分而治之 (25 分)详解

热门文章

  1. STM32F4 HAL库开发 -- GPIO
  2. 日常生活小技巧 -- 玩转 PDF
  3. 编译Android VNC Server
  4. Sparkmllib scala线性回归
  5. Hyperledger Fabric 排序服务核心原理和工作过程
  6. swing退出子窗口事件_如何创建有效的退出弹出窗口?
  7. pythonsys用法_Python中 sys.argv[]的用法简明解释
  8. oracle 提示存在lob,案例:Oracle数据库临时文件特别大 commit后lob字段使用临时表空...
  9. 条件随机场(CRF)相对于HMM,MEMM的优势
  10. 2007年分区联赛提高组之一 统计数字