Erlang 开源 20 周年:这门编程语言见证了互联网的技术成长

语言: CN / TW / HK

Erlang 于 1998 年 12 月 8 日星期二以开源的形式发布。你还记得那个星期你在哪里吗?我在达拉斯(德克萨斯州);我多次访问爱立信美国分公司,帮助他们建立了一个从事 AXD301 交换机研发的 Erlang 团队。星期二早上醒来,我得到了这个消息。

这次发布平淡无奇。没有关于此次发布的公关活动,没有造势或媒体报道。有的只是一个简单的 erlang.org 网站 (使用 vi 手工编写)。一封电子邮件被发送到 Erlang 邮件列表 中,一篇文章登上了 slasdot 的头版,同时, comp.lang.functional 上也有提及(得益于 Joe 尽职尽责地跟进)。没有其他任何营销活动可以证明,爱立信发布了一个庞大的开源项目。那一周,我最感兴趣的不是 Erlang 的发布,而是去达拉斯市中心的一家夜总会看 Marky Ramone and the Intruders 乐队的演出。我几乎不知道 Erlang 开源会对科技行业、我的职业生涯以及我周围许多人的职业生涯产生什么样的影响。

走出爱立信

这一切是怎么发生的?出于各种原因,我们中的许多人希望 Erlang 以开源的形式发布。我在爱立信的一些同事想离开目前的职位,但仍在用被他们视为银弹的东西开发产品。其他人则希望把用于构建具有容错性和可扩展性的系统的高级工具提供给大众,让世界更美好。对爱立信管理层来说,Erlang 更广泛地采用将意味着有一个更大的人才池供他们招聘人才。

Jane Walerud 和我们一起试图将 Erlang 推广到爱立信之外的公司,她是当时少数懂得如何与管理层沟通的人之一;她明白,销售编程语言的时代已经结束了。爱立信软件架构实验室负责人 Hakan Millroth 建议尝试这个叫做“开源”的新事物。Jane 带着论文 The Cathedral and the Bazaar 的早期版本,说服爱立信的管理层发布 Erlang VM、标准库的源代码和 OTP 的部分源代码。

在 Erlang 被放出来之前,许多人都不相信这会发生。人们担心,在最后一刻,爱立信会把这个主意全盘否定。开源,这个几个月前刚出现的术语是一个大公司都不知道该如何应对的奇怪而可怕的新怪物。对于进入未知领域,爱立信当然会有许多担忧。坊间传说,为了降低 Erlang 无法发布的风险,我们的朋友,当时在新西兰奥塔哥大学工作 Richard O’Keefe 前来增援。东部的午夜来得更早一些,所以新西兰午夜的钟声一响,erlang.org 网站就已经上线几分钟了。刚好足够确保匿名用户下载完第一个 Erlang 发行版。当确认下载完成后,网站再次下线,12 小时后,在瑞典时间的午夜再次上线。我在达拉斯,睡得很熟,所以我既不能确认也不能否认这一切是否真的发生过。但就像每一个传说一样,我确信它的背后有一点真相。

互联网泡沫时代

在最初的几年里,采用进展缓慢。尽管如此,Kenneth Lundin 领导的 OTP 团队仍在努力地工作。1999 年 5 月,经 Bjorn Gustavsson 重构的 BEAM VM (Bogdan 的 Erlang 抽象机)正式取代了 JAM (Joe 的抽象机)。Joe 早在一年前就离开了爱立信,BEAM 虽然速度更快,但仍需要这么长一段时间才能生产就绪。

每当我们新发现一家使用 Erlang/OTP 的公司时,我都会感到兴奋。瑞典电话公司 Telia 正在研究一个呼叫中心解决方案。英国移动运营商 One2One 最初将其用于增值服务,然后将其应用范围扩大至核心网络。巴黎的 IdealX 首先在消息传递和 XMPP 中进行了尝试。芝加哥的 Vail System 和多伦多的 Motivity 将其用于自动拨号软件。当然,Bluetail 也有许多产品帮助互联网服务提供商实现可伸缩性和弹性。

Erlang 在爱立信核心产品中的使用继续扩大。与此同时,我在 1999 年搬到伦敦,在那里,我越来越多地遇到爱立信内部对 Erlang 专业知识的需求。Erlang Solutions 诞生了。公司成立不到一年,我的客户就遍及瑞典、挪威、澳大利亚、爱尔兰、法国、美国,当然还有英国。2000 年,我们有了第一个非爱立信客户;IdealX 在巴黎的培训、指导和代码审查。

Alteon Web Systems 以 1.52 亿美元收购了 Bluetail(几天后,Alteon 被 Nortel 收购),这在 Erlang 社区引发了第一波反响。爱立信的一个竞争对手正在开发 Erlang 产品!大量有资金的成功企业家参与了许多其他创业公司,其中包括 Synapse、Klarna 和 Tail-f。

在 Bluetail 取得成功之后不久,互联网泡沫破裂了,整个行业进入了生存模式,然后是复苏模式。然而,此次泡沫破裂并未影响那些全力以赴的学者。2002 年,查默斯大学的 John Hughes 教授使 Erlang 研讨会成功获得了 SIGPLAN 和 ACM 认证。我们真的不知道这一切意味着什么,但我们仍然感到非常自豪。匹兹堡(宾夕法尼亚州)的 ACM SIGPLAN Erlang 研讨会是第一个获得认证的研讨会。在这里,来自乌普萨拉大学的博士生 Richard Carlsson 向世界展示了 Erlang 版本的 try-catch。

在 2004 年 9 月,乌普萨拉大学的 Kostis Sagonas 在雪鸟(犹他州)主持了 ACM SIGPLAN Erlang 研讨会的闪电秀,第一次公开演示了 Dialyzer。他在南非 Teba 银行的一个代码库上运行了它。这是他和他的学生向 Erlang 生态系统贡献的许多令人大为惊奇的工具中的第一个。

在很长一段时间里,Erlang 被世界各地许多大学用于计算机科学各方面的教学。这反过来又催生了研究、硕士论文和博士项目。研讨会提供了一个论坛,让学者们发表他们的成果,并与工业伙伴进行验证。erlang.org 站点的下载次数不断增加,采用率也在增加。

2003 年,哥德堡 IT 大学的项目经理 Thomas Arts 邀请我给他的本科班教授 Erlang 课程。虽然 John Hughes 教授已经具备了 Erlang 的相关知识,但是他想向在生产中使用过 Erlang 的人学习这门语言,所以他也加入了这个班。一天早上,他上课累了,他刚刚熬了一整夜。他开发了 Erlang QuickCheck 的第一个版本,并用它非常认真地测试课程练习。这是 Quviq 也就是 QuickCheck 商业版的开端。这是一款一流的基于属性的测试工具。最终,我在 IT 大学教了 10 年书,有 700 多名学生参加了这个课程。

进入消息传递领域

在网络泡沫破裂期间,Alexey Shchepin 开始开发一个基于 XMPP 协议的即时消息服务器,名为 Ejabberd。经过三年的研发,他在 2005 年 12 月 1 日发布了第一个版本。Facebook Chat 生成了它的一个分支,向 7000 万用户推出了一项聊天服务。大约是在相同的时间,Brian Acton 和 Jan Koum 创建了 WhatsApp,也是基于 Ejabberd 的一个分支。那会儿,创建 Ejabberd 的分支很热门,MongooseIM 做了同样的事,成为一个通用大型信息平台的解决方案。

2006 年 5 月,RabbitMQ 诞生了,因为我们发现一种新的发布 / 订阅消息传递标准 AMQP 正在定义和实现当中。现在,RabbitMQ 已经成为数万个系统的基础。到本世纪末,Erlang 已经成为许多消息传递解决方案的首选语言。

多核年代

在互联网复苏期间,不仅仅是大学进行了创新。2005 年 5 月,OTP 团队发布了 BEAM VM 的多核版本,证明 Erlang 的并发编程模型是未来多核体系结构的理想选择。大多数兴奋来自 Erlang 的邮件列表,因为没有多少人意识到免费午餐时代已经结束。我们使用 Ejabberd,仅仅通过将其编译到 Erlang 的最新版本,在四核机器上运行时,其吞吐量就增加了 280%。

2007 年 5 月,拍摄于 1991 年的影片 Erlang the Movie 的原声带从爱立信保险箱里的一盘 VHS 录像带中被匿名泄露,并被放到了 erlang.org 网站上,最终传到了 YouTube 上。目前还没有人公开对这一行为负责。然而,这个世界终于明白了,那些仍然在爱立信 NDA 工作的人所感受到的宽慰:影片中出现的计算机科学家中,没有一个放弃了自己的日常工作,转而投身演艺事业。2013 年,一名潮人试图让 Erlang 看起来更炫酷,这部电影有了一部 续集 。这一次,发布者的身份被确认为芝加哥居民 Garrett Smith

2007 年,Joe Armstrong 的《Erlang 编程》由 The Pragmatic Programmers 出版。第二年,2008 年 6 月,我拿到了《Erlang 编程》的第一份纸质副本;这是我和 Simon Thompson 花了 18 个月的时间写的一本书。当时,O’Reilly 的一本书是新兴编程语言获得认可所需的印章,为许多语言的其他许多精彩而多样的图书开辟了道路。

新书发布会与 2008 年 6 月在伦敦举行的第一届商业性 Erlang 大会 Erlang eXchange 同时举行。这并不是第一次,因为爱立信计算机科学实验室前负责人 Bjarne Dacker 在斯德哥尔摩主持每年一度的 Erlang 用户大会已经将近十年了。但是,瑞典的 11 月很冷,征服世界的时候到了。Erlang eXchange 让位给第一届 Erlang Factory,后者于 2009 年 3 月在加州帕洛阿尔托举行。一个同样美丽但更具异国情调的地方。

欧洲 Erlang 社区首次与美国同行见面。正如你所想象的那样,我们一见如故。在大会上,Tony Arcieri 展示了 Reia ,这是在 BEAM 上运行的 Ruby 版的 Erlang。谁说类似 Ruby 的语法是一个坏主意?那一年的其他演讲者和与会者都是科技界的企业家和领导者,他们的职业生涯都非常出色。

当时,美国有一个名为 Tom Preston Werner 的 Erlang 用户。他使用它来扩展一个名为 GitHub 的社交编程公司的 Ruby 前端。2009 年 11 月,在斯德哥尔摩参加 Erlang 用户大会时,我向 OTP 团队介绍了他和 Scott Chacon。他们一起度过了一个下午,促使 OTP 团队将 Erlang 的开发转移到 GitHub,使其成为他们的主存储库。

会议遍布世界各地。活动已经在阿姆斯特丹、班加罗尔、柏林、布宜诺斯艾利斯、布鲁塞尔、芝加哥(许多地方我都不认识)、中国、克拉科夫、洛杉矶、巴黎、莫斯科、墨西哥城、米兰、慕尼黑、纽约、罗马、旧金山、圣安德鲁斯、特拉维夫、温哥华、华盛顿特区和许多许多其他地方举行。

卡布其诺年代

2010 年,我在牛津大学教授我的第一门研究生课程。Erlang 被选为面向并发的编程课程。也是在这一年,Bruce Tate 的《七周七语言》问世。正是通过这本书,Rails 的核心提交者之一 Jose Valim 认识到,Erlang 在并发性竞赛中领先于所有人,因为它还改进了发行版。

2011 年 1 月,Elixir 库出现首次提交。其成果于次年在克拉科夫 Erlang Factory 大会上公布,并于 2014 年 9 月发布了 1.0 版本。像所有成功的语言一样,它试图解决一个问题,即把 Erlang 的力量带给更广泛的社区,而 Web 是起点。

恰逢其时。2012 年 1 月,WhatsApp 宣布,通过修改 FreeBSD 和 BEAM,他们在一个虚拟机和主机上实现了 200 万个 TCP/IP 连接。他们的目标是降低运营成本,在尽可能少的硬件上运行可伸缩的服务。这些结果适用于许多垂直领域,Web 就是其中之一。

就在 WhatsApp 发布该消息的同一个月,一些公司汇集了知识、时间和资源,创建了“工业企业 Erlang 用户组(Industrial Erlang User Group)”。他们与爱立信合作,将 Erlang 从开源 Mozilla 公共许可协议的派生版本转移到 Apache 许可协议,为“脏调度器(dirty scheduler)”做贡献,推出 Bug 跟踪工具,资助建立了一个新的 erlang.org 网站,发布了 Erlang Central,并共同致力于建立一个基金会。

Elixir 成熟

2014 年 7 月,Jim Freeze 在德克萨斯州奥斯汀市组织了第一届 Elixir 大会。参会者有 106 名,其中包括主讲人 Dave Thomas 的小狗。Chris Mccord 介绍了浴火重生的 Phoenix。Robert Virding 和我是这个团队的成员,我清楚地记得我想说的话:不要因为你了解 Ruby,就不相信他们“Elixir 很容易学习”的说法。你的挑战是并发思维。

Elixir 背后的主要思想是并发,知道如何处理并发对项目的成功至关重要。一年后,2015 年 8 月,Phoenix 1.0 发布。它与 Rails 对 Ruby 的影响相同,将人们带到了 Elixir。现在,你可以使用并发编程而不需要掌握它了!不久之后,Nerves 出现了,使得 Elixir 不再仅仅是一种 Web 语言。

在 Elixir 大会上,我谈到了与 Steve Vinoski 合著的一本书,即《高伸缩性系统:Erlang/OTP 大型分布式容错设计》。当时,它还是 Beta 版。我一点也不知道,我不得不等到 2016 年 6 月才拿到一份纸质副本。最后四章本应是一本独立的书,最终花了一年半才写成。别人写书的主要经验是,如果你的伴侣告诉你“你将成为一个父亲”,那么你有 8 个月的时间来完成这本书。另一种情况则是像我一样,在第二个孩子出生前的几天还在参加发布庆祝会。这本书是献给 Alison、Peter 和我们的“孕宝宝”。7 月初,“孕宝宝”诞生了,这证明了一句 Erlang 谚语:“只有当你有了第二个孩子,你才能真正理解并发。”

Erlang 生态系统

2016 年,Elixir 的使用持续增长。关于 Lisp Flavoured Erlang 和 Effene(BEAM 上的另两种语言)的大会演讲表明,它们的代码已经在生产环境中运行。新的试验性移植不断地出现在我们的雷达上;语言的时代结束了。正如.NET 包含 C#、F#、Visual Basic 等语言,而 JVM 生态系统则包含 Java、Scala、Clojure、Groovy 等等。Erlang 和 BEAM 也发生了同样的事情,这使得 Bruce Tate 提出了 Erlang 生态系统这个术语。

Alpaca、Clojerl、Efene、Elixir、Elm-beam、Erlog、Erlua、Fez、Joxa、Lisp Flavoured Erlang 和 Reia,与 Erlang 和 Elixir 一起,开启了一个跨语言交互与协作的时代。在一起,我们更强大,我们可以不断进化!

2018 年 12 月,Erlang 生态系统基金会的全部文件提交完成,一个以培育生态系统为目标的非营利组织成立了。随着我们对互操作性、通用工具和库的改进,我期待更多的 BEAM 语言得到普及。随着可伸缩和容错系统需求的增加,Erlang 的结构和语义对生态系统内外的新语言的影响也在增加。我希望,随着新一代科技领袖和企业家们展翅翱翔,这将为未来 20 年设定方向。

未来展望

2018 年,在提出 Erlang 生态系统(以前称为 Erlang 用户大会)的 Code BEAM 斯德哥尔摩大会上,来自思科的 Johan Bevemyr 宣布,他们每年交付 200 万台运行 Erlang 应用程序的设备。这让观众大吃一惊,因为这意味着 90% 的互联网流量都通过由 Erlang 控制的路由器和交换机。Erlang 支撑着爱立信 GPRS、3G、4G/LTE 网络,如果最近的招聘广告可以作为参考的话,还有他们的 5G 网络,以及用于物联网基础设施的 MQTT 代理 VerneMQ 和 EMQ(最流行的 AMQP 代理)。Erlang 不仅支撑着互联网和移动数据网络,还是成千上万的分布式容错系统的骨干。每天通过其金融交换机的交易金额达数十亿美元,通过其消息传递解决方案的消息更多。这可不是编出来的!

这些只是我个人过去 20 年中看到的一些亮点。所有这一切让我们意识到,我们的工作还远远没有完成。1995 年,Joe Armstrong 告诉我,Erlang 不会永远存在。有一天,他说,更好的东西将会出现。时间快进到 2018 年 12 月,我仍然怀着开放的心态等待着那个预言成真。无论如何,Erlang 无疑会对它产生重大的影响。

非常感谢 Joe、Mike 和 Robert 打通了第一个电话,也非常感谢 Bjarne 的推动。Jane 喊了一声,使它走出爱立信,保证了它的生存。你们都开创了一项事业,使我能够与那些令人惊叹、才华横溢的人们碰面,与他们一起工作和学习,并使用我们都热爱的技术。它为我们提供了一个平台,使我们中的许多人能够推动未来 20 年(至少)的创新!

查看英文原文: Twenty Years of Open Source Erlang

分享到: