基于开源软件的商业仿真软件开发战略


  虽然还存在不少争论,基于开源软件的商业模式今天已经得到大家的认可([1]~[4])。从以前的RedHat到近期的Docker,你可以找到不少成功的范例。但是这些例子集中于网络,操作系统,亦或是文字处理这样的通用性很强的领域,在仿真软件这样的专业性很强的领域,更具体地说如果想在中国开发仿真软件又会如何呢?

   在中国开发仿真软件需要认清如下三个问题

  • 开发仿真软件首先需要了解"应用(研究的/工业的)→物理/力学原理 → 数学+ 算法+ 软件工程"这一系列的过程。如果你要开发一流的软件,你更是需要精通这一系列的过程。根据我个人的经验,最低限度你需要经自己的手推导出全部的公式,厘清每一个数据的走向。这是一个很高的门槛,即要求很高的数理素养,还要具备一定的软件开发人员的工匠气质,决定了能参加这类软件开发的人很少。科学计算平台trilinos可以是最有影响力的平台之一了,它在Github上现在的星数是349,这个数字和高人气的通用开源软件相比要差一,二个数量级。
  • 中国的研究水平较低。在我熟悉的专业(力学有限元)中,我没有看到国内专家的高水平专著,也很少看到有影响力的论文。这是中国很难出现相应的高水平软件的原因之一。另外,据我个人的经验,中国的教授们很少自己编程,因此很难理解认识软件开发的难点,痛点。而据我所知,名著Finite Element Method的作者之一·R.L.Taylor,名著Finite Element Procedure的作者K.J. Bath都是会自己动手编程的,而你如果有机会读到FEAP的源码,你还可以看到英年早逝的力学大师J.C.Simo和其他名家开发的代码。
  • 中国缺少开源软件开发的文化。有句话说"Opensource is an ethos not just license". 在中国,竞价排名,知识付费的盛行正是反映了某种缺失。另外,在欧美,日本,利用税金开发的软件一般是要求开源的,据说中国也投入过数亿开发有限元软件,但是并不公开。如上所述,我们应该可以想象光靠高校等的研究人员来开发出一个可用的软件是非常困难的,最好的可能是开发出一个还不错的基础平台。如果能借此培养一些开发人才,形成一定的开源开发社区,从企业拿到二次,三次开发资金,还有成长起来的可能。上面的独吞模式必定是一条走不通的死胡同!参考这里
  下面是我基于开源软件的商业仿真软件开发战略的看法:

1.  我们必须利用开源软件

   和华为的鸿蒙软件系统不会从零开发的理由类似,我们不应该从零开始开发一个仿真软件。仿真软件的复杂程度也许不如操作系统,但是由于要求较高的数理素养,起点也较高。另外,以有限元为例,经过几十年的发展其算法已经相对成熟。同时伴随开源社区,软件工程思想的发展普及,已经存在有不少设计清晰,算法实现优秀的部品软件。如实现基层算法的blaslapack,图论工具metis zoltan(常用于网格分区和矩阵排序),线性方程组求解器mumps ,固有值求解器arpack等。再重新开发这些功能既无必要,你也很少有开发出功能超出这些千锤百炼的软件的可能。至于完整的FEM开源软件也有不少,比如这里这里。对于仿真软件的开发弱者,合理地利用这些开源软件将会给与我们一个快速追赶的机会。
   大部分的开源软件出自美国,这就是实力和底蕴!历史的经验告诉我们要小心开源软件的法律问题。

2.  开源软件协议
  (我不是法律专家,下面意见仅供参考。如有错误,敬请斧正!)

  • 具有传染性的GPL协议: 基于GPL协议软件开发的软件也必须是GPL协议。GPL要求你在将你的软件贩卖给用户时必须向用户公开你的源代码。如果你的软件只做SaaS服务,倒是可以不公开源代码,因为你并没有把软件贩卖给用户。
  • LGPL协议:  如果只是与LGPL软件做动态链接,那么你的软件不需遵守LGPL协议。
  • BSD/MIT/X11协议:  不要求基于这些协议软件开发的软件公开源码,只要求著作权等的表示
  • Apache协议: 与上述BSD协议类似,但是受美国出口法律约束。(注: 我注意到中国厂家的WPS也有类似条款,因此在法律上华为现在不能使用WPS
  • 在美国的开源服务器,如GitHub也受美国法律约束。这里面是有很多隐患的,需要小心。
3.  基于开源软件的商业战略
         基于开源软件的商业战略有很多。比如在下面的参考文献【1】中就列出了18种。这里有一些是土豪专用,下面我们看一看有些什么基于现有开源软件的商业化途径。

  • Support and service: 为开源软件的使用提供技术服务。RedHat采用的是这种策略。这个是不是中国人最熟悉的做法?我发现中国有不少提供国外商业仿真软件使用方法培训的公司,奇怪的是它们并不能开发软件,甚至没有软件的代理权?开源软件的使用提供技术服务是进一步的做法,由于熟悉开源软件内部,应该能做得更好。不过我怀疑这种模式的收入有限,因为仿真软件的用户数量毕竟不能和RedHat这样的操作系统,LAMP这样的开发环境相比。但是另一方面,软件的咨询服务方面的费用比例正在上升。具体的数字就不知道了。
  • Dual license: 提供限定功能的免费版本和无限定的付费版本。一般情况下免费版本的使用也加上一定条件,如源码修正必须公开,不允许商用等。这种方式营销的面比较强。免费版本可以使潜在的用户产生信任感,得到迅速的反馈,了解用户的需求,还可以得到免费的软件测试,甚至是开发人员。MySQL采用的是这种策略。
  • Constomazation: 付费定制。定制的内容可以是现有软件欠缺的,也有可能是特殊行业的特殊功能,也有可能是便利化工具。以近期流行的3D打印为例,其特点是材料的渐增过程,解法上也许不需要什么新东西,需要的就是计算工具的重组和相应的便利化工具。个人认为这是一个非常广阔的领域。能够熟练地操作这一工具是打破ABAQUS,ANSYS等独霸市场的有力武器。
  • SaaS: Google,eBay他们开发软件,但是不买软件,他们买网上服务。在这里,你用GPL软件也可以,这是其魅力之一。
  • 人才培养: 归根结底,如果没有相应的人才,什么战略都归为空谈。而中国正是缺少这样的人才。如果能够通过开源软件形成一个开发社区,可以用来教育培养相应的开发人才向商业软件公司输送。也许这才是最根本靠谱的战略吧。
   


参考文献
1.  Business models for open-source software
2.  Setting an Open Source Strategy
3.  Open Sources: Voices from the Open Source Revolution
4.  Enterprises Open Source: A Practical Introduction
5.  The Open Source Software Business Model Blueprint

VS Code下cmake, c++编译,调试环境的构成步骤

1   下载必须extension      按[Ctrl+Shift+X]打开extension窗口,选择安装"C/C++", "CMake", "CMake Tools" 2   在VSCode下打开作业目录 ...