开源与标准

今天下午,参加了一个木兰技术开放日的《开源标准化研讨会》,在于各位专家的讨论中,我有了很多的收获,必须抓紧时间记录下来。

一、开源与标准的相似性

一开始,只有各行各业的互不相干的标准。到了后来,才出现了一些总结。有了通用的,跨行业的标准的概念。甚至有了标准这一专业,这一行当。

与此类似,一开始也只有软件,随着软件的能力越来越强,开始深入各个行业,然后有了行业软件。接下来是源代码开放,从自由软件运动,到开源软件运动,于是各行各业的软件,有了互不相干的,各自开放的源代码。但是,这些开源,都是依附于软件行业的,本身并不构成一种专业,一个特定的行当。

但是,当我们横跨不同行业的开源软件,甚至开始思考开源硬件,开放文档,开放数据等等开放式协作模式。就需要将这一系列现象,作为一个整体进行考虑,需要归纳、总结开源本身的概念、元素、实践与方法论。这就有了“开源标准化”的需要。

二、开源的发展历程,到了需要标准化的时候

2016 年时,我写过一篇文章《三代开源社区的协作模式》,总结了开源开发的演进的历程。如果要谈其中的趋势,我们可以看出:开源从蛮荒时代渐渐走了出来,从百花齐放的形式,渐渐具备了某种相似性。

我们可以大胆猜测:开源已经走出了野蛮生长的阶段,在未来的相当长一段时间,开源会有量上的增长,却不太会出现“质的变革”了。

如果我们去回看技术发展史,当一项技术逐渐成熟,标准化的诉求就需要提上议事日程了。

三、我们需要哪些标准化

1. 概念定义

在 Open Source 诞生的时候,就有了 The Open Source Definition,但是这个起点就有问题。因为 OSD 的本质,是定义了开源软件的授权协议的主要特征。并非定义了开源本身。

至于开源软件、开源硬件、开源社区、开源产品、开源基金会等等概念,也一直没有明确、无歧义、相互之间协调一致的概念定义。

2. 概念之间的关系

一个开源社区,可以开发多款开源产品。一个开源产品可以是一个开源软件,也可以是一个开源硬件。每一个开源软件可以有多个版本。每一个版本,可以有“源代码”、“二进制包”等多种发布形态。

以上的一段就是一种标准化的尝试,将各种开源的概念之间,建立某种符合逻辑,能够涵盖各种情况的关联关系。

当然,仅仅依靠上面这样的文字肯定是不够的,还需要更加严谨、细致的梳理与文字描述,这也是标准化的一部分。

3. 测量与指标

在开源世界中,我们可以观察到哪些量?可以如何测量得到这些量?又应该如何计算与评估各种指标?

比如一个 GitHub 上的仓库的 stars 数量,直接就能够观察(测量)到。但是 stars 的数量到底代表多大的价值?应该如何计算一个开源项目的热门程度、技术难度、质量高低与社区健康度。

这些也是标准需要解决的问题。

4. 最佳实践

如何更好的进行开源治理,更好的运营开源社区?这可以分解为两个问题:如何评估好坏,以及有哪些最佳实践。当然,如何评估本身,也是最佳实践的一部分。

类似于 ISO9000 这样的标准,就是质量管理领域的最佳实践总结。

四、开源标准的架构设计

作为野蛮生长起来的开源,最为引以为豪的,就是“通过开放协作,创造事实标准”。那么,为开源制定的标准,会不会限制开源的发展呢?

我认为可以从三个方面努力,来减少这样的担忧。

1. 区分快慢

开源领域并非全体一致、同步变化。总有些领域比如容器、DevOps要快些。有些领域比如OS、Database要慢些。在法务合规领域,已经比较稳定,而在安全漏洞方面,可能还会有较快的变化。因此,不同变化速度的领域,我们需要以不同的迭代周期,来发布标准。比如三个月一个版本,或者2~3年一个正式版本等等。

2. 宽严适度

越是已经达成共识的领域,我们需要越严格、精确、无歧义的语言来定义。而对于分歧较大、含义模糊、快速演变的领域,我们也需要有一些宽松的,能够框定范围的语言来做一些定义。

3. 密切观察,开放协作

本质上,针对开源这样一个快速变化的领域,我们需要密切观察其发展。更需要引入更多的参与者,进行开放协作。这样才能够制定出有意义、有价值的标准来。

五、如何更好的推广开源相关的标准

除了走标准制定的路线之外,我还产生了一个联想。在学术领域,一篇论文被引用的次数越多,就越具有权威、重要的地位。我们在编制标准的过程中,也应该及时的发布相关的论文,介绍我们的概念定义,指标模型,最佳实践。这些输出如果被更多的其他论文与研究成果引用,甚至“出圈”,被非专业的人士所采用。这样的标准,就会更快、更好的实现自己的价值。

总结

今天的会议,我收获巨大,再次感谢各位参会的专家!