该系列第一篇发布后收到不少反馈,包括:
  1. 第一篇里说的MonicaHQ不一定盈利
    没错,但是问题在于绝大多数开源项目商业数据并没有公开,从而无法判断其具体是否盈利。难得MonicaHQ是公开的,所以才用来做这系列文章的开篇。
  2. 很多人关心最初用户(专业术语叫种子用户)是怎么来的?
    这不但是开源项目的难点,还是任何一切项目的难点,这个话题实在是太大了。无法开展。
  3. 有相当一部分人喜欢看像MonicaHQ这种处于早期的开源项目介绍,觉得这类项目才有参考意义,但是也有相当一部分人喜欢看成名的大开源项目分析。
 
所以:
  1. 我将系列名称改为了《商业模式分析》。
  2. 在以后等文章里,我可能无法举出翔实的数据支撑了,只能靠我个人片面的记忆和经验,所以更加需要大家的反馈来纠正偏差了。
 
好了,开始第二篇文章。
这篇文章的主题是:持续维护在开源项目中的重要性!以SeleniumWatiN 为例子
 
Selenium是个很有名气的大开源项目,主要用于自动化测试,由IBM主导。我现在也在用。
 
然而在十年前,Selenium的质量比WatiN差很多,比如:
  1. Selenium当时是针对Firefox优化的,而WatiN是针对IE优化的。你要想你的自动化测试代码跑在IE下,WatiN质量比Selenium好很多。
  2. WatiN的用法和代码风格十分先进,WatiN和Selenium的用法和代码风格差距就像C#和Java的差距一样大,用惯了WatiN的用法和代码风格你再用Selenium你会无法忍受。
 
我从2008年开始一直用WatiN用到2015年。无数次想把WatiN换成Selenium,但是都告失败了,因为在以上几点里,Selenium还是一直不能超越WatiN。
然而,到了2015年,我终于放弃了WatiN,改用Selenium了。
因为2015年发生了两件大事!
 
第一件,Angular/React/Vue等现代Javascript框架出现了!
WatiN因为缺乏持续维护,终于跟不上潮流,无法用在这些现代Javascript框架上!而Selenium因为持续不断的更新,可以用在这些现代Javascript框架上。
 
第二件,这些现代Javascript框架对IE支持都不好,对Chrome支持都很好,同时IE市场份额不断地掉,Chrome变成了第一大浏览器了(这两者互为因果吧)。
WatiN因为缺乏持续维护,上面提到第一点也就是它最强大的竞争力,针对IE优化,随着IE市场份额不断地掉已经不再是竞争力了。
而Selenium因为持续不断的更新,并且把更新重点放在支持Chrome和现代Javascript框架上,Selenium第一个缺点消失了,变成了优点!现在Selenium在Chrome上跑比Firefox好很多很多了!
 
同时,也因为持续不断的更新,Selenium的用法和代码风格现在变得和WatiN类似,甚至比WatiN更好了!嗯,大家可以在脑海里想象一下,Java也像C#一样支持LINQ了,就可以理会到类似情景了。
 
See! 因为持续不断的更新,Selenium把WatiN所有优点都超越了!
 
我做为一个用了WatiN7年的老人,当然是无比的忧伤!然而又能如何?
 
好啦,问题来了,WatiN为啥不像Selenium一样持续不断的更新呢?
其实WatiN也想更新的啊,然而:
  1. 一开始的时候,WatiN真的领先Selenium太多,完全没有动力和必要更新啊。
  2. 几年后,nuget出现了。WatiN为此终于做出了几年来第一次更新!这次更新就是为了支持nuget.这次更新成功的原因是改动不大,工作量不大。
  3. 当2015年现代Javascript框架和Chrome超越IE这两件大事出现时,WatiN如果要适应它们,改动实在是太大太大了,所以果断放弃更新了。
而Selenium为啥能持续不断的更新呢?因为它有IBM这个大金主好爸爸啊!
WatiN第一没有IBM这个大金主好爸爸,第二又没有任何收入来源,拿什么去支持持续不断的更新?
 
这个真实的故事告诉我们,开源项目一定要有能支撑其长期发展的商业模式!技术暂时不先进没有关系,只要有一个能够支撑其长期发展的商业模式!你可以像龟兔赛跑里面的那只乌龟,超越那只睡觉的兔子!
 
 

开源项目商业模式分析(2) - 持续维护的重要性 - Selenium和WatiN的更多相关文章

  1. 开源项目商业分析实例(1) - MonicaHQ

    本来写一篇开源商业模式的稿子,因为有四大主题,这个稿子有点大,导致现在半个月过去了,都还没有憋出来.   今天想想还是采用MVP(minimum viable product,最小化可行产品)模式吧. ...

  2. GitHub Python项目推荐|瓦力Devops开源项目代码部署平台持续部署

    GitHub Python项目推荐|walle - 瓦力 Devops开源项目代码部署平台 项目热度 标星(star):8418 (很不错的实用项目,大神作品,建议关注) 标星趋势 关注(watch) ...

  3. 基于Java+Spring Boot开源项目JeeSite的Jenkins持续交互介绍

    一.实战项目介绍- JeeSite 基于Spring Boot 2.0 数据存储MySQL 语言:Java 规模大小:适中,适合初学者 源码地址:https://gitee.com/thinkgem/ ...

  4. .Net 开源项目资源大全

    伯乐在线已在 GitHub 上发起「DotNet 资源大全中文版」的整理.欢迎扩散.欢迎加入. https://github.com/jobbole/awesome-dotnet-cn (注:下面用 ...

  5. 开源项目大全 >> ...

    http://www.isenhao.com/xueke/jisuanji/kaiyuan.php   监控系统-Nagios 网络流量监测图形分析工具-Cacti 分布式系统监视-zabbix 系统 ...

  6. 【开源整理】.Net开源项目资源大全

    汇总了.NET平台开源的工具类库,新的内容在不断更新中.内容借鉴了博客园.伯乐在线.GitHub等平台. (注:下面用 [$] 标注的表示收费工具,但部分收费工具针对开源软件的开发/部署/托管是免费的 ...

  7. Android 开源项目及其学习

    Android 系统研究:http://blog.csdn.net/luoshengyang/article/details/8923485 Android 腾讯技术人员博客 http://hukai ...

  8. 转发 ----> 2018年阿里巴巴重要开源项目汇总(持续更新中)

    转发自segmentfault  https://segmentfault.com/a/1190000017346799 前端 1.数据驱动的高交互可视化图形语法 AntV - G2 G2 是一套基于 ...

  9. 值得学习的C/C++开源项目 持续更新

    值得学习的C语言开源项目 持续更新 文章目录 值得学习的C语言开源项目 持续更新 - 1. Webbench - 2. Tinyhttpd - 3. cJSON - 4. CMockery - 5. ...

随机推荐

  1. dubbo实用知识点总结(二)

    1. 参数验证 2. 结果缓存 3. 泛化引用 客户端没有对应接口类的情况,可以直接调用 4. 泛化实现 5. 回声测试 用于检测服务是否可用 6. 上下文信息 7. 隐式传参(不常用) 8. 异步调 ...

  2. 机器学习基石笔记:02 Learning to Answer Yes/No、PLA、PA

    原文地址:https://www.jianshu.com/p/ed0aee74523f 一.Perceptron Learning Algorithm (一)算法原理 PLA本质是二元线性分类算法,即 ...

  3. JSON库的使用研究(二)

    Java 中哪个 JSON 库的解析速度是最快的? 这个问题有意义吗?各个JSON库的性能差距不大?呵呵,差距大不大,自己往下看吧! 这个问题我们应该分为以下四个维度进行研究: 1.序列化 2.反序列 ...

  4. VueJs(6)---V-on指令

    V-on指令 一.概述 v-on是用来绑定事件监听器,用在普通元素上时,只能监听原生 DOM 事件.用在自定义元素组件上时,也可以监听子组件触发的自定义事件. 在监听原生 DOM 事件时,方法以事件为 ...

  5. linux取IP的几个方法

    ifconfig eth0|grep " inet add"|cut -d":" -f2|cut -d " " -f1 ifconfig e ...

  6. InnoDB多版本

    InnoDB是一个多版本的存储引擎:为了支持事务的一些特性诸如并发和回滚,它保持着被修改行的旧版本信息.这些信息被存储在一个被叫做“回滚段”的表空间中(跟Oracle中的回滚段类似).InnoDB在回 ...

  7. Go 标准库 http.FileServer 实现静态文件服务

    http.FileServer 方法属于标准库 net/http,返回一个使用 FileSystem 接口 root 提供文件访问服务的 HTTP 处理器.可以方便的实现静态文件服务器. http.L ...

  8. Deep Learning中的Large Batch Training相关理论与实践

    背景 [作者:DeepLearningStack,阿里巴巴算法工程师,开源TensorFlow Contributor] 在分布式训练时,提高计算通信占比是提高计算加速比的有效手段,当网络通信优化到一 ...

  9. QTimer 的使用

    QTimer(重复和单发计时器) 应用 QTimer 时,先创建一个 QTimer 类,利用 connect 将 timeout() 与对应槽函数连接,在调用 start() 函数设置定时器时间间隔, ...

  10. Avos Cloud 的 ParseObject的创建与数据存储检索

    创建/存储数据: ParseObject gameScore = new ParseObject("GameScore"); gameScore.put("score&q ...