来源:中国开源云联盟
引言:这篇文章其实是11月21日NASAC大会第一届开源软件开发与开源数字治理研讨会上,由我主持的”开源发展圆桌论坛“的讨论实录,由于各种各样的原因搁置了一段时间,今天在李建盛老师的提醒下才发出来,对不住大家。现在回想起当时的圆桌讨论,大家讨论的非常深入,以至于40分钟的时间很快就过完,我当时一共准备了四个话题,但现场只够和嘉宾们探讨了其中三个话题,意犹未尽。于是乎在后来筹备第十届中国云计算标准和应用大会时,萌生了请周明辉、李建盛、宋可为、尹刚、耿航等各位业界专家召集各个话题和方向的开源分论坛,再继续组局邀请大家好好聚聚,再来一次酣畅淋漓的思想碰撞和交流的想法。一切始于这场Panel,值得分享纪念。
——杨丽蕴
第一届开源软件开发与开源数字治理研讨会 开源发展圆桌论坛实录
杨丽蕴:
感谢大家的莅临,我们接下来讨论开源怎么转化为生产力,开源怎么去用等相关的话题,简单介绍下这次 panel 环节的嘉宾,第一位是堵俊平,华为云计算与开源开发业务总经理,开放原子基金会 TOC 主席;第二位是李昊阳,Open Infra 基金会的中国社区经理;第三位是武延军,中科院软件所教授,研究方向开源软件供应链;第四位是李建盛,开源布道师。
欢迎各位嘉宾,今天的嘉宾分别来自基金会、产业界、研究机构和布道者,大家对于各自所在的组织和机构可能不太了解,相关的策略或者是在开源方面做哪方面的工作,我们现在请在座的四位嘉宾各自介绍下。
堵俊平:
我的个人经验,主要是来自项目的经验,从一个项目的开发者,到贡献者,到项目的布道者,也有企业开源里面的组织和推广,包括基金会整体的运作和技术委员会的运作,可能学术这块的开源还是弱一点,当然这也是一个很好的机会和大家学习,能够和学术界的大咖们一起合作很开心,上面提到的三点,其中在企业和基金会做事情,二者是有区别的,在企业会以公司整体的利益为主,开源在其中的策略,开源的项目和商业目标之间的关系,构筑什么样的生态,达到什么样的一个成果,当然这也是成就客户、成就用户的一个过程,但是基金会的开源,没有太多的功利性,没有太多的私心,更多的是强调中立性,就是处于一个技术中立的位置,搭建一个比较平衡的、比较公平的平台,能够让参与者,不管是来自企业的,还是个人的,在此平台下能够让项目找到用户,发挥应有的价值,发挥开源的能量,同时做这两件事,有的时候角色会错位,需要慢慢花一些时间来适应吧,凡事总有一个过程的。
李昊阳:
我是 Open Infrastructure Foundation 中国社区经理,我们的前身是OpenStack Foundation,我不知道在座的各位有没有听说过 OpenStack 相关的项目,OpenStack Foundation 已经有十年的历史了,OpenStack 项目已经是有 12 年了,今年刚刚转型为 Open Infrastructure,因为我们的基金会,我们的社区,需要扩大范围,去面向下一个十年的开源的云计算战略。
今天是一个非常好的契机,很荣幸的收到这边的邀请,能够来和学术界和高校的一些同学们、老师们一起分享,希望能够让大家了解到,国际性的基金会大概是一个什么样的面貌,他们大概在做一些什么样的事,他们的那些事情是值得我们去了解,或者是有一些参考,或者是去学习的吧,希望今天和大家聊一聊。
武延军:
我来自中科院软件所,其实大家看日程,我应该是接替绪总的,阿里的陈绪,因为疫情的原因被我”接胡“了,我大概介绍下中科院软件所的情况,我们是一家国营的研究所,和企业相比,我们没有企业那么强的商业化的属性,和高校相比,我们的研究费用又是工程师为主体的,比如说我们的实验室,有一百多人的队伍,80%都是工程师,这点和高校是非常不一样的,我现在所做的工作呢就是研究开源供应链,希望能够给国内的开源相关提供一个系统性的方案,另外我本人也是开源指令集联盟开源软件工作组的组长,现在的一个主要的工作,就是打造RISC-V的软件生态,目前也是在内核、编译器,对国内起到一些促进的作用,后面也希望在座的各位老师、同学能够关注我们,以及我们的工作。
李建盛:
我是一名开源布道师,这个职位是自己给自己定的,布道师是干什么的呢?就是推广开源,比如刚才各位老师、各位同学的研究成果,使之能够更加广泛的传播,具体做的事情就是写东西、出去讲、参与各种各样的开源共同体(open source community),我本人是对开源共同体有非常强的归属感,基本上是独立的,以共同体的身份来传播开源,开源它不仅仅是讲技术,还有很多协作、文化、行为方面的内容,比如说武老师讲的我们国内做的很差,其实除了技术之外,我们还有很多需要去学习的地方,以上就是开源布道师所做的事情。
杨丽蕴:
我今天是准备了四个问题,由于时间的关系,我们只交流三个,首先今年我国的开源圈非常活跃,在座的各位老师、同学除了关注自己的学术之外,不知道有没有关注,今年我们成立了自己的开源基金会、同时自己的木兰开源许可证,就是我和周明辉老师正在一起推动的、也推出和生长了开源项目等等,所以说今年是非常活跃的一年,同时开源是一种群智化创新的模式,我想在座的各位对此都有很深刻的认识,另外很多观点也在提,开源应该避免重复造轮子,那么探讨的话题:现有情况下,如何把各方力量捏到一起,哪些轮子需要重复造,重复造的出发点是什么,哪些可以形成合力共同去推动?
堵俊平:
我先抛个砖啊,当然,这是一个非常好的话题。大家一提到开源,都会有很强的冲动,大家都想做一个开源的项目,或者是加入一个开源社区,这个时候问题就来了,那么就面临一个选择的问题,是该加入一个已经有的开源社区在现有的软件基础之上,还是去做一个全新的东西,很多人尤其是我们的工程师,以及很多的学生,都有一个冲动,就是造一个属于自己的轮子,这是人的天性,没有办法避免的,也是一个小团队的天性,也是很正常的,但是呢,在这种情况下,如果不去调研目前已经存在的,千千万万个开源项目,从操作系统到云原生、再到大数据、再到人工智能,我们看到的所有的主流技术,都能看到非常成功的项目,真的我们需要那么多的从零到一的项目吗?这个是大家首先要考虑清楚的,这是第一点。
那么第二点就是说,当我们发现现有的开源软件不能满足我的需求,比如现有的只能满足ABC、但我需要的是DEF,接下来要确定的是,这些需求是不是伪需求,我们在做这个轮子的时候,一定要站在用户的角度来想,我一直以来都有一个观点,开源项目的成功决定于用户群体,不是自己说技术有多厉害,也不是说代码写的多好,一定要站在用户的角度去想,这个项目到底有没有必要性,判断一个开源软件,到底是在重复的造轮子,还是我真的在进行创造,一定要有用户视角、用户思维。
在上述两点基础之上,下一步再去想,很多时候是因为不了解,业界现有的成果,所以就急着去做了,但是做着做着,发现已经有人做了,在世界的另外一个角落,如美国、欧洲或者是中国的某一个地方,有人和你有相同的idea,但是这个idea或项目没有很好的进行运作,很多人不知道,基于这个问题,我们现在发现有很多的轮子在。当然创新创造很重要,但是前提是了解真正的用户,对所有的这个领域的项目进行梳理,其实我觉得,如果我们有一个开源的图谱,那么就可以避免很多的重复轮子,比如说是在组织层面,为了提高研发的效率,不应该鼓励去重复制造轮子,当然ta应该去布道,怎么去开源社区里做贡献,怎么去参与开源项目,在已有的基础之上,将之完善的更好,当然,如果是大颗粒度的项目或需求,比如出现了新的趋势,或新的应用场景,我们做一个未来的Tensorflow,做一个未来的K8s,我觉得是可以的。可能是需要一个总的评估过程。但是大量的小轮子,没有想清楚的轮子,可能就确实是在浪费,而且是一种不健康的方式。
李昊阳:
堵总说的很好,感觉基本上就是我们要说的,行业内想到的内容,其实都是比较类似的,造轮子有几个方面,第一,我们在社区里,包括基金会,在合作的过程中,更期待于参与者,或者是同学,能够协作起来,无边界的协作,如果说在一个已经成熟的技术或项目,我们应该去选择较大的框架,在这个基础之上,再去做更深化的一些特性的完善,但是在一些新的领域,比如说最近的AI、区块链、边缘计算等,技术在演进的时候,必然会衍生出新的需求,那么在满足这些需求的过程中,就会有很多很多新的小的项目,这个时候其实我们是在重复造轮子的,有的时候不一定是大的公司才能完成,小的组织也是有机会的,如大学实验室,小的优秀的团队等,尤其是在需求涌现的时候,针对不同的阶段,其实看待重复造轮子这个问题的,我的观点是,无论是重复造轮子也好,又或者是参加到现有的一个项目里面也罢,我觉得协作是一个非常重要的方面,因为协作可以帮助你,无论是你自己做项目,还是参与到其它的项目里面,这样也保证项目的生态,能够有更多的机会和更低的风险,开源的项目,好或不好,一个好的项目,你会看到生态会变得非常活跃,如果一个开源项目,随着发展慢慢地变成只有少量的人参与,那么就是破坏生态的典型,就会慢慢的消失,或失去动力,所以说协作是一个重要的方向。
另外一个我看到的关于重复造轮子的情况,可能一些人在开始的时候会使用业界的 一些开源项目,可能开始的时候,有些不稳定,可能随着几个版本的更迭,可能从另外一些方向发展,不能和企业或者是当下的需求吻合,这个时候在新的特性里,没有你所需要的,就可以去重复造一些轮子,然后把它当作一个行业内的需求。那么再举另外一个例子,大家知道容器现在非常的流行,开始变得越来越普及,那容器的安全性就会变得很重要,但是这几年,按照容器的概念,包括容器的项目,变得越来越多的时候,那么现在安全容器的特性也越来越细分,比如说将过去的安全的不安全都要隔离开,那么现在可能针对特别的行业,比如金融,我们就会有金融计算,类似于这种特定的,你会看到安全的行业也变得细分,这个时候就是说,那么就需要将新的特性整合到已有的项目,还是重新开始全新的项目,这个还是要看企业的各自的发展的诉求,我会感觉说,其实这个会,一方面对我来说都可以,取决于说你参与一个项目,要做一个项目的初衷,跟你的战略定位和契机。
这是我个人的一些意见。
武延军:
我补充下前面两位说的,我觉得第一个就是,我们参与开源项目需要问的第一个问题是:“我到底该参与哪个开源项目?” 这可能要在选择哪个社区,哪个许可证之前就要考虑的,要作出这个决定,无非就是:1. 需求驱动,2. 兴趣驱动,对于兴趣驱动来说,GitHub上大量开源软件都是这种形式,而需求驱动方面,比如老师教学的需求等等,但我觉得最严肃和持久的需求,是来自产业的需求,所以说我们当时启动开源软件供应链计划,实际上就是希望大家能够参与一个严肃的开源,为什么说是严肃开源了呢?也就是产业的需求,我觉得就是相对来说严肃的开源项目,虽然今年的开源很热闹,但是我希望后续的热闹是能够解决问题的热闹,而不是仅仅为了热闹而热闹,一阵风过去了。如果发现开源没有能够给国家、社会带来实际的贡献,就会变成一个非常短暂的现象,
第二呢,就是关于造轮子,我非常同意前面两位的看,就是在合适的时机,在新的风口来的时候,也许我们就可以造轮子,我再补充一下呢,还有一些其它情况,我们也需要造轮子,比如说这个东西,之前都是在国外造,那么我们是不是要在国内再造一遍,这件事,我觉得各有各的观点,开源从理念上来讲,应该是没有国界的,但是实际上它的一个产业链的转移,产业链在什么地方,这实际上决定开源的产业价值到底在哪?所以我在刚才的分享中提到供应链,红帽为什么一年有30多亿美金的收入,而我们国家做的最大的,而且还是两家合并起来的国产操作系统一年才3.4亿人民币的收入,产业的价值也许就是我们国内的轮子还不够,导致我们在国内碰到的一些IT方面的问题,使用开源软件方面的问题,我们不得不去咨询一个国外的工程师,那中间的这个成本就非常高了,大家知道语言上的、文化上的各种成本,也许该工程师就是RedHat 旗下的一名雇员,我们再去找他还未必搭理你,所以我觉得开源,从创新的角度,这是没有问题的,高校是最擅长做这方面的事情了,我们看到老师在做一个开源项目,我就是要和它不一样,就重新开启造轮子,但是从产业的角度来讲,其实这是个更值得我们思考的事情。
李建盛:
我补充一下,有三点:
1。我是很赞成造轮子的,因为从进化的角度来讲,每个团队、每个领域、他们对于一个技术的理解是不一样的,所以说呈现多样性,其实对于我们用户大众是一个好事,比如我们用那么多的编程语言,有那么多的共同体,有那么多的数据库、操作系统,等等,从进化的角度讲,最后能够适应需求的是最后留下来的,或者是有更多的创新。无限的造,有本事你就造。
2。从技术的本质来讲,它是一个螺旋式上升的过程,也叫棘轮效应,回顾整个IT历史、或者是软件工程的历史,它是逐渐的更加厉害,有很多技术是沉淀下来了,和我们架构相关的哪些程序库,很少有人再去做了,比如说NTP这个库,那和时间相关的协议,基本上没有多大改进,它被大量的使用,所以说造轮子,要尽量的去在前沿上造,在棘轮的边缘上造,站在前面,站在巨人的肩膀上去造。
3。是我个人的一个观点,我们会经常听到“国产替代”之类的,其实这是不利于我们本土的开发者或者是产业发展的,开源必须是站在世界的角度去,你必须把你的项目放在全世界的开发者都能公开访问的地方,没有任何歧视的情况下去做这件事,彻底没有的意义的是fork,这样的轮子其实是完全没有意义的,还有一个最大的忌讳,我们知道封闭,一旦你把开源封闭在某个族群,这个系统就会被一些人垄断,或者是树立权威,这个系统失掉开放性,就会失去前进的动力,我们看到很多的开源项目,最后因为缺乏开放性而死亡的。
杨丽蕴:
谢谢各位嘉宾,刚才各位也是从不同的角度、不同的视野,有的是从技术、开源项目本身,也有从规则,大家知道开源的文化是来源于西方,也有偏规则层,这是一个非常好的切入点,我们进入下一个话题,因为开源软件形式的交付颠覆了以前传统商业产品的交付形式,以前我商业产品出问题了直接找厂商解决就行了,但现在我用的开源软件,就没办法找到厂商,这时候其实就衍生出来开源服务的概念,是否有必要打造端到端(操作系统层到应用层)的整套开源软件供应链体系来应对企业用户的需求?同时我们作为基金会、厂商、布道者、研究界该如何助力和改变这一现象?
堵俊平:
从企业应用角度来讲,它使用一个开源软件是需要托底的,一般来说,社区是一个大熔炉,各种的力量,有用户、开发者、贡献者等等,但是它不会为某一个企业的个性化、紧急的需求作支撑和支持,我们可以有很多,这种自发性的资助,或者是一种支持的服务,但是它不会有企业的SLA,所以说我们实际在生产中会用到诸如Linux、Hadoop这样项目,但是一般仍然会找后面的公司,如RedHat、Cloudera这些厂商作专门的支撑,从这一点上说,和传统的商业软件没有多大区别,但是就从企业应用来说,它给了企业更多的选择,首先我们这些技术是Open的,第二,像很多互联网的公司,自己本身就拥有很大的团队来进行支撑,这也是一种选择,就是我不一定非被厂商锁定,绑定,所以说我们在开源的世界里,很少听说哪个厂商被锁定的事情,这是开源软件特别好的一面。但这并不代表企业不需要支持,或者说作企业级的支持没有商业价值,其实是有的。
另外还有一个问题,很多的商业,从云原生到操作系统内核到上面的数据库等等,这些开源软件的互相之间的配合是有问题的,这个问题是在于每个版本,每个开源社区都是以自己独立的节奏在运作,我就不讲哪些大型的开源项目了,仅大数据这个领域,我们的底层Hadoop,上面有Spark,Hive,HBase,这些项目不同版本之间都会有问题,因为每个社区都有自己演进的路线,所以像类似Cloudera这样的公司,这种商业发行版的公司,它很大一部分的工作量,是测试这些不同版本,尤其是新版本之间的兼容度,遇到问题之后会回合到社区,但是回合到社区之后,是另外的一个节奏发版的,所以这些版本之间,从社区里面拿到的之后,还是不能保证100%的不出问题,所以它存在商业的价值。
整体而言,开源软件之间的配合所存在的问题,以及企业的属性和需求,是不能容忍这些bug存在的,但是这个逻辑本身也很bug,大家都知道软件是有bug的,而且要求在生产环境中不可以出现bug,这就给当前的开源软件造成很大的困难,所以说有没有这样一个套件,我认为需要有,需要供应链一整套的东西,但是这里面又涉及到分工问题,没有任何一家公司能够提供所有的套件,下面的操作系统和上面的数据库、大数据、AI、云计算甚至上更上面的PaaS,我不认为一家公司可以在每个领域,每个组件的内核,哪怕是开源的,都能很精通,所以这里面涉及到分工的问题,所以一定要有一个总包商,我把这些东西都包在一起,然后这些作软件集成的公司的角色就是对每个组件不是那么的深入,但是我背后一定有社区的原厂去支撑,所以在社区的这些原厂,比如说Linux的原厂、数据库(MySQL)的原厂等一定要能够兜底,所以就变成了一个两层配合的关系。这样的话才更加的务实。另外一种,就是未来的云的方式,在云上面会好很多,刚才说到的这些组件,几十种上百种组件,在云上会简单很多,因为在云上,很多的IT环境都是固定的,比如说我的这个防火墙策略啊、网络策略啊、包括其它的,都没有那么多的场景,或者是更多的情况出来,这样的话,这几百个组件,整体来说是稳定的,所以这里又看到一个很bug 的事情,类似AWS ,包括国内的云厂商,它们均提供由上至下的一整套的解决方案,当然时不时的会出现问题,但是它仍然是可以将整个IT环境运维起来的,所以说云也是一个很重要的方向,作为一个方式做一个集成。
另外一个问题就是说,我们如何在各个角色能够解决这个问题,所谓的操作系统原厂,肯定要和集成商进行一定的配合,它要知道自己能力的边界, 对自身定位要清楚,对于我们学术界来说,我们要去持续的对开源的贡献能够提供一些基础性的培训,在主要的开源社区,来自中国的开发力量还是比价薄弱的,但是从供应链的角度讲,我们一直都在说Community Over Code,最主要的是我们要有足够的工程师,要有开源社区的commiter,他们对开源有了解,这样的话,国内的这些厂商,不管是整体的服务提供者,还是某一个社区原厂,它才能有人,有这样的资源,大家一起协作配合的话,每个社区经营好,每个社区之间的配合,包括整体的release的发布,有更多的一些协同,这些都是很重要的事情。
李昊阳:
分享一下我们实践的经验吧,因为我们毕竟是在运营社区,杨主任的问题比较宏观,我们可以大概以OpenStack为例,比如说OpenStack 它是有不同的发行版的,RedHat 有RDO,Canonical有Ubuntu OpenStack,国内也有国内的发行版,其实会看到各个企业,在拿到开源项目之后,会做一些定制,已经根据自身的需求和卖点,以及他们所面向的用户群,来做一些特别的定制化,这些国内的OpenStack用户,它寻求的一些问题,或者是一些服务,寻求的是这些独立的厂商,这也是目前开源软件的一种模式,我们从开源社区的上游,到下游的发行版厂商,再分发到客户,他们的服务需求是最后是来自发行版厂商提供的。
另外一种情况是直接使用上游的版本,来做一些他们的实际的部署,这个时候出现的问题,更多的是依靠企业自身来解决,企业自身来解决的时候,会出现不同的情况,我看到一些比较好的情况,这里举个例子,就是欧洲核物理研究所,是一个非常大的OpenStack的用户,他们使用的就是上游的版本,然后集成Kubernetes,对运算的服务的管理,我们看到在使用的过程中,也不断地向社区提交回,或者是他们的bug fix,以及积极的和社区的开发者、模块的核心成员去交流,慢慢你会发现,他们自身在社区也变得很有影响力,他的问题也会越来越快的得到解决,甚至会有一些新的方向带进来,这是另外一种作为用户参与到开源项目中的一种模式。
对于企业来讲,也一样,就是说天下没有免费的午餐,你在使用开源项目,对于社区来说,社区的宗旨是能够把社区的项目打造成生产级的,但现实的问题是一个统一的标准框架没有覆盖所有的需求,所以一定是有定制化或不同的东西,不同的release出去的,我们看到如果说用户选择来使用社区的版本时候,当然我们希望能够参考欧洲核物理研究所的模式,能够将遇到的问题贡献回来,甚至在里面做更高的贡献,以及更多的话语权和影响力,这是企业使用开源软件比较良性的互动。
那么第二个问题,就是要不要打造一个端到端的全供应链,对我来说,开源是一个非常大的海洋,有成千上万的项目,有大有小,这个开源的世界,已经存在端到端的选择了,这个有没有必要打造的话,就看你的范畴是啥,以我们社区的概念,或基金会的视角去说,我们是没有必要做这个事情的,我们希望使用到业界最先进的技术,正如堵俊平先生所言,没有一家企业能在所有领域都做到领先,作为社区也一样,社区不能保证自己的一定是最好的,那如果我需要人类进步的技术,需要去寻求更多的合作和集成的,我一定是和其它的社区进行协作的,所以,协作,正如我上一轮所讲的,是一个非常重要的指标,对于OpenStack社区来说,我们会鼓励OpenStack的开发人员到Kubernetes社区,到OpenEuler社区,会做一些协作。也会鼓励其它社区的人到我们社区来。还是一个道理,所谓端到端就是要做到协作。
武延军:
我简单说一下,在座的多数是高校的老师和学生,有必要解释一下,开源软件供应链是干什么的了呢?为了抽象建模,这个词可能大家比较熟悉,我们希望把开源软件的生产、流通、加工、组合、包括存储、服务、维护,整个的应用这样一个概念,把模型给建立起来,所以刚才两位说的开源软件供应链,可能和我们原来的定义有所偏差,理解成一个相对封闭的,被一家厂商所控制的这样一个链条,实际上并不是这样的,我们是希望把这个环节分清楚,然后再每个环节都是开放的,大家都能在各自的环节上充分的竞争,开源如果做的好,你就占领这个环节,形成一个优胜劣汰的局面,我们现在的厂商为什么要使用开源了呢?避免厂商绑定,我决定理念是一样的,那开源软件供应链是怎么做到这一点的呢?一个就是我们刚才说的Open,另外一个就是兜底,就是堵俊平先生讲到的在关键的时刻需要有人能够兜底,为什么我们要有链条这样一个概念了呢?就是有些链条上它只有一个,恰恰这才是我们最担心的问题,或者说在关键的环节上,维护者已经不存在了,已经有数年没有更新过了,刚才有位同学对GitHub的一些项目做了统计,统计的是有影响力、活跃的项目,有影响力是什么了呢?是哪些默默无闻躺在角落里的开源软件,它是被其它大量的开源项目所调用的,这些开源软件是非常关键的,那么这些开源软件要不要有人维护?这就是我们在供应链里去描述的,去尝试解决的。
李建盛:
我快速说一下,首先从交付的角度,软件是流动的、进化的、多变的,你不可能像一个物体那样静止,所以说那种大一统的东西是不存在的,不用去追求,第二,开源的出现,就是打破垄断,像过去IBM、SUN、微软这样的,开源的出现就是让用户作出选择。最后我给一个建议,要去做Upstream First,你要解放你的开发者,让开发者按照自己的意愿去解决问题,要充分发挥人的力量,最后你才能解决问题,谢谢!
杨丽蕴:
四十分钟的时间过的实在是太快了,我还没有聊够,我们还有两个话题想和各位专家一块探讨,更加偏商业的,包括前段时间很多开源的公司已经获得各种各样的融资等等,可惜时间很不够啊,但仍然要感谢各位专家,我想在座的各位都非常的有收获,后面我们会再组局,谢谢!
下面颁发证书并合影留念。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。