【外评】一位中国程序员的开源之旅
近年来,中国的信息技术突飞猛进,几乎改变了人们日常生活的方方面面。但这种飞速发展并非一蹴而就。这一切都始于 20 世纪末,当时互联网刚刚开始进入中国,对许多人来说,计算机仍被视为一个新领域。资深开发人员七度(Seven Du)是先行者之一,他接受了不断变化的环境,并深入参与到开源开发中。
在这次访谈中,Seven 分享了他的故事,从他早期对计算机的痴迷和自学掌握编程技能开始。他谈到了自己最初的上网经历,以及将他与更广阔的世界联系在一起的通信工具。他还回顾了在烟台电信工作的时光,在那里他获得了宝贵的技术经验,并亲眼目睹了互联网在电信行业的颠覆性力量。离开电信公司后,他的职业生涯发生了重大转折,加入了北京的一家初创公司,并在那里接触到了 FreeSWITCH – 这是他开始参与开源开发的关键时刻。
随着访谈的继续,Seven 深入探讨了他在开源领域的贡献,分享了他一路走来遇到的挑战和机遇。他还讨论了中国开发者在国际开源社区中面临的独特困境,以及克服这些障碍的策略。
这篇访谈不仅讲述了杜月柒个人的技术历程,还揭示了中国信息技术更广泛的演变,为中国开发者如何驾驭这场数字革命提供了一个视角。
电脑世界之旅
▮ 主持人: 您第一次接触电脑是什么时候?有什么特别难忘的事情想和大家分享吗?
Seven Du 我第一次接触电脑要追溯到高中,一切都要从键盘说起。当时,电视上有一个教打字的节目,我觉得非常有趣。后来,我的一个朋友买了一台 Subor 学习机¹,通过一根 AV 线主持人到电视上。这台机器当时非常流行,连成龙都为它代言!我以前从未见过这样的机器。我清楚地记得我的朋友是如何向我介绍 BASIC 的,他向我展示了 let a = 1、let b = 2 和 print a + b 等命令。我不知道那是什么,但他借给我一个打印好的键盘布局(Subor Learning Machine 附带的),有了它,再加上从电视节目中学到的技能,我很快就学会了如何打字。
我第一次真正接触电脑是在 1997 年,当时我在烟台大学读大一。一位学长带我去了学校的计算机实验室。我们称之为 “上机”(使用实验室里的电脑),每小时大概要花费一到两块钱。电脑是 286 型的,运行无盘 Novell Netware,有 5 英寸软盘。操作系统类似 DOS 3.1。起初,高年级学生教我如何使用 CAI(计算机辅助教学)来练习打字和基本计算机技能。后来,我开始自学 WPS,这是一种 DOS 上的文字处理程序,有点像早期的 Microsoft Word。
让我记忆犹新的是,我们系有自己的计算机实验室,其中的亮点是这台 586 型计算机,它是最先进的计算机,速度快得令人难以置信–当你输入一个命令时,整个输出结果会立即显示在屏幕上,而不像 286 型计算机那样缓慢滚动。但当时的系统界面很奇怪。开机后,它直接进入一个图形界面,只有 “我的电脑”、“记事本”、“画图 ”和几个基本程序。我对 DOS 命令已经驾轻就熟,也知道大量的 DOS 程序,如 PC Tools、ACDSee(一种图片查看器)、ARJ(一种文件压缩工具)、WPS 等。因此,与我以前使用的电脑相比,这台闪亮的新电脑似乎没有任何真正的应用。我们唯一弄懂的是如何右击并在桌面上创建快捷方式,但我们甚至不知道这些快捷方式有什么用,所以基本上没人用过它。直到后来,我们才意识到这个图形界面实际上是一个全新的操作系统–Windows 95。一旦人们意识到这一点,图书馆里任何有关 Windows 95 的新书都会马上被借走。
Windows 3.2 的中文版也是一件大事,它介于 DOS 和 Windows 95 之间。但我直到几年后才接触到它,当时我在大学档案室帮老师整理档案。
▮ 主持人:您当时是如何学习编程的?当时流行的编程语言有哪些?是什么因素影响了你对它们的选择?
Seven Du: 大一下学期,我们选修了一门名为 “计算机导论 ”的课程,那是我们真正开始了解计算机的时候。这门课涉及到与 FoxBase 关系数据库相关的内容。FoxBase 也可用于编程和开发数据库应用程序,但我们没有深入学习这部分内容。后来,我从图书馆借了一些 C 语言编程书籍,花了整个暑假自学。问题是我家里没有电脑。幸运的是,我的一个朋友在镇上开了一家打字店,提供 WPS 打字服务。只要他的电脑有空,我就会用 WPS 打出书本上的 C 程序,并把它们保存到 3.5 英寸的软盘上。由于他的电脑上没有 C 语言环境,我只能等到新学期开学才能在学校的电脑上运行和测试我的程序。从那时起,我开始编写自己的程序。那学期我们也学习了 C 语言编程,但由于我在暑假期间自学了 C 语言,我已经领先于大多数同学。
事实上,我之所以选择 C 语言,是因为我知道下学期我们将学习 C 语言编程课程。我没有选择 BASIC,因为当时觉得它更像是一种解释型语言(尽管你可以用 QBASIC 将文件编译成 .EXE)。对我来说,C 才是真正的编程语言。
我们使用的 C 集成开发环境(IDE)是 Turbo C 2.0,对于 DOS 来说已经非常先进了。后来,我自学了 Linux,并开始在 Linux 上学习 C 语言,使用 GCC 作为编译器。
到了大三、大四,大学里几乎所有的电脑都换成了 Windows,有的甚至是 Windows 98。我的一些同学开始自学 Delphi。Delphi 使用的是 Pascal,它被认为是一种 RAD(快速应用程序开发)语言,主要用于教授 “数据结构”,而作为物理专业的我们并没有这门课程。相反,我们更关注硬件,比如微控制器。因此,我不得不自学数据结构。我研究了 Pascal 和 C 两个版本。不过,我还是更喜欢 C 语言。Delphi 的 C++ 版本恰好叫做 C++ Builder。于是我学习了 C++,并使用 C++ Builder 开发 Windows 软件。当时,Visual Basic 和 Delphi 是 Windows 最流行的编程工具,但它们并不适合我。我喜欢在 Linux 上编程,它有自己的 C++ Builder 版本,叫做 Kylix(我相信大多数人都没听说过)。Kylix 从未像 Delphi 或 C++ Builder 那样风靡一时,所以我没有继续深入研究。另外,当时的 Linux 桌面对于基于图形用户界面的程序来说还不成熟。总之,我更喜欢命令行软件和服务器软件,不需要任何图形用户界面。
当时,Windows 上的数据库主要是独立的 Microsoft Access,不支持 SQL。我还没有使用过 Microsoft SQL Server,但 C++ Builder 恰好有一个名为 Paradox 的 “奇怪 ”数据库,它支持 SQL。于是,我在学校就业指导中心帮忙时,用 C++ Builder 和 Paradox 重写了 “全国毕业生分配决策支持系统”。这个系统在全国广泛使用,第一个版本运行在我熟悉的 DOS 环境下。后来又推出了 Windows 版本,但漏洞百出。据说是另一所大学的一些财务人员编写的,他们使用 FoxPro(相当于 Windows 的 Foxbase)作为数据库和开发环境。我重写的版本可以导出与原系统完全兼容的数据库文件,并最终成为我的毕业设计项目。甚至在我毕业多年后,我编写的软件仍在学校使用。
实际上,FoxPro 并不支持 SQL,但与 FoxPro 类似的工具 Power Builder 却支持 SQL。计算机科学系的一位学长向我介绍了 Power Builder,我也学会了它,但从未用它编写过任何真正的程序。毕业后,我加入了一家电信公司,那里的一些信息管理系统就是用 Power Builder 构建的。大多数时候,我用这个工具调试 Sybase 的存储过程,有时也用 Oracle。
▮ 主持人: 互联网在帮助你学习计算机技能方面发挥了什么作用?这一时期中国的互联网是如何发展的?
最初,我从图书馆的书籍和装满软件和教程的廉价光盘中学习计算机技能。在就业指导中心维护毕业生分配系统时,我第一次有机会接触到互联网。基本上,老师们一下班,网络就是我的了!我们学校主持人到了中国教育和科研计算机网(CERNET),因此商业上网速度相当慢。但那是在 “防火长城 ”之前,所以世界上最前沿的信息仍然触手可及。
那时,网上的中文内容大多来自台湾,用繁体字书写(我的大多数同龄人只能认出几个繁体字,但因为小时候爷爷教过我,所以读起来并不困难)。如果没有我需要的中文信息,我就会求助于英文资源。Linux 是我的主要关注点,我花了很多时间下载和设置不同的发行版,如 Red Hat、Slackware 和 Debian。此外,还有一本非常流行的台湾网络小说《第一次亲密接触》(类似于电影《You’ve Got Mail》,讲述的都是网恋故事)。
毕业后,我进入一家电信公司工作,上网变得更加方便。我们的窄带 ISDN 可以提供 128k 的主持人,而一般家庭用户还在使用 56k 拨号调制解调器。
电信公司有很多旧电脑,我把它们都改造成了 Linux 和 Minix 机器。有些电脑太老旧,没有网卡,于是我发挥创意,用串行和/或并行电缆将所有电脑主持人起来。在探索网络和 Linux 的同时,我还深入研究了 PHP(版本 3、4 和 5)和 PostgreSQL(从版本 7.x 开始)。此外,我还重写了机房的信息管理系统,用更先进的 BS(浏览器-服务器)架构取代了同事的 FoxPro 单用户版本。
我没有计算机科学学位,编程甚至不是我的主要工作。基本上,我所知道的所有计算机知识都是自学的,而互联网则是这一切的关键。随着我对计算机的深入研究,我发现中文资源跟不上,于是我转向了大量的英文资料。为了提高英语水平,我甚至为 LinuxFocus 在线杂志翻译了一些文章。
http://www.dujinfang.com/2009/12/05/ceng-jing-zai-linuxfocusshang-fan-yi-de-yi-xie-wen-zhang.html
后来,互联网的发展真的很快。ISDN 很快被 ADSL 取代,不久之后,宽带就普及到了每家每户。与拨号主持人不同的是,ADSL 最酷的地方在于,在使用互联网的同时还能打电话。
▮ 主持人: 当时流行哪些在线交流工具?其中哪些在促进技术讨论方面特别有效?
Seven Du: 起初,我们主要通过 Telnet 使用 BBS,也有刚刚推出的网络版。但对我们来说,最受欢迎的平台还是各大高校的在线聊天室。除了我们自己的聊天室,我们还经常去山东农业大学的聊天室。至于 BBS,SMTH² 受到了很多人的青睐。
后来,我们开始使用 ICQ,那里的用户大多来自其他国家。我还记得给他们解释汉字,比如 “日 ”和 “月 ”是如何从象形文字演变而来的。他们会说:”这就像艺术!” 然而,通过 CERNET 访问国际服务非常缓慢。不久后,我们发现了一种名为 OICQ 的新工具,它最终演变成了 QQ。从那时起,QQ 一枝独秀,风靡至今。
我开始工作后曾短暂使用过 MSN,但那是多年以后的事了。MSN 曾被视为白领专业人士的象征,比 QQ 高雅得多。我之所以使用 MSN,是因为我曾在一家国际公司工作过一段时间。
我的第一份工作是在一家电信公司,主要从事与电话相关的工作,这激发了我对网络电话的兴趣。我经常尝试使用 PC 到电话和电话到 PC 的软件,但这些应用程序仍处于早期阶段,不太稳定。后来,我试用了 Skype,它提供语音聊天和通话服务,但拨打电话需要付费,我不知道如何付费,所以从未使用过这项功能。Skype 的语音质量在当时是最好的,后来 QQ 推出了语音聊天功能,使用的技术与 Skype 类似。不过,真正使用 QQ 语音聊天的人并不多,大多数人还是更喜欢文字信息。
▮ 主持人: 您早期参加过哪些网络科技社区或论坛?这些社区为中国计算机技术的发展做出了哪些贡献?
Seven Du: 上大学时,我用得最多的BBS是SMTH。SMTH 扎根于中国顶尖学府之一的清华大学,吸引了许多一流的程序员。它为 CERNET 上计算机知识的传播做出了真正意义上的贡献。
毕业后,我经常访问 LinuxEden、ChinaUNIX 和 CSDN 等网站,不过大部分时间都是在潜伏。除了为 LinuxFocus 翻译一些文章外,我还订阅了 CSDN 的月刊《程序员》(Programmer)多年。2007 年,我参加了 CSDN 组织的以 Web 2.0 为主题的大型线下活动,印象相当深刻。
新机遇
▮ 主持人: 大学毕业后,你加入了烟台电信。当时电信公司主要提供哪些服务?你的具体职责是什么?在电信行业工作期间,你学到了什么?
Seven Du 电信公司的主要业务是电话服务。我加入中国电信时,中国电信已经分拆成不同的实体。移动业务被剥离出来,成立了一家名为中国移动的新的独立公司,只专注于移动服务,而中国电信则继续提供固定电话服务。然而,移动通信的浪潮势不可挡,在我任职期间,电信公司开始提供 “小灵通”(个人手持电话系统)³,这是一种覆盖范围有限的低功率移动通信服务,主要用于人口稠密的城市。
公司还提供互联网接入服务,最初是拨号上网(163)⁴,后来是 ADSL。

我主修物理,但物理专业的工作很难找。学业过半时,物理系改制为光电工程学院,我的专业也改为电子信息科学与技术。课程也从纯物理转向 “程控数字交换与现代通信网络 ”和 “移动通信 ”等科目。这一转变为我打开了进入电信公司的大门。过去,电信公司只招收南京邮电大学、北京邮电大学等电信专业大学的毕业生。当时,公司有几个技术重点,包括交换、传输、电力系统和互联网等技术。自然而然,我被分配到了交换组,负责这些电话交换机的维护工作。
我们用得最多的电话交换机是上海贝尔系统 1240(源于贝尔实验室,称为 S1240),后来又增加了 C&C08 等华为型号。电话交换机的作用是管理电话交换机。当您拿起电话并拨号时,该号码会触发交换机向对方电话发送振铃信号。一旦对方接听,电话就接通了。
S1240 是分布式数字电话交换机(也称为电话交换系统)。我和其他几名新员工在同一时间加入了公司。幸运的是,我们有很多在公司工作了几年的经验丰富的同事,他们对我们进行了指导,帮助我们很快了解了系统。过了一段时间,设备制造商还对我们进行了几个月的深入培训。有趣的是,尽管电话交换机是硬件,但它是在软件上运行的。我一直对计算机很感兴趣,即使没有计算机科学学士学位,我也在大学期间和业余时间自学了很多课程,包括 “操作系统”、“数据库 ”和 “软件开发”。我的成绩很好,这让我更容易理解新系统。随着时间的推移,我使用 C 语言和 Linux 开发了许多自动化程序,使我能够通过串行端口与交换机进行交互。这些程序实现了警报分析和工单批量处理的自动化,大大提高了工作效率。因此,我有更多时间专注于学习我热衷的新事物。
在维护 S1240 的过程中,我阅读了几乎所有可用的手册和资料,对其工作原理有了深入的了解。同时,我也开始欣赏系统巧妙、细致和精密的设计。众所周知,电话系统不能有任何停机时间。我维护的系统运行了十多年,从未间断过(虽然有升级,但关键部件都有备份,以确保不间断服务)。并不是每个人都有机会接触这样的系统,而真正能理解其复杂性和设计的人就更少了。
除此之外,我还有机会接触到不同的商用 UNIX 系统和数据库。老实说,Linux 对普通用户来说肯定更容易上手,但 UNIX 给我的印象总是更稳定、更强大。这种对比实际上有助于我更深层次地理解 Linux。

一段时间后,公司合并了交换、传输和电力团队,这确实拓展了我的技能范围。传输主要是处理光信号和电信号的转换和联网。电源团队负责确保系统正常运行,包括为机房配备两条独立的高压电源线路,并配备 UPS(不间断电源)和发电机等备用电源,以防两条线路都出现故障。
后来,我转到网络管理和 IT 运营岗位。在那里,我建立了多个信息管理系统和自动化批处理工具。作为一个副业,我甚至还为人力资源部门开发了一套绩效评估系统,他们一用就是十年!尽管开发软件不是我的主业,但这些项目确实提高了我的工作效率。此外,整个开发过程完全是一次学习经历–我不断掌握新技能,这对我后来的职业生涯来说是一笔巨大的财富。
▮ 主持人:当时的电信公司如何看待互联网的兴起?技术人员是否意识到互联网将从根本上重塑固话、移动电话和短信等传统服务?
Seven Du: 总的来说,电信公司是在拥抱互联网。一方面,互联网肯定会带来新的服务和收入增长。另一方面,它让每个人的生活变得更美好。至于互联网对固定电话等传统服务的巨大冲击,我想人们一开始并没有真正意识到,但没过多久大家就明白了。当我加入电信公司时,安装电话已经非常简单和便宜,甚至可以免除基本安装费。后来,我们几乎不得不向人们推销安装固定电话,一些资深同事会给我们讲当年的故事,说人们需要通过私人关系才能安装电话,而且费用高得吓人。但随着时间的推移,情况发生了逆转。这一转变的驱动力来自于中国加入 WTO(世界贸易组织)后电信行业竞争的加剧和服务的松绑。互联网也在其中发挥了重要作用–QQ 比短信更方便、更灵活,还提供了表情符号、照片甚至音频和视频等多种媒体。
最让我印象深刻的是烟台的电话号码加号计划。当时,我们已经改制为网通公司⁵。烟台的本地电话号码仍然是七位数,随着用户群的不断扩大,改为八位数只是时间问题。我们为此计划了很久,并制定了不同的方法。这不仅仅是调整交换机软件的问题,它还意味着在各种系统中产生连锁反应,更不用说让公众接受新的拨号模式,甚至还要解决更新电话簿等问题。然而,这一计划从未实施。原因很简单:烟台人不再需要那么多固定电话了。
互联网对电信服务产生了深刻影响。虽然电信公司和设备供应商做出了很多努力来创新和改进服务,推出了来电显示、定制回铃音、语音信箱、一机多号或一号响多机等功能,但他们还是无法跟上快速发展的互联网。因此,传统电信公司的衰落也就不足为奇了。即使在互联网接入方面,电信公司也越来越多地扮演着互联网 “管道 ”的角色,而互联网公司则攫取了绝大部分利润。与此同时,电信公司迫于压力,不得不以更低的价格提供更多的带宽。
话虽如此,但总有好的一面。例如,虽然现在发送短信的人越来越少,但整个电信行业仍在增长。发送验证码实际上占短信服务的很大一部分,因此,短信使用量不降反升。
▮ 主持人: 你为什么决定离开电信公司,到北京寻找机会?从电信公司转型到北京的创业公司后,你认为两种工作环境最大的不同是什么?这种变化对你的职业道路和技术成长有什么影响?
Seven Du: “世界那么大,我想去看看。“这是一句网络流行语,虽然在我离开公司时还没有流行开来,但它真实地反映了我当时的感受。
在电信公司,我的职责是 IT 运营,最大的工作就是确保系统稳定。但如果一切运行正常,我也没有办法展示自己的技能。我为公司开发了很多系统,得到了很多领导的表扬,但说实话,我并不太在意这些表扬。对我来说,重要的是开发过程本身很有趣。另一方面,IT 运营并没有提供太多的创造空间。这并不是说你不能发挥创造力,而是在电信公司,尤其是国有电信公司,稳定就是一切。新想法总是伴随着不确定性。万一出了问题怎么办?谁对后果负责?
我离开公司的原因之一就是 “全员营销 ”的做法,不仅是销售人员,包括维护人员在内的每个人都有销售目标。可能是一定数量的小灵通设备,也可能是新的宽带用户。我并不是做不到,事实上,我做得很好,我甚至在下班后在商场外推销过,有时还向那些难以完成销售目标的同事伸出援手。但这不是我的兴趣所在。我真正喜欢的是 Linux、C 语言和编写程序。
当我加入北京一家新成立的公司时,我感到如释重负。这是一家国际化的小公司,有很多年轻人,老板是斯坦福大学的毕业生。最棒的是,我们每次谈话都是关于技术或去哪里玩–比如一起打篮球或跑马拉松–而不是市场营销。事实上,我们有一个独立的团队专门负责销售和营销。
最让我印象深刻的是,我第一天上班时,老板递给我半张 A4 纸,上面写着公司所有服务器和代码库的密码。他真的非常信任我。
我不得不从头开始学习这些系统(比如维护 SVN 服务器、编写批量部署脚本、使用亚马逊 S3 将文件备份到云端等),但我对 Linux 有很好的了解,这让我的工作变得更加轻松。在维护代码库的过程中,我甚至还学会了 Ruby 和 Flex(Flash 的编程语言,当时我们的许多教材仍在使用这种语言),并为同事们修复错误和打补丁。这是我不仅擅长而且充满热情的工作,我终于有机会全身心地投入其中。
▮ 主持人: 在北京工作期间,您是如何加入 FreeSWITCH 的?与 FreeSWITCH 社区的国际开发者合作,是如何影响你对代码质量、团队沟通和开源文化的理解的?
Seven Du: 2008 年,我们是一家在线英语教育公司。老师在美国,学生在中国。在口语课上,学生需要与教师进行实时语音对话,这就需要网络电话技术。起初,我们使用的是 Asterisk,但很快就改用了 FreeSWITCH。当时我的职责是 IT 运营,由于我的电信背景,我很快就知道如何维护这两个软件系统。当时 FreeSWITCH 只有 1.0 版本,我们在使用过程中遇到了不少问题。于是,我加入了 FreeSWITCH 社区,我们主要通过邮件列表进行交流,并使用 Jira 进行错误管理。
最初,我会报告错误,FreeSWITCH 团队修复错误的速度之快给我留下了深刻印象。一般来说,如果我在晚上报告错误,第二天早上就能修复。由于时差的原因,当我在睡觉时,FreeSWITCH 维护人员实际上正在地球的另一端工作。我仔细研究了每一个被修复的错误,包括其他人报告的错误。渐渐地,我意识到我自己也可以修复它们,于是我试着提交了几个拉取请求,令我惊讶的是,它们很快就被合并了。我并不只是修复自己发现的错误,有时我也会修复他人报告的错误。偶尔,我也会为新功能贡献代码。当然,有时我也会只提出功能请求,而不贡献代码。有一段时间,我不断提交一系列相关的功能请求(它们实际上都是好点子),所有这些请求都得到了实现。后来,FreeSWITCH 的作者开玩笑地对我说 “现在,我可以休息一下了吗?
我非常喜欢使用 FreeSWITCH。尽管它并不总能让我受益,但我会尝试它的功能和模块,这让我报告了更多的错误。我还参与了邮件列表的讨论,成为社区中非常活跃的一员。作为一个分享者,我经常更新 FreeSWITCH 文档(Wiki)。在开源社区中,总有些人只是报告错误、提交功能请求,甚至是批评和抱怨,而没有真正为社区做出贡献。FreeSWITCH 维护者会公开表达他们的意见,主要观点是:你们所做的只是抱怨和要求。FreeSWITCH 是免费的,我们也愿意分享我们的工作,但这并不意味着你可以为个人使用随意取用。看看 Seven – 他一直在学习 FreeSWITCH,并为我们的社区做出了很多贡献。
有了社区的信任,我很快就获得了 SVN 代码库(几年后迁移到 Git)的提交权限,可以直接提交到 FreeSWITCH 代码库。虽然当时我提交的修改并不多,但我很高兴能加入 FreeSWITCH 社区,为这个伟大的软件做出贡献,哪怕只是一点点。由于在社区中非常活跃,我结识了来自世界各地的 FreeSWITCH 维护者和爱好者,大家都很友善。这是我正式加入的第一个开源社区,它在跨文化交流、开源文化和代码质量方面对我产生了深远的影响。

FreeSWITCH 社区每年都会举办一次名为 ClueCon 的技术会议。2011 年,我获得了参加这次会议的机会。我的公司帮我拿到了美国签证,但后来又改变了主意,不承担我的差旅费,所以我决定自己出钱去。在这次会议上,我见到了来自世界各地的 FreeSWITCH 开发人员,甚至有机会发表闪电演讲。我的英语并不好,但我用幻灯片分享了我与 FreeSWITCH 一起走过的历程,出乎意料的是,得到了很多积极的反馈,这增强了我在公众场合演讲的信心。
2011 年,我离开了教育公司,开始自己创业,专注于 FreeSWITCH 培训以及呼叫中心和指挥调度系统等项目。在这个过程中,我注意到很多客户要求视频支持。当时,FreeSWITCH 主要是一个纯音频系统,视频支持才刚刚推出。因此,我花了很多时间学习视频技术。通过给 FreeSWITCH 打补丁,我实现了视频通话和视频会议,并最终将所有代码贡献给了 FreeSWITCH 代码库。不过,这并不是一件容易的事,我花了将近一年的时间才将我的 PR 合并。原因很简单:我的代码最初是供个人使用的,但一旦我决定将其提交到版本库供大家使用,我就必须确保代码的质量和在 FreeSWITCH 支持的所有平台(包括 Linux、Mac 和 Windows)上的兼容性。这个过程非常耗时,需要与 FreeSWITCH 团队进行大量沟通。好的一面是,视频功能非常新颖,不会破坏现有代码,因此更容易合并。最近,我读到了有关 Linux 内核中 Rust 代码的报道,这提醒了我在开源世界中达成共识是多么困难。
FreeSWITCH 团队对代码质量有很高的要求,FreeSWITCH 的创建者 Anthony Minessale 曾告诉我:”如果我知道 FreeSWITCH 中有 bug,我就会睡不着觉。“因此,我在提交 PR 时非常谨慎。后来,FreeSWITCH 加入了单元测试框架,这让提交补丁变得更具挑战性。现在,提交新代码时需要进行单元测试,如果测试失败,代码就无法合并。
我从开源社区获得的经验已经应用到了自己公司的工作中,我们在开发和测试中遵循类似的开源工作流程,并使用 Issues 进行讨论和文档记录。我们也是一家 “分布式 ”公司,总部设在烟台,许多同事分布在中国各地,通过远程方式工作。这种设置使我们能够引进不同的人才,其中一些人也参与了 FreeSWITCH 的工作。但与开源社区相比,我们的合作更加紧密,从而提高了沟通效率。
发现开源
主持人: 您最初接触开源的经历是怎样的?当时中国的开源环境如何?人们真正理解开源的概念吗?
Seven Du: 我第一次听说开源是在 1999 年,当时我还在上大学。我在《参考消息》上看到一篇文章,介绍了 Linux 和一个芬兰人创建的操作系统,这引起了我的兴趣。然后我买了一本关于 Linux 的书,如饥似渴地读了起来。书中详细介绍了理查德-斯托尔曼(Richard Stallman)、GNU、Linux 和 GPL。之后,我在网上阅读了许多学习资料,因此很早就开始了解开源。但当时我并没有参加任何社区活动,因为我周围没有人在讨论开源。
正如我前面提到的,最早关于 Linux 的中文资料大多来自台湾,而且是用繁体字写的。当然也有简体中文版本,但我记不太清了。我从当时读到的文章中记得,确实有人真正理解开源,尽管这样的人非常罕见。
然而,仅仅因为人们了解开源,并不能保证他们会遵守开源许可。我记得,若干年后,腾讯公司因违反许可证而被列入 FFmpeg 的 “耻辱名单”。他们在自己的 QQ 播放器中使用了 FFmpeg,却没有遵守开源许可,这在开源界引起了轩然大波。当时,腾讯还不像今天这样成功,他们最终解决了这个问题。近年来,中国公司和开发者开始为开源做出贡献,这也逐渐改变了国际开源社区对我们的看法。
至于当时的中国开源社区,我真的不能说太多,因为我对它一无所知。直到多年以后,我才知道张文松为 Linux 内核贡献了 LVS 代码,这成为一个众所周知的例子。当时,大多数人不是在使用开源软件,就是在吹嘘开源软件,但真正贡献代码的人却寥寥无几。当然,使用和推广也是一种贡献,所以整体氛围还是比较积极的。不久之后,网上开始出现许多开源论坛和中文学习资源,大多集中在 Linux 及其软件上。我对 Windows 上的开源软件知之甚少,这可能是因为我没有关注的缘故。不过,当时的 Wintel(Windows 和英特尔的结合)系统非常流行,因此有很多适用于 Windows 的免费软件,通常被称为共享软件,如 NetAnts(多线程下载管理器)和 Winamp(音乐播放器)。
2008 年左右,我参加了哲思 Linux 社区在清华大学举办的一次线下活动,在那里我见到了理查德-斯托尔曼(Richard Stallman),还收到了一本有他亲笔签名的书。但我忘了和他合影。理查德-斯托尔曼是自由软件运动的领袖,他愿意参加在中国举办的活动,说明这里有真正理解他的人。但斯托尔曼认为,开源软件并不等同于自由软件,两者有许多本质区别。
▮ 主持人: 您为什么决定创建 FreeSWITCH 中文社区?在建立社区的过程中遇到了哪些障碍?
Seven Du: 我们中国人以勤奋著称。我知道很多开源技术(如 Ruby 和 PostgreSQL)都有中文网站。我在为 LinuxFocus 做翻译时翻译了一些 SQLite 的文章,但不久之后,SQLite 就推出了自己的中文网站。当我开始学习 FreeSWITCH 时,还没有中文网站,所以我就建了一个。我觉得这样做是对的。
但这只是一个网站,而不是一个社区,当时应该搭配一个 BBS。然而,当 FreeSWITCH 中文社区在 2009 年建立时,互联网审查制度越来越严格。作为一个个人网站,要建立一个 BBS 几乎是不可能的,所以中文社区没有账号系统。后来,一位昵称为 “大熊 ”的网友创建了一个 QQ 群,大家可以在群里交流。
我曾在谷歌群组上创建了一个 FreeSWITCH 群组,但不幸的是,谷歌在 2010 年离开了中国。人们仍然可以通过邮件列表在 FreeSWITCH 群组中讨论问题,但参与者寥寥无几,很快就放弃了。
由于没有讨论板块,FreeSWITCH 中文网站基本上就是一个博客。当时,我正在写一本关于 FreeSWITCH 的书,首先是以系列博客的形式在网上发表。不料,有人未经我的许可,将其上传到百度文库(百度提供的中文文档共享平台)。这让我很不高兴,于是我向百度报告了此事,但百度置之不理。作为回应,我写了一篇批评百度的文章,后来被微博(相当于中国的 X)上一位有影响力的人转发。这篇文章引起了一些关注,结果百度文库删除了这篇文章。然而,这样做的后果是,我们网站的排名下降了,几个月内很难在百度上找到这些博文。
但就像野草一样,它又不断地长了回来。我的文章被贴到了各种网站上,包括百度文库,其中大部分甚至都没有链接到我的博客。除此以外,很多页面布局都乱七八糟,我根本没有力气一一上报。
尽管如此,我的第一本书《FreeSWITCH:权威指南》终于在 2014 年问世。直到现在,它仍然是学习 FreeSWITCH 的最佳指南。
▮ 主持人: 您多年来一直积极参与国际开源社区的活动,并多次参加 FreeSWITCH 的 ClueCon 活动,这让您有很多机会与全球开发人员交流。在你看来,国内外开源社区在文化和实践方面的主要差异是什么?
Seven Du: 国际社区普遍重视版权和开放源代码许可,但国内的情况并非如此。
国际开发者为开源项目贡献的代码比中国开发者多得多。就拿 FreeSWITCH 来说,除了我和我的团队之外,中国开发者几乎没有贡献。语言障碍确实是一个原因,但我认为这不是主要原因。
中国以外的人可能工作压力较小,有更多时间为开源项目做贡献,而这里的人往往忙于工作。有时,即使他们想做贡献,也做不到,他们的老板也不会允许,因为他们大多不了解开源。此外,许多大型科技公司缺乏促进贡献的机制,这进一步阻碍了开发人员的参与。近年来,在开源倡导者的努力下,中国的开源社区正在不断完善。政府也在加大支持力度,这似乎与开源的理念不符。但我仍然看不到 FreeSWITCH 有更多的中国贡献者,至少现在还没有。
受 ClueCon 的启发,我从 2012 年开始组织一年一度的 “FreeSWITCH 开发者沙龙”,每次都有 100 到 200 人参加。一直持续到今天。由于我们无法从中获利,所以必须寻求赞助商来支付费用。但是,当我们看到人们参加我们的活动时,我们就会有动力把它坚持下去。我也很喜欢和这些参与者聊天。
▮ 主持人: 在推动开源项目的过程中,与国际同行相比,中国开发者面临哪些具体挑战?您认为中国开发者应该采取哪些策略来缩小与全球社区的差距,提高他们在开源项目中的参与度和影响力?
Seven Du:首先是语言障碍。虽然大多数中国开发者都在学校学过英语,但要用英语写作,尤其是与国际开发者交流时,还是很有挑战性的,而要流利地说英语,更是难上加难。现在,随着各种人工智能工具的出现,这个问题可能会得到解决,但我还没有看到太大的进展。
沟通是另一个挑战。虽然许多中国开发人员技术高超,但他们不善于表达自己,也不善于与他人沟通。即使没有语言障碍,他们也不如国外的开发人员善于沟通。
其次是对开源的理解。虽然每天都在使用开源软件,但大多数开发人员要么不完全了解,要么缺乏了解的动力。
关于如何提高开源的参与度和影响力,我认为这不是简单的因果关系,而是一种互惠关系。提高开源的参与度肯定会带来更大的影响力,这实际上也是一项关键战略。因此,根本目标是让更多的人参与进来。
正如我之前提到的,你不必直接为版本库或文档做出贡献,也可以参与其中。翻译、推广、宣传开源,甚至只是使用开源软件,都可以算作贡献。至少,你是在以用户的身份做出贡献。有更多像你这样的用户,开源社区才能真正蓬勃发展。然而,要在全球范围内加强开源开发,仅靠这些还远远不够。要想真正产生影响,直接向资源库、文档做出贡献、更频繁地提交问题以及积极参与讨论都是必不可少的。
我曾与那些希望参与开源的人分享过这样的建议:找到你喜欢或经常使用的开源项目,查看它们的代码和文档,你很可能会在其中发现一些错别字。如果你发现了,提交一个拉取请求(PR),这通常很容易被合并。当然,如果您能发现并修复错误,那就更好了。从小事做起(不要低估小事的重要性),您就已经在参与国际交流与合作了。这种经历甚至比补丁本身更有价值。一旦迈出了第一步,一切都会变得容易起来。
我正是这样做的。除了参与 FreeSWITCH 讨论和修复 Bug 外,我还审查了几乎每一个提交。这不仅帮助我了解了 FreeSWITCH 的现状,还帮助我了解了它随着时间的推移而发生的演变。许多刚接触开源项目的开发人员往往很难找到起点。但是,如果从现在起转变方法,开始审查每一份 PR,关注提出的问题以及如何解决这些问题,就会很快了解项目,并知道在深入研究代码时应将重点放在哪里。你甚至可能为别人的 PR 提出更好的想法,甚至发现其中的错误。
参与开源项目的方式有很多,而且因人而异。但总的来说,关键是要有能力应对未来的挑战。例如,你可以提高自己的英语水平,尝试不使用人工智能工具进行交流;在交流中更加积极主动–从与国内开发者接触开始,然后扩展到国际开发者;当然,最重要的是提高对开源的认识,更多地参与中国开源社区的活动。如果可能的话,你可以逐步将你的影响力扩展到全球开源社区。
▮ 主持人: 开源商业化是一种可行的模式吗?它能否真正顶住市场压力?社区驱动的开源项目与公司主导的开源项目相比有何不同?你如何看待两者之间的差异?(例如,FreeSWITCH 就是开源项目商业化的一个有趣案例。) 在你自己的公司,你是如何平衡开源和商业化之间的关系的?
Seven Du: 开源和商业化密不可分!Linux 是历史上最成功的开源项目之一,但如果没有红帽、英特尔、谷歌、IBM、华为,甚至微软(还记得微软曾称开源为 “癌症”,后来又完全转变了立场吗?) – 它能变得这么大吗?志愿者的努力往往昙花一现,如果没有商业支持,这种模式就难以为继。
Linux 本身并没有商业化,但这并不妨碍它成为最成功的开源项目之一。社区主导型开源项目与公司主导型开源项目明显不同;Linux 太独特了,无法一一解释。社区主导的开源开发重视 “公平和公正”,但如果没有商业公司的支持,进展可能会很缓慢。这与中国的开放政策类似–自由市场会带来一系列问题,但我们需要发展,所以即使明知前路充满挑战,我们也要走这条路。无论是计划经济还是市场经济,只要能支持发展就是好的选择,历史证明我们的决定是正确的。同样,我认为开源和商业化是相辅相成的。
开源与商业化并不矛盾,自从理查德-斯托尔曼(Richard Stallman)发起自由软件运动以来就一直如此。两者的本质都是共享–如果你能获得源代码,你的用户也应该能获得,但这并不意味着人们不能从中赚钱。有些人曾经通过出售开源软件或源代码获利,但这种模式已经行不通了。当客户可以轻易获取源代码时,你的产品就失去了价值。开源软件的商业化就像其他商业活动一样。在互联网时代,许多曾经收费的产品或服务现在都免费了,但你仍然要以其他形式付费,比如观看广告或分享个人数据(消费习惯)。
FreeSWITCH 并不是一个完美的例子。它是一个开源项目,由一家小型商业公司 Signalwire 支持,该公司收购了 FreeSWITCH 背后的咨询公司 FreeSWITCH Solutions。商业咨询赚不了多少钱,但它帮助维持了 Signalwire 的整个商业生态系统,并取得了一些成功。事实上,对于一个开源项目来说,这已经是不小的成就了。
我不认为 FreeSWITCH 是开源商业化的完美范例,主要是因为它仍然是一家小型私营公司,而不是由开源基金会管理的项目。一般来说,由开源基金会管理或孵化的项目往往拥有完善的开发和决策管理系统,并在社区中得到更广泛的认可。
在许多项目逐渐消失的情况下,FreeSWITCH 从编写第一行代码开始,已经存活了 20 年。无论它是否成功实现了商业化,它的长寿本身就说明了问题。我们的团队一直致力于在 FreeSWITCH 的基础上实现商业化,提供各种商业产品和服务。说实话,我们做得并不出色,但自 2011 年以来,我们的大部分收入都来自 FreeSWITCH,我们度过了最艰难的时期。
在漫长的历史进程中,人类通过分工与合作极大地提高了生产力。同样,开源开发也通过共享代码提高了我们的生产力。尽管一波三折,但一切都在螺旋式上升。我坚信,从长远来看,开放源代码将被证明是一条正确的道路,尽管它必须面对许多障碍和偶尔的挫折。近年来,开源训练框架、大型语言模型和推理代码在推动人工智能快速发展方面发挥了关键作用。百度首席执行官李彦宏曾在2024年的一次人工智能大会上说:”开源模型越来越落后了。” 他当然没有预见到 DeepSeek 的成功。最近,百度采用了 DeepSeek 的 AI 模型,并宣布计划开源即将推出的 Ernie 4.5。这就像Linux最终取代Unix一样–如今还有多少商业Unix系统存在呢?
注
- Subor学习机是 20 世纪 90 年代流行的中国教育计算机。它是一种混合设备,既是教育工具,又是游戏机,配有键盘并与电视相连,用户可以通过屏幕上显示的游戏和程序与之互动。
- SMTH(水木清华论坛)是中国最著名的大学网络社区之一,起源于 20 世纪 90 年代的清华大学。它为学生和校友提供了一个讨论从学术到个人兴趣等广泛话题的平台,在塑造中国网络文化方面发挥了重要作用。
- 小灵通(PHS),在中国又称 “小灵通”,是 20 世纪 90 年代末和 21 世纪初在城市地区提供移动通信的一种无绳电话服务。在 3G 和智能手机兴起之前,它在中国广受欢迎,通话费用低廉,覆盖范围广。
- 在宽带普及之前,中国网民必须拨打 “163 ”才能上网。
在 2008 年与中国联通合并之前,中国网通(中国网络通信集团公司)是中国主要的电信公司之一。它在中国北方提供宽带互联网、固定电话服务和其他电信服务,以其大规模的基础设施和在中国互联网和电信网络发展中的作用而闻名。
访谈问题由 Barry Zhao 和 Ron Frederick 审核,访谈文章由 Alex Li 编辑。
本文文字及图片出自 Riding the Tech Wave: Seven Du’s Open Source Journey
你也许感兴趣的:
- 【程序员搞笑图片】你们干扰不了我写开源代码
- 【外评】哪些开源项目被广泛使用,但仅由少数人维护?
- 【外评】瑞士现在要求所有政府软件都必须开源
- 【外评】开源既不是社区,也不是民主
- Winamp 宣布将开放源代码
- 【外评】什么是开源贡献,什么不是开源贡献?
- 【译文】开放源代码与微软:新的反叛开始了
- 开源 Redis 的生命将就此终结?Redis 之父回应分叉浪潮:未来谁能领先,各凭本事!
- 开发者阵营分化,.NET 开源生态系统如何走向未来?
- 马斯克控告OpenAI违约、要求恢复开源;OpenAI否认三连
你对本文的反应是: