我眼中的中国开源社区
OpenSource
2016-06-23 20930字

自2011年深度科技创建,每年都有国内外的开源社区说今年就是Linux元年, 特别是Android这个基于Linux构建的移动操作系统在全世界范围流行的情况下, 很多人非常关心中国开源社区真实的现状是什么? 中国开源社区的未来在哪里? 

自从2004年入坑Linux以来,不知不觉自己已经在开源社区里摸爬滚打了12年,在深度科技工作的6年亲身参加过全国大多数LUG(Linux user group),今天我从自己一个开发者、创业者、布道者的角度讲述一下我心中的中国开源社区。

中国开源社区的现状

中国的开源社区在最近几年已经获得长足发展,特别是Android的流行极大扩张了中国使用Linux的开发者数量,原来Linux只停留在硬件工程师、嵌入式工程师、服务器开发工程师和运维工程师等极小众圈子,通过Android的普及,现在一个初级工程师已经可以非常熟练的使用Linux了。

虽然Linux使用人数获得极大增长,但是Linux依然被限定在开发者领域。不论从整个软硬件生态、开源上下游厂商、开源概念普及、版权和教育都非常不成熟,相对于Windows的生态和广大普通消费者来说,Linux依然离普通消费者很远。

开源社区的成功本质还在于生态建设、社会文化和意识形态的积累,如果不从本质上去分析现在中国的开源社区的问题并解决问题,光靠现在的互联网方法论是无法解决开源社区和开源生态的问题。 

从我个人的观点来看,开源社区在中国的问题主要集中在以下几个方面:

中国缺少一个在开源商业化获得巨大成功的企业

任何一个产业或者商业模式的发展都是遵循这样一个规律: 在特定领域,领域内极小的一部分爱好者和技术专家在领域内长期努力,发展壮大成组织或公司,并以更大的力量持续推动特定领域发展。从个人爱好到小众产品,从量变到质变,最后突破引爆点到大众流行产品。

这种量变到质变的过程并不像很多互联网发展模式,在风口上的产品通过1~2年的努力就可以做出很大的影响,开源社区的成功需要一代人至少坚持5~10年的时间才能有效果,在这么长的时间跨度里,不论从企业家、政府支持、哪怕是爱好者和普通消费者都很难一同坚持下去。

撇开在开源社区一直坚持的开发者、爱好者以及企业,开源社区在中国最大的困难在于“希望”,开发者对于自己喜爱系统成功的希望,爱好者对于自己信仰普及的希望,企业家看到能够通过开源技术获得盈利并不断持续推动开源的希望,大众看到中国人自己国人产品自豪的希望。

而希望的关键在于至少有一个在开源领域获得巨大成功的企业,只要有一个企业在不断发展,它的技术以及产品在被越来越多的人使用后,希望就有可能变成一种可以被复制的商业模式,就有可能引发更多的企业成功的正向循环。

在全世界范围,在开源领域获得最大的成功的企业是RedHat, 这个最早做Linux操作系统的企业,通过自身在开源技术领域的专注,通过开源技术在企业级市场大获成功,2015年RedHat的收入达20亿美金,虽然相对于大家心目中的Micrsoft/Google/Apple的营收来说是没法比的,但是在开源社区这个谁都没有获得成功的领域,RedHat不但可以花钱养一大批Linux技术高手,还能自我造血不断发展,这本身来说就是最大的希望,只要有RedHat在,全世界的Linux爱好者就会相信开源技术以及开源社区能够获得最终胜利。

反观中国,国内还没有哪一家企业像RedHat靠开源技术获得巨大成功。国内只要有一家或者几家在通过开源技术做产品的公司获得成功,就会持续不断激励更多的人员加入开源社区,而企业就可以用相同的模式在更多行业进行复制。

所以,国内开源社区的最大问题就是还没有一家在开源商业化获得巨大成功的企业,只要一家或几家企业在开源领域获得成功,就会成功在整个行业种下希望的种子,而希望和坚定的信念是中国开源社区成功必须要经历的一步。

开源生态不成熟, 上下游厂商进入门槛高, 利润少

开源技术因为先天的强技术和开放的背景,以Linux为首的开源技术和产品已经在服务器、嵌入式、智能硬件领域获得巨大成功,但在桌面操作系统,不论企业级还是消费级市场都遇到诸多技术和生态障碍,比如: 1、在政府办公领域,政府内网办公OA都是基于Windows以及ActiveX技术来构建的,如果OA不进行linux以及html/js技术迁移,只运行操作系统并不能运行业务系统就完全无法办公; 2、很多企业级市场大量使用Windows 应用,比如QQ、RTX和很多专用软件,如果这些Windows软件不进行Linux客户端迁移,只运行操作系统企业无法正常运作;

这只是Linux桌面系统在部分行业遇到两个最大问题,我相信在其他很多行业会遇到各种各样应用生态的问题,如果这些应用生态的障碍不迁移,操作系统做的再好,客户没法直接使用,客户宁愿花更多的钱也不愿意使用开源桌面系统和开源产品,因为对于客户来说,花钱是为了节省时间提高运营效率,而不是花钱来解决他们意识形态里面本就不应该发生的问题(Windows就没问题)。

其实微软也是花了几十年时间来构建Windows应用生态,现在的消费者只是在享受Windows生态完善的红利。而对于开源社区以及开源产品来说,生态建设的过程不能少,而且开源产品的生态建设要比几十年前还要困难很多,当年微软处于的是计算机蛮荒时代,什么应用都没有,很多应用都解决的是从无到有的问题,只要任何一个应用开发者或软件开发厂商开发出一个产品就会有人用,只要有用户在不断的使用,产品就会不断扩大和发展壮大。

而开源社区以及开源产品,不光要解决从无到有的问题,还要解决用户习惯和切换成本的问题,个人和企业开发出的开源产品不但要解决问题,还要比现在市面上的Windows/Mac 系统上同等应用功能还要好才会有人愿意尝试,而且开源系统的成本迁移还不仅仅是一个应用的迁移,当从Windows/Mac系统切换到开源系统上,用户系统里面所有的应用都要有相应的替代品,用户才能在迁移系统时不影响正常生活和工作。

所以,在中国开源社区的第二个问题就是上下游厂商的准入门槛太高,当基于开源操作系统上开发的应用要投入更多的资源,甚至要解决十倍数量级以上的问题才能获得Windows 平台一倍的回报时, 企业的后期回报不能抵消前期的投入,很多企业都不会跟进开源生态的建设中来,这个就和Android早期市场一样,只有当Android平台在前期扫平了很多障碍以后,后期个人开发者和企业才会迅速跟进。

版权意识薄弱, 开源的技术优势和长期成本优势被盗版持续打压

因为中国起步开始普及计算机的时代,国内用户的工资水平都比较低,那个年代人均2000 ~ 3000 的薪水,要一个家庭花2000元左右去买操作系统是非常不现实的,每个人更多的会去选择盗版光盘,盗版光盘的便宜和方便让很多人一直都根植到心中一个概念:操作系统和上面的应用软件都是免费的。

而开源软件的特点是源代码完全开放,只要有足够的技术能力理解和修改,完全可以自己维护。但是开源软件并不像很多人理解那样, 开源软件并不等同于免费软件,开源软件的创作和维护成本像闭源软件的成本一样高。 

开源软件的优势在于源代码完全开放,不同的开发者和企业可以基于共同的目标在网上进行松散开发和维护, 在降低每个人或企业的长期维护成本情况之下,可以持续的使用开源软件的新功能。开源软件的优势不在于短期一次性投入,而在于长期使用情况之下,不仅软件的功能稳定性和持续性有极大保障,而且还避免硬件不断升级的投入成本。

而开源软件的长期技术优势和成本优势依然是需要前期进行投入的,不论开源软件和闭源软件,不论收入的来源是直接来源于用户还是第三方,如果一个软件没有持续健康的收入来保障开源软件的前期开发和维护,开源软件的长期技术和成本优势并无法得到很好体现。

所以,开源社区在中国第三个问题是版权意识薄弱,如果有一天开源软件像国内整个环境对正版音乐和正版电影一样重视,开源社区以及开源技术产品才能获得更为健康持续的发展。

开源概念普及不够, 社会对开源的认识和接触度不够

开源社区对于现在中国社会,就像二十年前计算机对于当时的中国一样,说到开源大多数人都是不了解的, 虽然大多数人手机里面就运行了很多由开源代码构建的应用。

在我看来,不论普通用户、开发者、企业包括政府都对开源的概念和开源社区的运作模式都不甚了解:

不论普通用户、开发者、企业和政府单位,对于开源的理解都要建立在开放的思路上,现在在开源概念的理解上,大多数人都认为只有闭源的代码才是最安全的。因为在互联网时代,软件、硬件包括交互沟通方式每天都在发生变化,闭源不但不是最安全的代码,反而变成最不安全的代码。 

因为当我们封闭和不更新代码以后,外面的软硬件以及生态发生变化,我们的代码很有可能就因为长期没有和主流分支进行合并,包括大量的安全漏洞修复和基本运行都无法保障。在这个不断发展和进步的世界,恰恰和大多数人的直觉相反,不更新的代码就是最不安全的代码!即使从国家安全的角度看,当大多数IT强国都在各种开源社区和黑客大会中不断吸收先进技术构建他们的安全系统,而我们只是拷贝老的代码,单单从这一点来说, 不论从功能还是安全上都要大大落后其他国家的步伐。

学校教育落后开源社区10年以上, 培养不出开源人才

在开源社区,最新最厉害的知识只有几个地方:邮件列表,IRC频道,各开源社区论文三个地方,开源社区的开发模式完全和传统的软件开发和闭源开发方式不一样。

大多数顶尖的开源技术,最开始的仅仅是一个天马行空的想法,然后开源项目作者就根据这个想法做一个简单的 demo 来验证他自己的想法,一旦想法成熟以后就会把代码和想法放到公开的网上,让世界上所有有共同目标的开发者一起合作开发。 

这些开发者主要交流的地方就是邮件列表和IRC频道,有些学校的教授还会写一些非常严谨的论文供别人学习,世界上大部分顶尖的开源开发者都通过邮件列表和IRC频道中和别的顶尖高手互相沟通学习,这些高含金量的知识都是非常碎片化的, 很难被搜索引擎系统抓取,甚至很多讨论中并没有太多知识, 和顶尖高手聊天学习他们的思考方式都是大多数开源开发者快速学习的重要方式。

打个比方,全世界的开源开发者都在以法拉利的速度在学习和成长,中国的学校教育对于开源的教育还停留在自行车的水平甚至更差。中国除了中国科技大学、西安邮电大学、北京和广州的一些大学因为计算机老师本身就是开源拥护者, 除了这些大学在维持各自学校的开源文化和氛围外,大多数大学教授的计算机知识都还停留在远古时代,大多数计算机的学生除了学了基本的 C 和 Java 编程习题外,自己从来没有独立编写过开源软件,甚至一离开学校后除了 hello world ,根本无法灵活用自己所学的知识,更别提跟上开源社区最新的开源技术。

这就造成当互联网行业快速发展需要大量开源技术人才的时候,学校大部分学生都完全不能满足企业的需求, 只有少数从小学习编程或在大学自学开源技术的学生才能满足日益扩大的开源人才要求。而这一部分人才面对行业的需求真是杯水车薪。

从本质上来说,中国开源社区大部分的问题都会归结到学校教育上来,大部分学校教育都是功利性和死板的,除了死背课本以外,根本没有教对于学生最重要的独立思考能力和想法,很多计算机学生空有一身基础教育和方法论,当有一天他们真正面对问题的时候,连基本的问题分析能力和独立思考习惯都没有。

和国外开源社区的差距

上面说了一些中国开源社区的现状,下面说一下中国开源社区和国外开源社区的主要差距:

生态构建意识薄弱

开源技术的发展离不开离散型的社区化开发模式,它的重要基础就是代码能够互相编写,甚至竞争对手共同维护一份相同的开源软件,比如浏览器的竞争对手 google, apple, opera 等等都在向 webkit 这个开源项目提交代码。 

在互利互惠这种最基础开源技术协作原则上,基于开源技术构建的商业模式应该是所有厂商为了减少独自维护庞大开源源代码的压力选择共同维护,并在共同维护的基础上根据自己的优势来构建自己的产品来进行差异化竞争。比如上面说的Google, Apple, Opera都有自己的浏览器产品,但他们都选择共同维护WebKit这个浏览器渲染引擎代码,大家一起维护不单能减少维护代码的工作量,而且能够互相监督保证WebKit引擎在功能上保持中立,然后各家再在WebKit基础之上根据自己的产品优势和市场定位进行差异化竞争。

从本质上来说,开源技术的相互协作开发,甚至竞争对手共同维护代码不是基于大家是绝对无私的,恰恰相反,正是基于自私,任何一家厂商(包括像 Apple 这样的公司)都无法持续的维护和更新项目,只有整个社区一起更新才能发展的更快,而且特别是像很多基础性或平台性的开源项目,如果都是一家厂商做了, 即使开源了,也没人愿意加入一起开发。

国外开源社区还特别喜欢互补性开发,如果已经有一家厂商开发了同样的开源软件,另外的厂商如果觉得现有的开源工具非常好用,就会选择开发互补的开源工具,而不是开发同样的工具。比如最近Docker 在整个开源社区都很火,很多厂商更多是倾向于开发Docker相关的工具和解决方案,而不是重新开发另外一个Docker , 在开源社区, 非常强调先入为主和用户习惯,领域中第一个出现的开源项目只要有人一直维护,这个项目会吸引90% 的用户,而不会用相同功能的开源项目,除非新的开源项目在功能和原理上大大超越现有开源项目。

国外很多开发者和企业在知识和能力并不比国内开发者和企业高明很多,甚至我见到的很多开发者就是普普通通的计算机学生,但是造成国内外开源社区发展活跃度差异巨大的原因就是:国外的开发者和企业,从构建开源项目一开始的时候,就是保证开放协作的方式开发,当参与开源项目的人数达到一定量级就会保持非常高的持续性、活跃度甚至跨行业创新。而国内开发者和企业,从一开始就怕竞争对手抄代码,或者认为自己是这个世界上最聪明的人把代码隐藏,当项目越来越大的时候,使用和开发的人也越来越少,最后自己的维护成本不但成指数型增长,而且发展速度越来越慢。

正确的方式应该就像Chromium 浏览器一样,最开始就开放代码,让竞争对手抄代码,开源项目复杂到一定程度后,一定是需要自己研究才能积累掌握开源技术的知识和能力,如果一直抄袭别人的代码,不具备改进复杂代码的能力,永远都只能跟在别人的屁股后面走。

从我个人来看,国内外开源社区最大的差距就在“意识”上,越开放的态度和意识会导致整个开源社区越向自己内聚,越封闭的意识反而会把所有人推离自己。

市场化步伐太慢

第二个差异是,国内的开源社区在市场化的步伐太慢了。真正大规模在国内推行开源产品的领域恰恰是大家产生误解的 “国产化市场”。在中国党政军领域已经有很多试点在运行。但是很多试点依然是课题性质的,课题性质的概念就是大家对一些核心项目进行分析研究,进行很多原型研究。政府的课题研究经费在原型研究完成以后就发放课题经费,结果就是很多课题完成以后,经费一收就没有下文了。从原型到实际使用过程中更加庞大的问题没有解决,更别说做出来解决市场问题和用户问题。

大多数课题型项目只是买了一个纸上谈兵的方案。大家一起花了很多时间,只是把钱花在了评估上面。真正的市场化项目,有真正解决国产化实际使用中的问题的项目?有,但是鲜有。

为什么?因为大部分厂商虽然口头上喊的是大力推行国产化,为国家解决问题。但是实际呢?有困难的领域都不想攻坚,都想让别的厂商上,自己捡现成的成果。当前业内大部分不做实事的厂商太多了,很多困扰生态建设的关键技术点没人攻克,永远都在抱怨“鸡生蛋,蛋生鸡”的问题。

针对市场实际使用问题而进行的市场化步伐太慢是第二个重大差距,国家投入钱很多,理论上只要做了很多努力就会有国产化甚至达到整个中国开源的推动,但是相比国家的投入来说,整个生态里面的厂商的市场化步伐都太慢太慢。

核心技术落后国外

第三个差异性, 就是核心技术依然落后于整个开源社区最新的技术。

虽然国内各个领域,国内厂商都在各自领域做到深入研究甚至完全掌握和超越相同领域的竞争开源项目,但是从整个开源社区的发展和中国的广度和深度来看,中国开源社区,不论从广度和深度都还远远达不到活跃或者大大领先其他国家的开源社区发展水平。

现在中国在开源社区已经跨过了一穷二白的时代,很多顶尖的开源项目都有中国人参与甚至主导的,中国的开源社区现在处于一个星星之火的时代,大部分为了商业化的企业或者有开源情节的开源英雄在默默的为开源世界贡献自己的力量。

我认为中国的开源社区应该保持一个 “踏踏实实做贡献” 的开源行为艺术,不要浪费时间和任何人去争论嘴上所谓的快感,踏踏实实写出让世界惊叹的代码和作品就是最好的进步和回应。

不遵守开源原则

在深度科技这么多年的创业过程中,我看到几种现象不但让我感到是核心技术落后,甚至是连基本的开源原则都不遵守:

开源社区氛围太小,无法靠文化和环境传承

中国的开源社区有几个重要的根据地:

从我这几年的观察来看, 中国的开源社区的主要差距在以下几点: 1、开源线上和线下组织大部分都是单兵作战, 真正保持开源文化和方向的根据地寥寥无几, 导致大部分开源爱好者甚至技术高手都无法很好的交流认识, 甚至都没法找到合适的工作, 而国外的开源社区更像是普通人与人之间的生活社区无缝衍生出来基于开源理念的社区。 2、大部分国内做的大型开源活动来说, 都偏向运营,过多强调活动日期、曝光度和标新立异, 一个活动一旦举办完宣传以后就没有下文了, 导致大量学生只是为了参加活动而参加活动, 真正引起兴趣并最终沉淀下来的几乎没有, 因为真正的开源爱好者是不需要通过活动才能坚持, 这一点和过去本身就是开源爱好者相聚的活动非常不一样, 特别是互联网运营和踏踏实实的开源技术社区本质上来说很难相容, 互联网运营强调的是各种互联网时尚的打法, 而开源技术社区往往强调的是安静的研究技术,达到一定程度积累, 靠兴趣自然聚合在一起讨论。 3、很多开源社区大会的举办方都不能理解开源, 导致最后很多开源社区的会议都变成了卖门票、传递鸡汤文和发广告的, 真正对开源社区有影响力的真知灼见太少。 不说国外, 就拿台湾每年举办的 COSCUP 都要比国内的开源社区活动更接地气一点。

开源开发者分散, 开源根据地少, 直接导致了国内的开源社区氛围不能像文化那样进行传承, 本质上是教育和社会经济发展的问题, 但现在确实是一个比较无奈的现状。

测试体系不够完善, 测试缺乏标准和无用功太多

在测试方面, 如果只是说社区的测试, 国内开源社区和国外开源社区在这方面没有差别:“大家都没有测试”! 大部分个人开源开发者开发的测试方式就是俩:目测和只要能够启动就算测试过了 所以只是个人开发者开发的软件一般来说都是功能不错, 测试没做, 质量不好。

从国产化的方面, 特别是定制测试标准的机构, 在我看来还存在几个问题: 1、缺乏对功能和用户体验的最低测试要求, 现在的大部分测试都还仅仅限于Unix命令行和LSB的接口测试, 我不是说 Unix 和 LSB 标准化测试不重要, 而是Unix和LSB的标准化测试本来就是必须要过的, 但是如果仅仅只有这些, 在我个人观点看, 就是走过场。因为不论国产化的哪个项目都要面对最终用户, 特别是桌面操作系统及其应用, 如果只测试 Unix 和 LSB 的标准化测试, 用户拿到最终产品根本无法用, 就算过了标准化测试最终产品难用, 还是一堆用户吐槽。 2、国产化标准的角度问题需要调整,我看到的很多测试用例完全是为了测试而测试, 比如某个很少用的后台进程专门写一个脚本去把程序搞挂, 然后说厂商的产品有问题。测试的服务对象最终是让产品在它的使用场景中, 把用户会用到的功能给高强度的测试一遍, 而不是针对那些用户从来都不会接触到牛角尖问题上进行暴力测试。 这样做会导致两个问题: 一我们把大量的测试精力花在用户根本不会遇到的问题上, 二很多厂商为了过测试, 甚至都会写一些对应的脚本让这些看着非常奇怪的测试用例可以通过。 特别是第二条, 我个人都觉得哭笑不得。 3、测试组合爆炸, 国内从操作系统、数据库、中间件到应用软件等等很多厂商, 每个行业都不下3家, 导致厂商多了以后测试的组合爆炸无法控制, 最后导致只要有一家厂商有变动, 就会重新测试, 最后整体测试周期太长。 4、没有发挥用户的优势: 测试方向和测试标准定好以后, 很多功能性的, 特别是交互体验的问题, 要让用户对测试的结果给予认可。 因为很多关于交互细节和功能性的东西, 只有最终使用的用户才知道什么是好用并且适合他们的, 如果我们把所有的软件的功能性测试都放到测试标准定制机构, 先不论庞大的工作量, 就说里面各种软件的专业知识之繁多,几乎不可能由一个机构完全掌握 , 最终结果就是吃力不讨好。 5、测试流程的标准化和纵深防御测试: 国产化是要求整个产业都要全部用国内厂商开发的, 每个软件, 特别是像操作系统这种产品, 最容易出现回归性测试问题, 前一周测试还是好的, 关闭测试以后过几周又出现了。因为只要产品还在活跃开发周期, 就非常容易出现bug反复的问题, 导致单一产品的测试工作量和时间大大增加。

测试的问题, 在我看来上面几个最严重和混乱, 我会在后面讲一下解决方案。

我们的优势

从开源社区的发源文化、广度和深度各个方面, 中国的开源社区还在全面落后时期, 一方面是我们的计算机起步就晚, 加上东方文化和经济发展都还不成熟, 我们的开源社区现在依然还是在起步阶段。

就和任何事情一样, 用别人的办法永远无法超越, 只有发展出自己独特的优势才能做好自己以至于最后赢得别人的尊重。

在我看来, 中国的开源社区在以下几个方面有我们独特的优势:

人口多, 市场大到足够容纳超大变革

第一个在我看来是最重要的, 中国有足够多的人口, 只要有足够多的人, 就会有足够大的市场。而且中国的人口和市场都是世界顶级的, 这么多的人口可以给任何领域的产品充分发展的空间和机会, 特别是像Linux开源社区这种拼生态环境的行业。

欧洲很多国家的开源技术和开源文化都是顶级的, 世界上很多开源开发者和黑客都分布于欧洲各国, 但是欧洲的国家很多人口都很少, 即使一个国家全部用一个操作系统,也对操作系统的全球市场份额没多大影响

而中国这样的人口环境下, 可以只考虑一个地域的用户需求, 就足够支持起一个操作系统级别的生态和养活像操作系统一样庞大的团队。

开源社区是全球化协作最为活跃和壮观的人类行为艺术, 为什么我们不能像 RedHat 那样做全球化市场? 1、Linux操作系统特别是桌面操作系统以及相关的软硬件生态还不能和微软在产品功能和质量上进行抗衡, 要不 RedHat 今天就不仅仅是在服务器操作系统上获得成功了。 2、中国的文化和语言是全球化市场的重要障碍, 东方文化和西方文化存在巨大差异, 本质上开源文化就是一种西方文化, 坦诚直接甚至破口大骂中成长, 而东方文化更是一种儒家文化的衍生, 文化限定了思考方式的不同, 特别是很多中国程序员再加上语言障碍更没法和全球智商相同的程序员在同一起跑线上切磋。 3、全球化的市场成功是基于在本地化市场取得巨大成功, 才有更多资源去处理不同国家和区域的文化和使用习惯差异, 而目前来看, 中国国内连一家在国内市场取得巨大成功的开源企业都还没有。

所以, 中国的人口多的优势就是培育开源生态链的孵化地, 只要有用户在用, 我们可以做出很多开源产品在这个孵化场中尽情的努力、成长并构建属于开源技术的生态系统。

中国至古以来都有大国情节, 有全线打通的决心

第二个优势, 我认为是中国本身的大国情节, 你可以认为是民族情节也好, 还是争强好胜死活要面子也成。 中国的整体环境氛围就是, 就要争第一。

我个人的观点在于, Linux操作系统, 不论消费者领域还是现在很火热的国产化领域, 从产品功能、产品质量和软硬件生态来说, 都和 Windows 相差甚远。我们可以从爱好者、开发者和爱国者的角度说出千万个理由支持Linux操作系统以及操作系统之上的应用软件。

但是差距就是差距, 换个比方, 你再怎么热爱国产的东西, 如果国产的手机或者国产的汽车和国外的手机或汽车差距巨大, 你会用国产的手机和开国产汽车吗?同样的, 面临不懂计算机的人来说, 他们会在产品存在巨大差距的情况下,用国产操作系统或者国产应用吗?

反过来想, 在产品差距巨大的情况下, 怎么改进这个问题呢? 怎么让学了十几年英语的中国人能够流利的说英语口语? 就是一个字: “用”

提高产品和说英语一样, 要反复用, 只有反复的用才能发现更多问题, 才能在修复问题的过程中慢慢的追上来。

所以, 中国的大国情结就是用, 甚至强制用才是产品壮大的关键, 如果国人我们自己开发的开源产品, 自己都不用, 怎么能说服别的国家能用? 怎么能够达到全球化?

我们更擅长做产品和交互体验

第三个优势, 我个人觉得中国的开发者和企业更擅长做交互体验绝佳的产品, 而不仅仅只是顶尖的开源技术和个人作品。

纵观现在顶尖的开源社区产品, 很多产品都是个人产品, 开发者根据自己的个人兴趣爱好添加删除功能, 从来没有做界面和交互设计。包括各种产品的选项都是不同人堆砌出来的, 美曰自定义, 其实是根本没有思考用户在不同场景的使用痛点, 用最少的交互设计甚至什么都不让用户操作就已经猜到用户的意图并解决痛点才是一个好产品应该追求的。

而国外开源社区, 90%以上的开发者心里都没有产品思维, 这也是为什么开源社区这么多开发者, 写了这么多软件, 甚至同一类型的软件还有很多个, 但是最后却没有 Windows 和 Mac 好用。 为什么?

开源社区成功在于全球协作的开发模式, 只要有更多的人, 就能不断的积累和发展壮大。 同时败也败在全球社区模式, 交互设计和产品管理完全不是一个群策群力和投票就能做好的, 交互设计和产品改进体现在一个思想统一的团队朝着一个方向不断的矫正, 最终形成一种统一的视觉和交互表达。 超过5个人以上就很难有思想统一, 而在全球的千万开发者的情况下就更难得到一致的设计和产品观念。 甚至开源软件黑客那放荡不羁的个人情怀很难赞同这种他们认为 “独裁式” 的设计和产品理念。

在我看来, 开源社区的失败不在于开发者和开发模式不够好,非常好! 而在于缺乏足够多的设计师和足够多重视产品和交互体验细节的开发者。

而反观中国, 从开源社区鄙视的腾讯, 到各种互联网公司, 交互设计都是放在头等地位。 重视交互体验的开发者随地都可以抓一大把。 这是中国社区相对于国外开源社区而言最明显的优势, 我们可以比国外开发者和企业更快的做出更多用户喜爱的产品, 来更快的达到商业化的成功, 才有更大的能量和资源去推动国内的开源社区发展。

中国工程师更勤奋, 工作效率高

前两天看到一个微博:

“全球最顶尖的两个私人太空公司SpaceX和Blue Origin都在开发可重复使用的火箭技术, SpaceX目前领先,它的火箭从地球轨道成功返回着陆在漂浮在海洋上的无人驳船上,而Blue Origin则率先在去年演示了火箭从地球亚轨道返回陆地。从地球轨道上返回的技术难度要大于亚轨道。两家公司采用的方法反应了两位创始人Elon Musk和 Jeff Bezos不同的作风。Blue Origin的计划要稳健的多,其时间跨越长达数十年。但成立时间晚于Blue Origin的SpaceX不同,用Bezos的一位密友的话说,这家公司拼命的跑,工作压力把人都要压垮了。SpaceX 公关经理Phil Larson对此回应说,你不能靠一周40小时将人类变成跨星球种族。Blue Origin的雇员大约600人,而SpaceX则超过了5000人。SpaceX已经从NASA获得了多笔价值数十亿美元的合同,而Blue Origin则与SpaceX的竞争对手ULA达成协议为对方开发和供应下一代火箭引擎。他们都在创造历史。”

我很认可Phil Larson说的: “你不能靠一周40小时将人类变成跨星球种族。”

中国开源社区在全方位落后于国外开源社区, 我们不能靠像 Google 那样悠闲的工作的同时还能在技术、产品和开源文化上达到国外的同等水平。

唯一的可能就是不但要做好产品和交互体验, 而且要做的远远比国外的同行做的更快, 更快, 才有可能, 而这一点恰恰是我们的优势, 中国的工程师不但聪明, 还有远超大多数国家工程师的勤奋。就像这几年深度不断的在桌面环境上发力, 国外的用户常常诧异我们能够在保证产品质量的同时做的那么快, 快的他们都认为我们是政府资助的企业, 我们只是在比别人认真的时候比别人更勤奋。

资源更集中, 更容易集中火力攻克难点

每当我坐着高铁在各地穿梭的时候, 在体验高速列车的便利时, 我经常感叹: 这要在国外, 挖这么多路, 造这么多桥, 那得要多久啊?

很多人说中国的政治制度不适合做生态,但是现在中国的开源社区还不处于生态发展中, 而是在生态引爆点之前的攻坚阶段, 只有把各个方面的核心难题和生态障碍克服掉才能迎来生态引爆点, 才会面临真正的生态建设问题。

而中国的政治制度, 恰恰是最容易攻克这些难题的, 就像高铁一样, 中国集中资源的做法更容易集中火力攻克生态的难点,不仅仅要赶超顶尖产品 (Windows 和 Mac) 的功能和质量, 还需要跑的更快, 更集中火力更坚决的达到工程极限。

怎么突出重围?

前面说了这么多, 现在开始说解决方案了:

政府做好裁判, 提供市场, 放权给私有企业去竞争

其实推动现在中国开源发展最大的反而是中国政府本身, 因为中国开源的发展首先是要有用户, 中国在全国范围内刮得一股国产化的风, 已经大大的在推动了国产化在软硬件生态的大力发展。

政府只要做好裁判的工作,把国产化的生态的重点下放给私有企业去竞争发展, 保证政府市场的采购量, 私有企业就会从难做转变成为攻克核心技术,从艰难前行到站稳脚跟。

其实中国的开源产业的发展本身就是两个问题, 好的产品和用户量, 前一点是靠各个企业竞争不断改进产品让用户满意, 后一点恰恰是政府能保证的, 在产品还在发展过程中强制使用, 从用开始, 发现问题解决问题, 最后直到产品成熟达到完全替换的目标。

如果要大力发展国产化和开源技术产业的发展, 还必须要动作快, 用户的不习惯和产品功能缺陷要在很短时间内得到企业的快速响应。 而政府主要做好裁判, 保证市场的使用决心, 剩下的交给企业和市场竞争就可以了。

在现在的发展阶段, 企业需要的不是类似核高基这样的课题项目, 企业需要的不是政府直接根据课题发放项目资金, 这样做出来, 还只是停留在课题阶段, 如果不能变成用户最终用的产品, 市场起不来, 钱就白花了。 企业需要的是市场使用政策和公平的竞争机会, 只要有用户坚持用, 企业就会想尽一切办法把产品和技术向前不断推进以满足用户需求, 只要政府保证公平的竞争机制和评判标准, 靠用户和市场就会自然竞争出优秀的产品出来。

过去十年之所以国内开源技术和产品没有发展起来的重要原因就是两个: 1、花了大量的钱在课题验证上了, 但是真正落到用户看得见和摸得着的产品几乎没有, 导致行业真正努力的企业和社会对政府以及项目的公信力极大下降, 特别是包括汉芯和麒麟操作系统抄袭FreeBSD等项目的曝光, 极大的挫伤了大家对国产化的信心。 2、没有把裁判的水端平, 很多地方, 国有企业既做运动员又做裁判, 导致在政策信息和项目上, 那些靠产品说话的公司并没有机会展示和公平竞争, 最后导致真正有资源的国有企业缺因为缺乏私有企业的竞争, 最后进步缓慢。 我本人不反对国有企业来做很多项目, 但是如果竞争机制本身就不公平, 就会导致整个市场缺乏活力, 如果行业内的厂商大家不是靠产品, 靠用户的满意度来驱动, 最终伤害的是用户对国产产品的信任和信心, 如果一个行业的用户对某个产品在最基本的信念上失去信心, 无异于拿短期的项目资金换来整个行业几十年的寒冬和一蹶不振。

持续推进生态基础建设, 逼近引爆点

中国开源生态的本质上不是缺乏在操作系统, 在芯片或者软硬件解决方案的单点突破, 缺乏的是整个生态的应用建设, 缺乏的是市场引爆点之前的基本可用的基础建设。

什么是基础生态?以桌面操作系统为例, 一个普通用户或者政府用户基础生态包括: 1、操作系统稳定易用, 在现在互联网时代, 不论功能完整度、视觉和交互体验最少要和 iPhone 和 Android 达到同一水平, 否则用户每天用着好用的手机系统, 却要忍受难用的桌面操作系统, 用户不论从产品还是心理上都很难接受, 没有什么比用户抗拒这个因素更难推广的了。 2、基本的应用每一类最少有一款, 比如:输入法、在线音乐、在线视频、词典翻译、下载工具、游戏平台、阅读器、炒股软件、浏览器、聊天软件、专业软件。 深度科技虽然联合搜狗和网易联合开发了搜狗输入法、网易有道词典、网易云音乐等行业流行软件, 但是相对于基础生态应用来说, 还有很多软件需要联合国内的软件厂商联合开发, 只有每一类软件都有一款软件能够让用户用, 用户才有可能彻底切换操作系统。 如果政府能够发挥政策号召力, 号召每个厂商联合国内操作系统厂商开发更多的应用, 就会极大的加速基础应用的开发。 3、行业软硬件: 比如OA要从IE架构迁移到Html5/JS通用技术架构, 行业软件要开发Linux版本, 硬件厂商要开发Linux版驱动。 只有行业所需要的办公系统、应用软件和硬件驱动都满足以后, 才能满足政企市场的基本切换, 如果都连基本的使用都做不到, 就不用谈更为广泛的推广。

苹果操作系统在中国只有不到 2% 的占有率, 国内大部分的软件厂商都会开发苹果版的软硬件。 国内政企用户在整个国内的用户量占有在 10%, 只要上面说的基本系统、基础应用和行业软硬件生态都满足了, 国内操作系统以及相关软硬件生态能够达到 10% 的完全替换。

一个持续发展的市场只要超过 3% 的市场引爆点, 就会连锁反应的促进整个行业的井喷发展, 所以持续推动生态基础建设, 逼近生态引爆点是中国开源产业是否能够最终成功的关键。

攻克关键技术难点, 降低开源行业准入门槛, 培育更多上下游厂商

中国开源产业的发展, 政策性的引导和生态建设达到引爆点并不容易, 因为不论在基础系统, 基础应用和行业软硬件方面都存在很多技术难点需要集中资源进行攻克, 只有通过在政府指引下, 软硬件厂商付出巨大的努力才能攻克。

而攻克的技术难点的目标不仅仅是把市场推送到引爆点, 市场推送到引爆点以后更重要的目标降低开源行业准入门槛, 只有准入门槛足够低才能让更多厂商能够加入这个行业, 不断通过各种垂直行业的专业厂商的扩展, 最终的市场才能从市场引爆点发展成为以国内厂商为主的更广阔市场。

所以攻克技术难点本身不仅仅是达到市场引爆点, 更是为了将来更大的市场做前期的准备以降低整个行业的准入门槛。

以操作系统为例, 国内开源产业的门槛在几个方面: 1、硬件兼容性标准化, 需要政府推动一个中立的硬件兼容性认证机构, 对国内外的硬件, 特别是显卡、网卡、声卡、打印机、扫描仪等日常所需的硬件设备进行集中测试和认证, 只有和Linux操作系统兼容性认证过的硬件才能进行采购。 硬件兼容性不但可以标准化整个行业的硬件准入门槛, 还能大大减少测试标准机构和软件厂商的兼容测试工作量, 只有硬件兼容性通过标准化才能彻底提高整体产品的稳定性, 从而大大减少了整个产品的生产和测试周期。 2、建立办公系统的迁移标准, 针对Linux操作系统和浏览器的开放标准建立一套适用于所有操作系统的统一开发接口, 只有接口稳定以后, 不论操作系统、Office厂商还是OA开发商才能更快的并行开发。 只有建立办公系统的统一迁移标准, 才能保证既不破坏现有OA办公系统的功能和厂商利益的情况下, 无缝迁移到Linux平台上。 只有越来越多的OA厂商在Linux平台不断进行已有产品的迁移, 整个政企市场才能在不影响正常运作的情况下切换到国产平台上。 3、促进现有厂商开发出行业解决方案: 现在国产化平台有很多软硬件厂商已经发展出自己的产品, 包括操作系统、Office、OA、PDF等各自的拳头产品, 但是用户最终需要的不是单一的产品, 他们需要的是完全国产化的整体解决方案, 只有从硬件、操作系统到应用软件整个用户依赖的功能形成一整套解决方案才能彻底解决用户无缝迁移的问题, 而现在国内的厂商, 特别是操作系统和办公软件的基础功能和可用性达到以后, 更应该联合更多的软硬件厂商配合, 针对各个不同的行业开发出真实可行的整体解决方案。

只要硬件兼容性标准化、办公系统迁移标准化、行业解决方案三个关键问题解决以后, 就会把整个开源行业整个准入门槛拉低90%以上, 这样很多不是靠过硬技术, 但是对特定行业有非常专业的理解和服务质量的厂商就可以基于现有的开源技术和行业解决方案对现有行业的快速发展和替换。

中国开源产业的发展只有在培育越来越多的上下游厂商, 整个生态才会越发展越健壮, 最终达到蓬勃发展的愿景。

建立完整的测试体系, 提高产品质量

关于测试体系, 可以从以下几个方面去改进: 1、基于用户反馈来建立测试用例: 提出对于最终用户关心的功能和用户体验做出最低要求, 这里面的用户不是只生产产品的厂商, 而是使用厂商产品的最终用户。 可以由测试标准定制机构和最终的用户建立一个有效的沟通和反馈平台, 通过国产产品在最终用户的功能和质量反馈来建立测试用例。 基于用户反馈的测试用例建立是最为直接也最为有说服力的测试用例, 因为这些测试用例是用来保障最终用户所需功能和质量的, 才能从源头上解决厂商不服测试标准定制机构、多方面对问题反复推诿和测试完成以后用户不满意的棘手问题。 深度操作系统已经建立了一套基于用户论坛、社交软件、Bugzilla等多平台的反馈机制, 通过不断的基于用户的实时反馈来建立的测试用例不但保证了测试方向的准确性, 还极大的提升了用户的满意程度和信任程度, 通过这种开发、反馈和改进的敏捷沟通, 不但解决了很多用户的问题, 更是超出用户期望满意程度。 所以基于用户反馈建立的测试用例是打通厂商、测评机构和用户满意正向循环的最佳方式。 2、测评机构引入产品经理: 测试用例的关键在于一定要覆盖用户的使用场景和功能, 很多测评机构并没有从用户的角度去构建测试用例, 导致很多测试用例只是为了测试程序的边界问题而构建的极限测试, 反而一些最终用户关心的基本功能和常用功能没有被覆盖到, 导致测试用例呈现出违反用户期望的倒三角测试用例分布。 而引入产品经理的关键在于, 产品经理有更强的同理心能够以普通用户的视角去看待功能测试的问题, 能够帮助测试人员在保障基本测试和边界测试的情况下, 增加更多的普通用户最关心的产品功能和交互体验测试,保证测试用例的完备性能够覆盖到基本功能、边界测试和产品交互体验等各个方面。 3、建立上下游测试接口: 以上游提供接口, 下游做适配的测试方式对各个厂商的相互测试进行分而治之, 通过测试接口的保证厂商测试只用盯着上游, 而不用像原来一样要盯上下游, 还要盯同行, 最后导致各家的测试标准完全不一样, 甚至产生大量的测试组合爆炸。 不但造成测评机构的疲惫协调和整体的测试混乱, 最后还无法交付给用户稳定的产品。 而接口测试, 每个厂商只用为下游厂商负责, 不用盯其他方面,因为有多家下游厂商的监督, 每个厂商及时为了减少自己的工作量都会主动建立统一的测试标准,反过来因为每个厂商同时只用盯上游厂商, 不会存在产品功能以修改就会影响上下游厂商的回归性测试混乱。 4、建立测试标准版本的概念和信息沟通平台:因为国产化的上下游厂商都在快速发展中, 甚至半年机会开发出大量的新功能和接口标准出来, 如果测试标准不进行更新就会导致测试标准老化甚至最后变成摆设的结果。 但是测试标准也不能实时更新, 否则引入的只是更多的混乱。 建议测试标准机构建立版本机制, 每半年更新一次, 厂商统一更新标准的同时保证老产品在老的标准上依然可以运行。 这样整个行业在保证功能满足用户的需求情况下, 可以进行定期的标准化升级工作, 同时还不会因为更换标准而导致的产品混乱。 标准版本的建立和更新, 包括测试接口的更新, 都要建立在一个公开的平台上, 特别是上游的更新要公平的让所有下游厂商都实时知晓, 做到一对多沟通, 而不是多对多上下游厂商反复沟通。 5、利用开源工具建立纵深测试体系:以深度科技为例, 操作系统的测试用例成千上万, 如果都用人工测试很难保证测试的效率和完整性, 而且还会因为测试人员对测试用例的理解不够产生不同测试人员不同测试结果的问题。 深度科技利用现有的开源工具, 包括Bugzilla, Testlink, OpenQA, Jenkins, Gerrit等建立一整套自动化测试平台, 大部分的测试用例都可以自动化、标准化、透明化的进行统一测试和展示, 任何问题的追踪甚至包括测试用例和测试计划都可以非常明确的执行, 极大的减少人工测试和缺乏工具平台辅助的低效和不一致问题。国产化本身就是一个超级大工程, 测试更是如此, 如果只有单一平台的测试, 特别是任何测试都有代码阶段、软件打包阶段、集成测试不同阶段组成, 单一测试平台已经无法保证软硬件产品测试的一步到位。 只有通过多个工具平台来建立纵深防御的测试体系, 才能通过一层层过滤保证软硬件产品的bug无处逃逸, 比如 Gerrit 通过代码审查保证代码阶段因为编写不规范和思考不周引入的bug, OpenQA加上Jenkins能够解决很多产品集成以后的回归性测试, 再加上一些自动化测试脚本就能把测试人员从简单测试工作中解放出来, 让人工测试能够测试一些更复杂的功能和问题。

像全民创业那样普及开源基本理念

最近几年, 在中国刮起一股非常强劲的创业风。 特别是大学生, 如果出门不说自己是创业者, 不给别人递上 CXO 的名片都不好意思。

除开互联网环境和资本强力支持以外, 我觉得最大的就是政府在全国对创业进行普及式的宣传起到了巨大的作用。如果哪一天李克强总理像对待创业一样在全国传播开源理念, 我想那将是对开源社区和开源事业极大的促进。

在宣传开源的时候同时要在开源的基本理念上需要进行必要普及和矫正:

为什么国外的开源发展的那么好? 不仅是国外的经济和科学技术发展的更早更好, 国外的人更喜欢享受生活。 当人处于物质富足以后, 都会追求精神上的快乐, 我认识的很多开源技术精英不但技术过人, 他们真的特别享受开源代码分享经验的过程, 而且能力越强的人越谦逊。 对开源掌握的开发者远远要比那些闭源软件的开发者更加踏实和平和。

开源不仅仅是技术和产品上的进步, 我相信有一天如果国内大多数产品都是开源开发者开发的, 整个国内的创业氛围、精神包容性和基础科学的研究都会发展的更快。 因为开源给予开发者的是真真的内心平静和让开发者能够正确的认识自我和自己追寻的东西, 而这些对于每个热爱开源的普通人都会产生一样的撼动。 ;)

版权处罚从电影音乐延伸到软件领域

很多国内的人都是鄙视盗版的, 但是在5~10年前, 我相信很多人都在用盗版, 其实那个时代用盗版并不可耻, 因为那是的国内经济发展和社会文化, 包括微软本身的策略来说都是鼓励盗版的, 如果一个人不用盗版反而会被称为傻子。

但是盗版伤害的不仅仅是产品开发商, 而是整个软件行业。

以电影和音乐举例子, PC时代大家都是下载盗版电影和盗版音乐, 但是随着国民经济水平提高和整个大环境大家尊重版权。 现在几乎每个人看电影和听音乐都会采用付费的方式来享用, 随着正版化的推动, 整个电影和音乐行业的创造者们会有更多的收入, 他们也会持久的创造出更多人喜欢的作品。

开源软件也是一样, 很多人认为开源软件就是免费的。其实开源软件包括源代码都是开放的, 每个人都可以构建, 软件本身没有必要收费, 更多的应该是开源软件之上的服务和整体解决方案应该收费。

就像现在的法律会处罚盗版电影和音乐传播者, 我们也应该对盗版的闭源软件传播者进行处罚。只有对闭源软件的盗版进行处罚, 大家才能体会开源软件的成本优势和长期优势, 如果闭源软件盗版不打击, 大家永远都不会自由或认真的去比较闭源软件和开源软件各自的优势, 开源软件也没有长期发展空间。

所以对软件领域的盗版现象进行处罚会极大的从侧面推动开源软件和开源社区的发展。

在大学里建立开源根据地, 以3年为周期不断为行业输入高端人才

开源软件因为其强大的开发者社区, 不论是代码质量, 代码示例还是文档来说都是非常丰富, 而且因为开源软件代码的开放性, 很多问题的解决方案都是从源码级别进行阐述, 比如我们经常会在 github 和 stackoverflow 两个平台看到很多顶尖的开源社区开发者对技术原理进行源代码级别的讲解, 而这些在闭源软件行业都是非常难以想象的。

正是因为开源社区的开放性, 对开源技术的学习和掌握并不像传统软件工程那样需要耗费那么长时间, 一个有电脑的大学生自学, 可以在一个月内入门, 半年内开始开发,两年之内进入中等开发工程师的水平。不论从学习速度还是掌握技能的广度和深度都要远远大于 Windows 平台的开发成长速度。

我建议很多大学, 以项目和兴趣为导向开发很多真实的软件项目, 通过开发工程中不断学习开源社区的邮件列表和IRC, 包括阅读大量的技术文献的方式来转变传统的大学软件工程教育。 计算机科学特别是开源软件的学习最好的三个方式就是: 1、实践 2、实践 3、实践

从我这几年的招聘历史看, 很多二流大学和工程学院在大三就展示出惊人的天赋和能力, 如果国内的大学, 特别是教计算机专业的学校能够改变教育方式, 以更快的开源社区的方式教学生, 每三年都会给社区以及企业输送大量高级开发人才, 甚至是独立创业者。

从本质上, 开源的社区发展的根源就在教育方面, 只有教育上去以后才能从根本上让中国开源社区得到实际发展。

中国开源成功路线图

最后, 很多人都在想中国开源社区的路线图是啥?

没有什么成功路线图, 在你成功之前你永远不知道成功应该怎么做。 在我看来唯有遵循开源规则, 踏踏实实多做贡献, 少喊口号才是成功建立开源社区的唯一方法。

深度科技已经在开源上坚持了12年, 我们甚至还要坚持5~10年才能推动国内开源生态达到引爆点的那一天, 生态的建设是所有创业类型中最难的一种, 不过我相信我们能够取得最后的胜利, 开源万岁, 自由软件万岁!

       -- 深度科技王勇  随笔于 2016 年夏