“太极”跟“冰雪奇缘”这两个看似毫不相干的词汇是如何同框的?让我们跟随胡渊鸣博士的讲述来了解 Taichi 从诞生到走向大众面前再到“成人礼”再到茁壮成长的故事。希望 Taichi 的开源创业之路给大家的生产实践带来共鸣与帮助。
本文整理自太极图形联合创始人、首席执行官胡渊鸣在DIVE全球基础软件创新大会2022(创业与投资专场)的演讲分享,主题为“Taichi的开源与创业故事”。
分享主要分三个部分展开:第一部分 Taichi 及其演化历史,第二部分 Taichi 开源社区的机遇与挑战,第三开源社区与公司如何相辅相成。
以下是分享实录:
Hello,大家好,欢迎来到 Dive 全球基础软件创新大会,我是胡渊鸣,太极图形的联合创始人兼 CEO。今天很荣幸能够借这个机会给大家讲一讲 Taichi 的开源与创业历程。
今天在接下来的大概 40 分钟的时间之内,我会简单的聊一聊 Taichi 及其演化的历史,我也会讲一讲 Taichi 开源社区遇到的机遇和挑战,最后我会希望谈一谈开源社区与公司如何能够做到相辅相成。
Taichi 及其演化历史
先来看看 Taichi 和它的演变历史。什么是 Taichi?Taichi 是一个开源的高性能并行编程语言,它有三个特性:优雅开发,高效运行和随处部署。一会我会仔细谈一谈这三个很重要的特性。
太极编程语言除了上层编程语言之外,它有一个中间表示也是非常重要的,我们希望它的中间表示能够成为一个硬件中立的并行计算中间表示,它是一个拿来即用可部署的并行计算软件基础设施,这是我们更长远的一个规划。
太极编程语言它的应用场景有哪些?在物理仿真、数值计算、机器学习、机器人、视觉特效、通用计算各种各样的地方,只要你要用上 GPU,只要你的计算任务需要进行并行编程,你都可以使用 Taichi 来进行开发,目前全球已经有近百所的高校和企业的用户,自发的把 Taichi 用在各种各样的使用场景里面,包括科研、包括教学、包括生产。
在 GitHub 上面 Taichi 有将近两百位开发者。它一开始的时候只是我自己一个人的兴趣项目,但是随着时间的发展,现在已经有接近两百位开发者,一起来给 Taichi 贡献代码,我们也获得了一万八千多个 Stars (截至演讲时),在一些统计数据上面,我们也看到 Taichi 有将近百万次下载,它是目前来看 GitHub 上面,全球范围之内,图形计算基础设施里面比较活跃的一个基础设施之一了。
接下来我来讲讲 Taichi 的三个核心的属性分别是易于开发,高效运行和随处部署。
先说一说易于开发这一块,这一块最经典的例子就是之前我写过一篇文章叫做 99 行代码的《冰雪奇缘》,你只用很少的代码就可以实现一些很 Fancy 的物理效果,这些物理效果,你可以在各种地方用到它,你可以在动画电影里面用到,你可以在一些工业仿真的场景里面也可以用到,你只要写右边这么短的代码就可以实现这种相对来说还算复杂的多材料物理仿真,特别的有意思,这是为什么大家愿意用 Taichi 来进行教学,因为它的代码相对来说比较短,写起来开发效率也非常高,并且写完了还可以在 GPU 上面运行,这是 Taichi 一个很重要的属性,你只要用很少的努力,就可以去创造出来比较高性能运行的程序。
易于部署可能是 Taichi 另外一个很重要的属性了,Taichi 它作为一个编译器,它吐出的这些二进制,或者一些 Shader 文件,可以让你把 Taichi 部署在各种各样的地方,包括移动端、在云上面,甚至在浏览器里面都可以运行太极,这就使得 Taichi 代码只要编写一次就可以在各种地方用上,这是特别好的一个事情。
上图左边是我们和快手合作的,运行在 iPhone 上面的一个流体仿真,中间是一个 Android 上面的 Demo,右边是把 Taichi 运行在浏览器上面得到的一个效果,特别有意思,你基本上可以在任何地方,只要你能想到的设备,只要它有个显示器,大部分地方都是可以运行 Taichi 的,智能手表不算,智能手表上面还不能运行。
Taichi 的第三个属性就在于它的高性能,这边我们可以用一块 GPU 去模拟大量的粒子一起掉落,这一个粒子里面有 2.35 亿个粒子,在有 Taichi 这样的基础设施之前,你是很难在一块 GPU 上面进行这样的运算的,有了 Taichi 以后,基于我们的这些数据结构,基于我们的这种量化的压缩的技术,你是可以在一块 GPU 上面进行,把它的运算性能发挥到极致,进行特别大规模的独立仿真,这是 Taichi 的高性能的一个特性。
当然这整个模拟器你用 Taichi 去写,代码行数也不是特别多,大概就小几百行代码,你如果没有 Taichi 这样的基础设施,它开发的成本就相对来说会高很多了。
如果你想要了解更多的关于 Taichi 的语法,你可以去看一看 SIGGRAPH 上面,我们有一个 Taichi 的课程,这个视频在 YouTube 和Bilibili都可以找到,这个是 SIGGRAPH 上的一个教程,这是有一段时间之前了,但是准备的相对来说还是比较充裕的。
Taichi 本身是一个编译器,今天时间有限,而且我也看到这是一个基础软件的会议,所以大家对于 Taichi 的内部构造或许会有一些兴趣。这是 Taichi 的 Kernel 的一生,它在从最早的时候是在一个 Python 的代码,慢慢逐渐的 Lower,一步步把它编译到最后可执行的各种各样的后端,包括各种各样的 CPU 后端,和各种各样的 GPU 后端,甚至我们现在可以把它编译到 WebAssembly,甚至 WebGPU,可以让它在浏览器上面运行,如果你想了解更多的关于编译器内部的这些信息,可以来我的网站上面看这个Life of a Taichi kernel这样的一个 PDF 里面有很多很详细的介绍。
我们最近也对 Taichi 进行了一些性能评测,那么在我们相对来说还算丰富的测试用例上面,我们在一些 case 上面基本上可以发现 Taichi 和 CUDA 进行比较的时候,它的代码量相对来说会短很多,性能通常是能够比肩 CUDA 的,在一些 case 上面甚至能达到更高的性能。Taichi 的性能和生产力和一些竞品比起来都是有一些优势的,这是为什么大家愿意用 Taichi 去进行一些高性能计算程序的开发。
接下来我会花几分钟时间,简单的讲一讲 Taichi 整个项目发展的历史。Taichi 大概是 2015 年的时候开始研发,到 2016 年的时候,我们就把它开源在了 GitHub 上面,当时就起了一个名字叫做 Taichi。之所以起这个名字是希望这个项目能够被更多的国际上的友人能够熟悉,然后希望中文名大家听起来耳熟能详,并且英文也被国际上广泛接受。当时就起了太极这个名字,太极它的英文就是 Taichi,也是一个在世界范围内被广泛接受的概念。我们也挺希望,作为中国的一个基础设施,能够有一些世界范围内的影响力,现在 Taichi 社区还是相当的国际化的。
当时为什么要做 Taichi 这个项目?是因为我对计算机图形学非常感兴趣,我当时在清华还是个本科生,就想能不能去写一个计算机图形学的库,来解决一些计算机图形学当中常见的问题。有一些问题大家今天看起来会觉得难以想象得缺乏解决方案。如果你学过计算机图形学,你会发现大家都要写一个作业叫做光线追踪,就是你去写一个 Ray Tracer,去进行一个渲染。很多同学渲染器写好了后会遇到一个很大的问题,即不知道怎么把渲染结果显示在屏幕上。老师就会说,要不装个 OpenCV 这个库。OpenCV 可以相对容易地显示一张图片,我当时就觉得这个非常诧异,因为 OpenCV 是一个 Computer Vision 的库,我们要做的事也只是显示一张图片,为什么要装这么重的一个库?当时为了解决这个问题,于是造了 Taichi 这个东西。
Taichi 开始的定位是一个可重用的图形学基础设施,我当时自己用 Taichi,一个人写代码写的很嗨,用它去实现了各种各样的物理仿真,还有一些离线渲染的算法,做得非常开心。
经过几年的深度开发,我们也发表了好几篇 SIGGRAPH 之类的顶级学术会议的论文,其中包括这样的一些软体,还有刚体的物理仿真,特别有意思,这些基础设施就是以 Taichi 为基础设施去开发的。
但是后来,我就发现一个事情。因为计算机图形学有独特的几个特点,第一计算量很大,第二背后的硬件比较复杂,有时候要用 CPU,有时候更多是要用 GPU 去进行计算。相对来说,写一个库对于解决很多图形学的问题是比较难的。所以,当时我作为一个比较渴求知识的年轻人,就想能不能去学一学编译原理,把 Taichi 从一个库转成一个编程语言。这基本上就是我的博士论文了,我到了 MIT 读博士以后就一直在做这个事情。
把 Taichi 从一个库变成一个编程语言以后,我们就可以把 Taichi 嵌入到 Python 之中。目前最主要的前端还是用 Python,这个编译器大家都知道它分为前端,中间表示和后端,前端现在还是主要还是用 Python,当然也有其他的前端,我们也在规划一些新的前端。它的中间表示是一个可移植的、并行计算的表示方法,后端有好多像 CPU、GPU 这种。当时可以用 Python 来写前端是一个很好的事情,因为这样让所有的 Python 程序员都可以比较低成本的能够用上 Taichi。
把 Taichi 从一个库变成编译器,到底能额外做些什么?各种各样的物理仿真、高分辨率、高精度、甚至是可微的物理仿真。什么是可微的物理仿真?就是你希望求出这个物理仿真的结果。有一些初始条件和外部输入的导出,求出这个极限结果后,就可以比较好进行一些优化,像神经网络的控制、结构的优化都可以用太极去做。一个库很难高性能地做这个事情。
2020 年发展得相对比较快一些。我们进行了一些对外的宣传,因为之前 Taichi 更多是我自己一个人的项目,但是我当时就意识到,如果只是我一个人做这个事情是很难做成的,我就写了一篇文章,就是这个 99 行代码的《冰雪奇缘》(https://zhuanlan.zhihu.com/p/97700605)。
坦白来讲这篇文章就是个流水帐了,讲了讲 Taichi 的开发过程,但没想到大家还是很喜欢,特别是看到一些很短的代码可以实现复杂多固体耦合的效果后,大家觉得特别有意思,从此以后就很多同学加入了社区。这个社区当时相对来说很活跃,当时社区里面很活跃的一些小伙伴现在也成为了公司的成员。一会儿我也会讲到,我们在 SIGGRAPH 上面开了一个教程,并且最重要的是当时我和 yekuang 在 GitHub 上认识了。我们认识的故事我也会展开讲讲。
我们还开了 Games 201 这个课,我自己是主讲人。在这个课上,我们讲了讲 Taichi 怎么样实现各种各样神奇的物理效果,当时应该有将近一百个各种各样的物理仿真小程序,现在这些程序都在 GitHub 上开源了。大家可以找到这些程序来跑一跑,非常有意思。当时也有几十万次下载,现在已经接近一百万了。
到了 2021 年的时候,我们就成立了公司。其实直到 2021 年初的时候,我们都没有太多想成立公司这个事情,后来我博士也毕业了,就想既然已经在这个事情上投入了这么多时间,或许我们把这个事情再做一做,把它做得更好一点?后面就成立了太极图形公司,后来也比较顺利地拿到了红杉资本,包括后面我们 A 轮四个股东的投资,相对来说这段时间还是比较顺利的。
这里我们简单展示一下 Taichi 的一些历史数字,包括它的 Stars、Issues 和 PR,Issue 和 PR 分别是大家提出的问题,以及大家提出的 Pull Request。还有你在 Taichi 的 GitHub 上能够找到的 import taichi as ti 这样一个语句出现的次数,最早期的时候,我们没有 import taichi as ti,因为那个时候 Taichi 还是个库,没有办法去被 import,后来才有这个 import taichi as ti。把它变成一个编程语言以后,我们整个用户数量有了很快的增长。
这个过程中,可以看到社区发展过程中一些比较关键的事情。当然整个公司成立以后,大家投入的精力更多了,发展得会相对来说更快一些。最近也会发布 1.0 版本,录这个视频的时候还没有发布,但是也许视频放出来的时候就发布了。
(Taichi)开源社区的机遇与挑战
接下来第二部分,我想聊一聊开源社区的机遇和挑战,特别是在做 Taichi 的过程中,我们意识到了什么问题。这部分内容也许会对大家有些帮助。
首先我们要明确的事情是,为什么大家会乐于参与开源开发,有好几个因素:
第一个就是在这个过程当中,可以提高编程能力。我们社区开始的时候,很多参与者的编程水平没有那么专业,随后你会逐渐意识到如果要和其他人合作,必须以一个专业程序员的思维模式来进行软件开发。过程中,大家会进行比较频繁的 Code Review,互相去评审对方的代码是不是写得专业,无形当中你的编程能力就会得到了提高。这是一个互惠互利的过程,因为你作为贡献者参与到这个社区当中投入时间,那么社区的 Maintainer、Reviewer 或者其他成员,也会帮你 Review 代码,他也贡献自己的时间,大家在这个交互过程中就把开源软件的功能又往前推进了一步,并且双方也获得了成就感,是特别好的事情。
第二个就是,相对来说,开源项目相对在学校接触的软件工程项目来说,它的规模会大一些,这其中就要经常做设计决策。很多时候在进行软件的设计决策的时候,你就是要在不太好的 A 和不太好的 B 中间选一个看起来更好的决策,这对人的软件工程能力,包括思辨能力,有非常大的帮助。
第三点就是在开源的过程中,可以收获很多领域的特定知识。比如在 Taichi 社区,更多的是图形学、编译器、高性能计算这样的知识,社区成员也都是这方面的专家。团队合作能力也很重要,因为很多时候开源项目绝对不是一个人开发的,你得想一想到底怎么样和你的小伙伴们一起把这个事情做得更好。沟通、分工、协作都是特别重要的事情,收获朋友也是很重要的事。开源社区的大部分同学可以说是臭味相投,大家都对这个软件、这些很 Geek 的东西特别感兴趣,大家一起写,以后会成为特别好的朋友。
最后一点就是成就感。当参与一个很受关注的开源项目时,你会有特别多的成就感,比如你写的一个 Feature 被千上万的人使用,那种感受是特别棒的。
接下来,我想聊一聊开源社区倡导的文化,特别是 Taichi 开源社区倡导什么样的文化。其实,也就几个关键词:同理心、互相尊重和坦诚交流。
为什么特别强调同理心?因为很重要一点是,开源社区并没有强制任何成员参与,大家很多时候都有自己的本职工作,如果要合作,就得尊重别人的本职工作,因为他只是凭兴趣参与,互相尊重和坦诚地通过网络交流是特别重要的事情。
第二点就是团队为先。你可能得多想一想整个社区、整个团队会怎么看某个问题,而不是只考虑自己的看法。很多时候,开源社区虽然会有一个核心成员,但更多的时候,它有很多用户,有整个社区,是大家一起把事情做好的。很多事情得想一想怎样做决策才能使团队里的每一个人都能够认可,使团队更稳定、更长远地运营下去。
第三就是质量大于数量,珍惜社区的资源。我们希望每一个人贡献代码的时候都要在意 PR 的质量,这样才能使 Reviewer 的效率更高。不是所有的 Contributor 都非常在意这个事情,可能一个 PR 改来改去,浪费了 Reviewer 特别多的时间,最后这个 PR 也没 Merge 进去,效率比较低,时间一长就会影响开源社区其他成员的参与体验。我们提倡每个贡献者都把自己的 PR 描述清楚,这样大家合作的成本就会低很多,整个社区也能快速地运行。
我们也提倡在沟通过程中,大家尽可能谦逊、包容和冷静,并且能够尊重社区的每一位成员。在任何开源社区里进行人身攻击或者不就事论事的做法都不被接受,在我们这边也是。网络相对来说是一个容易产生误解的地方,大家如果参与开源社区,还是要尽可能考虑网络另外一端参与者的感受,这些挺重要的。
这也引到下一点,就是礼貌和尊重。如果大家聊着聊着,你发现这个人好像很有攻击性,时间长了,可能大家就不愿意理他了,这对每个人的体验都不好。不是英语 Native Speaker 在 GitHub 上很多时候也是用英语来交流,这时候一定要注意,有些表示方式在汉语里大家会觉得很正常,但如果把它生硬地搬到英语里,可能别人会觉得彼此没有互相尊重。特别是我们 Taichi 社区有很多海外的参与者,俄罗斯、欧洲、美国、日本等地方的参与者都有,和他们保持礼貌的沟通特别重要。
最后一点就是大家要充分讨论,并且能有一个明确的决策机制。很多事情必须得有人拍板,你明明知道 A 和 B 当中必须选一个,那就不能说我选 A 不行,选 B 也不行。不能因为犹豫不决就一个都不选。有些开源社区会有一个灵魂人物,他就是来独裁的。比如 Linux 社区里,很多事情基本是 Linus 说了算,Python 早期也是这样。有些社区会有 Committee,但不管怎么样都得有一个人来决策,如果没有决策,很多事情就会停滞不前。
刚才说了这么多,最重要一点就是和社区有效沟通,沟通能力和技术实现能力同等重要。我想再提一点就是开源的开发不是一个人的工作,开源是大家一起来做事情,你要去拥抱你的社区。在这个过程中,你必须很好地去沟通你想实现的事情,如果不能很好地沟通,很多事情做不成。
一个很容易掌握的沟通技巧就是尽可能站在“读者”,而不是“写者”的角度去考虑你的表达。比如你想说一句话,写完了后最好能自己重新梳理一遍,看看如果你是一个读者,能不能读懂。很多时候你写的句子可能只有你自己懂,对方不一定能懂。如果沟通长期有误,就会造成一些误解,对社区的健康也不太好。
及时、合适地去交流也特别重要。如果要提一个功能比较多的 PR,请及时和社区打招呼,千万避免巨大无比的 PR,这对社区来说是特别痛苦的事情,不但不会给社区带来惊喜,反而还会让 Reviewer 觉得痛苦。而且很多时候,你自己想出来的方案如果不和社区及时沟通,可能会偏离社区发展的 Roadmap 从而导致无用功。当然最基本的就是,如果大家都不和社区打招呼,就会导致重复开发,浪费社区资源。
这些我在一篇知乎文章上面也提到过,“如何优雅地参与开源开发”,大家如果有兴趣可以深入读一读,也欢迎大家到我们社区逛一逛。
在中国做开源还是有一些挑战的,我这里就说些比较具体的点。
第一点,很多中国互联网企业的开源意识不是特别强,更多还是一种拿来主义。你如果要求他把 Feature 能 contribute back,有时还是有难度的。
第二点,客观上,开发者工作压力比较大。与国外的开发者相比,中国的开发者可能相对来说工作时间更长,并不是每个人都有余力投入到感兴趣的开源项目中。
第三点,软件开发的工程素养和专业性相对来说有一些提升的空间,特别是在中国注意代码质量的贡献者比例相对来说还不是特别高,但这个我觉得会随着时间的推移有所改变。
最后一点,就刚才也提到,大家平时说中文更多,但在 GitHub 上是用英文作为交流语言,语言上或多或少会有些障碍。不是说你在国外呆过或者英语很熟练就可以,只要母语不是英语都会有影响,就像现在让我用英语做这个分享,可能就没有像用中文这么好。
这是一个客观上的障碍,具体一些解法我刚才也提到几点。首先,我们要尽早设立社区的文化和行为准则,这样能让我们社区更加的友好一些,让大家更对于很多事情有更多的认同,这样就少了很多扯皮的事情。
其次,和企业合作的话需要明确一个 contribute back 机制。很多时候,企业来问一些问题,自己改了改拿回去用,但不 contribute back。可能合作之前,你提出一些小的请求,我可以回答你的问题,但是我也特别希望如果你的改动对这个项目有益,可以及时以 PR 形式回馈给社区。
还有就是你可以选择相对国际化开源社区,因为海外贡献者相对的投入程度度和专业度会更高一些。中国的贡献者也特别棒,但是很多项目如果要做国际影响力,以国际化的方式运行就是不可避免的。
一个常被提到的问题就是,你的代码公开了,不管作为开源社区还是作为创业公司,你的竞争对手、大厂来复制怎么办?基本上所有的创业公司和初创项目都会面临大厂复制的问题,但实际上,复制能成功的概率并没有大家想象的那么高。为什么会有这个问题?
首先创业公司的动作是很快的,它会有先发优势。我觉得更主要的在于组织的性质决定了复制出来的产品可能会有不同的定位。比如 Taichi 是一个编程语言,有些硬件厂商在做和我们类似的东西,像 NVIDIA 也有一个类似产品。我觉得我们更多是一个软件的组织,想做的是一个与硬件无关的软件中间层,但硬件厂商不一定会做这个事情。组织性质导致百分之百来复制对其他企业来说不一定完全有意义。
当然,我们还要相信一点,就是对软件本身比较深入的理解,很多时候还是掌握在社区的创始团队手里,这不是能特别容易抄走的。就像一个学霸写了一份作业,你既想去复制它又不想被看出来是复制的,这还是有一些挑战的。
最后一点就是开源社区更加接近用户,并且有比较快的迭代速度。对于技术软件来说,我始终觉得它的迭代速度是挺重要的。知道用户需求,对开源社区和软件开发都是有帮助的。当然,先发优势也是一点,你如果能较早地建立一个标准,后面的人更多的是来贴合你的标准。
开源社区和公司如何相辅相成
最后我想简单聊一聊开源社区和公司如何做到相辅相成。我们回到最根本的问题:为什么要成立公司?如果我们仅以社区的形式来开发这个项目不行吗?公司给开源带来了什么?
成立公司后,创始人能够更好、更多地投入自己的精力。
创立公司不是目的,而是方式,通过各种各样的方式能够较好地把一件事情做起来,这是创业公司能给你带来的帮助。我们也讨论过这个问题:假设我们不成立公司,就俩人坚持做,能够走得比现在更远吗?当时答案是不能,因为仅仅靠兴趣是很难支撑项目长久运行的。
如果不成立公司,很可能这个作者后来变忙了或者有其他事情,这个项目就丢弃了,很多时候是挺可惜的事情。当然,不是所有项目都值得成立公司,必须是你觉得很有价值,并且愿意为此付出努力并承担风险的情况下,你才可以去成立公司。
没有公司的时候,Taichi 茶杯都是我自己贴钱做的,并且花了很多时间邮寄。成立公司以后,可以组织一些更丰富的生态类型活动,让大家参与进来,通过这些活动,给大家一些反馈,像纪念品这些事可以有更专业的人能帮你,你自己可以花更多时间去写代码、去实现一些核心 Feature、想清楚 Roadmap 等,你的时间利用率会更高。
当然,成立公司后也要 Push 团队尽可能提早想出它的商业化方式,让这些项目在更健康的运营下给社会带来更大的价值。
公司成立第一年,开源对我们有特别大的帮助。刚才也提到,我们早期工程师团队一半的员工都来自我们的开源社区。我们 Taichi 社区很多同学没有线下见过,但是在一起写代码的过程中积累了非常深厚的信任,很多社区里的同学觉得志同道合,大家就出来一起创业了。
我们两个创始人也是在 GitHub 上认识的。 作为公司联合创始人 CEO 和 CTO,我和 yekuang 在决定创业之前,线下根本没有见过一面,他在东京,我在波士顿,中间还有很长的时差,就通过 GitHub 上的代码 Review 建立了非常深厚的信任,后面就一起出来创业了。
开源还有个好处就是它的代码完全公开透明,可以比较容易地获得合作伙伴的信任,这点特别重要。如果你是个闭源软件,大家很难知道这里面的实现到底是什么样的、是不是自己想要的方式。如果开源了,大家对它的安全性、稳定性都会有更高的信心。
贴近用户场景也是一个好处。用户可以直接使用代码,用了以后,有时候会告诉你这些代码还能用在其他什么地方,你就会特别开心,根据他的需求你可以快速迭代产品。Taichi 是一个属于社区的项目,公司员工很多时候是在做一些社区不那么有兴趣的事情,社区给我们带来回馈,通过这样的方式把项目打磨得越来越好。
最后一点,我觉得社区能够起到监督的作用,推动软件规范化。有时候公司内部代码可能写得一般,因为代码不用开源,就会想反正也没人看。如果代码开源,大家就会要求代码质量高、其他人能读懂,这是一个很好的监督。
开源社区对公司的整个发展还是相当有帮助的,这些更多是公司现在刚成立一年我能看到的。我相信在未来它能给我们带来更多的帮助,我们也特别期待公司能够和开源社区能够一起成长。
接下来,聊一聊公司在开源开发中应该扮演的什么位置。
公司如何推动开源开发?这要求大家改变闭源软件的开发思维。很多闭源软件的设计就是放在作者的脑子里,不写出来的话,其他人很难参与进来。如果以开源的方式进行开发,就得把 Roadmap 等都放到开源社区中,必须实现开发的公开和透明。
我们当时遇到一个问题,就是我们的社区贡献者被招安成公司员工后,很多事情就线下讨论了。线下讨论导致的一个问题就是会忽略线上、社区里没有进入公司的同学。他们对很多事情也很感兴趣,但是你线下讨论,他们就不知道发生了什么事,很难参与进来。
我们觉得开发透明还是特别重要的。如果不注重这个事情,就会导致新来的开发者不知道自己能干什么,久而久之,公司内部开发者和外部开发者就会对项目的认知产生脱节,大家就不能玩儿到一块了。
再回到这个问题:为什么需要一个公司?刚才提了到的更多是创始人需要全职投入自然就成立公司,还有一点我觉得也很重要,就是因为开源社区本身是没有任何强制力的,特别重要、特别核心的事情,需要有稳定性和强制力的组织才能实现,其中就包括优先开发一些很必要、但是没有那么有趣的事情,比如设置 Testing 环境、CI/CD 持续集成等。
还有一点,稳定的开发输出也挺重要的。有时候一个 Feature 就是要在一个时间点完成,这样进度才能得到保障等,这样的事情就得交给公司的同学来做,他们会保证自己每天来上班,但是开源社区的小伙伴就是有兴趣了就参与下,没有兴趣就搞点别的事了。
另外,部分核心用户在看到稳定的实体后,才愿意和你对接、一起去打磨。比如我们很多工业界的合作伙伴,如果没有公司的话,可能都不知道找谁来聊这些合作。
今天时间不多,我就不详细展开开源商业化的内容了。大家可以去看 A16Z 的一篇文章写得非常的好,基本上就是开源模式可以加速创新、驱动采用,并且提高可用性。开发者与用户通过开源积累信任,并且形成口碑效应,帮你吸引到一些人才。当你在社区优先形成一个标准后,有很多种方式可以商业化,这需要很长的时间,我们也在探索中。
最后的时间,我想讲一讲 Taichi 用户的故事。Taichi 目前被近百所高校科研院所和企业用于科研教学和生产,其中包括欧洲最好的理工学院苏黎士联邦理工和香港科技大学、清华大学等很知名的高校,还有像 OPPO、快手、腾讯互娱这样的企业等等。
这里有一个苏黎士联邦理工的例子,看看他们用 Taichi 做了什么?他们用 Taichi 进行了计算机统计学的教学,完全是自发使用的,没有任何公司的介入,我们是在他课程结束以后,发现他们的同学把这些代码开源在了 GitHub 上才知道这个事。
他们的学生做来 30 个项目,其中有 28 个使用 Taichi 去实现,并且大家评价都相当高。我们也进行了用户访谈,了解到他们对编译速度、性能评测、可视化错误提示还有一些更高的要求。我们收到来这些 Feedback,就可以再迭代我们的产品,这是一个非常互利互惠的过程。
我想说,作为开源社区的早期核心成员,必须要和你的用户走得比较近,不能是爱用不用、用完了就不管的态度,还是要和他们聊一聊,看看到他们到底需要什么。
我们也开了太极图形课,是一个在线课程,也帮我们挖掘了很多最早期的用户。这是大家做的一些用 Taichi 实现的效果集锦,有模拟黑洞的、模拟布料的、绘图的、多材料物理仿真的,非常有意思。与此同时,我们还在做一个太极开物 3D 创作平台,它是一个 SaaS 系统,能够让每个人都比较容易地进行 3D 数字内容创作,更多消息我们会逐渐放出,今天就不再详细展开了。
这就是 Taichi 能够分享给大家的一些感悟,我们其实也在探索过程中,虽然这个项目到现在已经有六七年的时间了,但公司成立也就一年,很多事情我们也在探索。我们发展得还挺顺利,欢迎感兴趣的同学来我们社区逛一逛或者加入我们。我也不敢说我说的是最准确的,只是根据我的经验总结出来的一些观点,或许对大家有帮助,也希望大家批评指正。
谢谢大家,很高兴能够进行分享,再见。
评论