2019独角兽企业重金招聘Python工程师标准>>>
来这不久,像 @宏哥 发表的一些有质量的老帖子,都没有翻过,今天看到别人翻出的关于开源产品集中在什么样的市场的帖子,我也就此话题发表下我的观点。
首先,关于@宏哥 的原帖内容,我表示认可。因为,所谈的内容属实,从某个角度上得出的结论也正确。
下面我从其他的角度来谈谈开源和市场的问题。说开源和商业公司闭源的最大区别,我觉得应该是面向的目标不一样。开源之所以能称为开源,不单单是源码 开放,更多的在于不同群体的组织化开发行为。例如,你一个人A,不算,你不仅A了,还传播A,导致一群人A,那么你就犯法了。但一群人A,口味总有差异。 要想能传播的A,至少也是德艺双馨的陈摄像师或空老师的作品。即便这样,也会因为有特定人群的不同品味表示拒绝。
而商业公司,公司化行为就是赢利,因此存在非常明确的客户或客户群。你要什么我给什么。我的目标就是让你爽。别人爽不爽另谈。
由此,开源通常是在两种情况下,具备良好的开发和使用价值。
1、明确的一个共用目标。例如IM。还有视频编解码。大家可以了解一下XVID,和DIVX的历史就知道了。现在流行的FFMPEG,你们看到的国 内绝大多数的无论是网页的视频播放,还是各种播放器,可以肯定,几乎百分百有开源的代码在里面,如果是泛PC平台,不是特定的嵌入式平台。我甚至相信,百 分百的这些商业企业,只是做了局部修改,核心是否有特定优化都很难说,原因不是技术。
2、非明确目标,但存在共性的通用件。例如linux和阿帕奇本身。mysql也算成功的一个。从我对数据库的定义来看,mysql也是个数据库。如同只有VFS的OS,仍然是个OS一样,即便功能不足,但基本功能都有,MINUX也是OS。我也是从这个学起的。
这些非明确目标的通用件,如果作为商业公司来看,确实无法直接拿来用。因为这些通用件并不是为了特定客户的需求所设计的。而是作为一个平台化的东西,更通用的给予最终开发者以方便和支持。
别人为什么要参与你的开源项目,因为你的开源项目能和自己60%-80%的设计目标或所需要的底层接近,由此,参与到项目中开发,并针对自己的目标中,别人也需要的东西,组织进开源项目。
由此,总结,开源的价值在于重叠各个开发目标中的通用型,降低了开发人员的成本这个很难说,但可以有效的形成一些事实标准,方便后续的面向具体客户的业务响应。并针对共性部分进行高质量的设计,这块反倒是闭源代码项目的劣势。
而对于中高低端市场,这个划分规则,每个人有每个人的看法。这里并不想参与讨论最正确的结论。就我的态度,市场本身没有中高低端之分。但从收益,和技术复杂度,可以按照两个标准分。
1、收益多少。
2、技术难度大小。
从产品收益多少来看,如果把开源的代码直接对应,那么几乎可以肯定是低端的。既然都开源的代码,拿来就能用的话,怎么可能还有什么产品收益呢。而商业领域则不同,会有定制化的工作涵盖,包括定制化的稳定性检测,性能扩充等。不过这些工作又有多少是基于非开源的代码之上呢?
如果不谈收益,谈技术难度大小。例如,淘宝的后台系统,可以说相当复杂了。另外,还有一个实际应该比较复杂,但是究竟怎么样,我不知道的系统,铁路 订票网站。不谈后者,就谈淘宝的去这个化,去那个化。如果想去这些商业软件,不依赖开源的技术,重启炉灶,如同你想A,打算重新配DNA育种,过18年后 再找陈老师拍A,一样不靠谱。
如果从技术难度上来看,还有一个就是这个项目的通用型。GCC,不单单是个C编译工具链。这就是开源的。GCC可以说是支持平台最广泛的。难道技术复杂度不够高?
由于开源的自身的特点,因此更多的强调共性方面的技术开发难度和深度。而不是特性方面。由此,在独立拿出来,和特定目标的商业软件比较,是没有可比性的。
从哲学辩证的角度来看,没有优点,缺点之分。从项目主持,运行角度来看,最小的投入,最大的产出,是目标。由于开源是共性强,差异性弱的特点,因此,利用开源,集中满足客户差异性需求,才是有效的发挥开源特点的方式。
最典型的一个例子就是,oracle,可以说这个产品非常优秀。优秀在什么地方。对于广泛的数据库应用需求,均可以提供良好的,稳定的,大负载的支 持。但极端的对比时,就有问题。如果是特定客户,或特定客户群的任务。针对这类特定客户的数据库的支持,则oracle的产品就无法做到最优方案。
由此我也说过。如果针对特定的目标任务,如果拿基于开源的代码进行改造出的来的产品,在技术指标上和oracle来对比,简直可以说在欺负oracle。这就如同商业软件产品和开源的半成品模块做对比一样。
可能你会说,你野鬼是不是喝高,首先我不喝酒,其次没有彪狂。我就举个简单例子。
曾经优化工作中,有个条C代码语句。类似如下
(a*b+c)>>d;
由于DSP虽然有并发度,但是乘法器和移位器之间,存在3个cycle的延迟。如何解决掉移位工作。经过特定情况分析,在特定目标计算集合里,确实移位可以去掉,等同于
((a*b+c)*e)>>8
>>8有专门存储转移指令可以处理,e和d 都是常量。由此就变成了。
a*B + C
基本上基于这个优化策略,速度必自动编译器提高了4倍左右。DSP上,C代码的最高优化,和我汇编的优化,差异8到20倍,是很正常的。不是我的能 力比C的编译器强,而是C语言在描述一些问题时,无法更好的利用硬件特性进行。但C是高级语言,强调的是跨平台的逻辑描述能力,难道我就能认为C这个类似 开源的东西不好吗?显然抬杠了。如果不用特定寄存器,在非并发CPU上手工优化,你几乎没有机会超过C编译器性能的 15%。
我这里强调的并不是算法本身。类比,客户的任务也是一样,如果客户的数据库的特性导致很多数据情况并不存在。则特定的优化可以有效的发挥价值。不仅简化了数据结构,业务结构,也简化了计算方法和计算步骤。
由此,特定客户群的数据库优化后的产品,如果就此特定任务去 和 oracle这种商业级的产品比,确实欺负后者了。但是面对通用的客户目标,又有什么资格和oracle比呢?
而特定的商业级的产品和开源产品也是一样。
产生差异的原因就是在于,一个是具备特性的,一个是更看中共性的。这里重复一下@宏哥 观点的看法,还是对的。由这个观点,继续推导,也说明,开源要想真正被客户良好的使用,在最后还是要有个特定客户群的特定任务定制的工作。否则也确实会被 沦为“中低端”的市场。毕竟,开源的产品,更多的是半成品的方式出现。例如 ccflow。我相信,ccflow中间还有很多BUG和不足。同时,也不可能拿出来,针对某个特定客户的任务有良好直接的解决。但是我也相 信,ccflow的类似开源项目的继续,在成熟后,可以为更多的定制化的flow任务,所提供良好有效的支撑。
最后重复一句,开源的项目,无论是开发的目标,重点,还是价值,都在于共性部分。由于不同角度,不同水平的开发者的接入,可以有效的提高共性部分代码的质量。这是传统商业闭源产品所不能比拟的。