或者换句话说,除非你付钱给我,否则为何我要编写有用的软件?
近日 Java 生态系统一个至关重要的软件包 log4j2 曝出了一个严重的安全漏洞,对整个互联网构成了严重的威胁。一旦完全沦为了武器,该漏洞让攻击者就可以胁迫 Java 服务器执行从 LDAP(轻型目录访问协议)服务器获取的任意代码。
我认为这起事件是一个完美的缩影,揭露了“开源”软件方面存在的所有主要的生态系统问题。
对此我确实有几点想法要一吐为快,因为我认为 log4j2 是一个堪称完美的例子,表明了这方面面临的最糟糕的情况之一。与该问题有关的所有人都完全有理由声称自己提供有效的方案解决实际问题,但也在这个过程中造成了一个巨大的漏洞。
XKCD 漫画 Dependency
不妨考虑像在 Linux 内核上运行 SSH 服务器这么基本的事情。就这个组合而言,你将至少面对 10 家供应商(假设使用默认配置下的精简版 Alpine Linux 系统),这就意味着至少有 10 家独立的组织仍然需要用真金实银来支付账单,无论有多少数量的用户在使用它们免费赠送的软件。Alpine Linux 也是表明该问题的一个典例,因为它经常在 Docker 语境下使用,在实际的生产环境下为许多公司提供支持。你认为这些公司中有多少家资助 Alpine Linux 项目?你认为这些公司中有多少家甚至考虑过资助 Alpine Linux 项目?
我以前与别人探讨过此类话题,但令我感到惊讶的是,大家对这个观点有很大的抵抗力:确保真正让企业运转起来的零星自愿开发者能够支付房租。
现在盛行的是这种陋习:从开源社区那里获取利益,而不给予回馈。好像开发依赖项的那些人无关紧要。
一方面是由热情的开发人员维护开源软件,另一方面是一味获取而不给予的做法,形成了鲜明对比。
众所周知,GitHub 的星标(star)是无法用于支付租金。这方面的一个例子是闹得沸沸扬扬的 core-js 乌龙事件。
core-js 是一个 JavaScript 库,它为 JavaScript 的标准库提供了许多的核心原语(primitive),这些核心原语可以让你无需使用其他库。但这个库同样臭名昭著,原因是每当你在 CI 中安装它,就可以知道项目作者在寻找工作。你可能已经看到下面这个消息已有上千次了:
该项目的开发者因车辆过失杀人罪可能还在坐牢,也可能已经被释放出来。core-js 是 React 的一个依赖项。你们中又有多少人实际为这个项目捐过款?尤其是如果你平常使用 React?
现在我们不妨把目光转向 log4j2。该项目实际上在标准库中,供 Java 用户使用。这个库在现代 Java 中是如此地根深蒂固,以至于你会以为它的开发人员会资金充裕,除了那个库之外不需要专注于其他任何事情,是不是?
然后事实并非如此。
没有人付钱给 log4j2 的维护者!?
Apache 软件基金会官网有整整一页内容来描述“项目管理委员会”的职责。..... 却没有人付钱给他们?
从昨日起,开源社区需要成长起来。
Log4j 维护者一直在通宵达旦地开发缓解措施、修正版、文档、CVE、回复咨询及处理其他事务。可是没有什么阻止人们因为我们分文报酬未得的工作,因为我们都不喜欢却因向后兼容顾虑而需要维护的某项功能而炮轰我们。
这是修复了导致数至少百万美元损失的漏洞的维护者(Ralph Goers)。
我在业余时间开发维护 Log4j
始终梦想着能专职从事开源工作
(截图时)有 3 个赞助人资助@rgoers 的工作:Michael、Glenn 和 Matt
我现在是 Apache 软件基金会的成员,也是 Apache Commons、Apache Flume、Apache Logging Services 和 Apache Maven 的项目管理委员会(PMC)成员。我开发了 Apahe Log4j 2 的初始版本,继续把我的大部分精力投入在这方面上,以提供支持和改进,从而设法使 Apache Log4j 2 成为 Java 开发人员眼里最出色的日志框架。*
我目前有一份专职工作:软件架构师。我在业余时间开发 Log4j 及其他开源项目,因此我通常处理我最感兴趣的那些问题。我始终梦想着能全职从事开源工作,希望能得到您的支持,以便这个梦想成真。*
到昨天为止,Log4j 项目总共也就 3 个赞助商。没错,总共就 3 个。
到今天为止,这个数字现在增加到了 14 个,然而这不是借口。这个人获得的资金数量应该与使用 log4j2 在整个生态系统的重要程度相匹配。
这点不容置辩。这个人在业余时间出于爱好所搞的项目居然影响到半个互联网的运作。容易受到该问题影响的公司包括苹果、谷歌、我的手机运营商以及基本上在默认配置中使用 JavaEE 的每家公司。
如果 log4j2 关系到贵公司的成功,你在道义上就有义务向费力不讨好地创建这个库的人捐款。
我有一个朋友长期以来一直在费力不讨好地维护一家在线广播电台的技术堆栈。他受到了其用户不公正的对待。用户们会在小费罐中投入 5 美元,然后如果他没有扔下手头的所有工作、立马解决用户异常具体的问题,用户就会非常生气。他曾试图在一些地方找到工作,但每当对方老是试图逼他放弃维护自己的项目,他不得不拒绝这些工作。与此同时,收入来源减少的现象仍在继续。
这就是为什么我在下面这一点上很小心谨慎:如果没有任何可靠的方法让我可以为自己付出的努力获得报酬,我不轻易开发“有用”的软件,并将其发布给全世界。
我根本不想到头来落入这种境地:我出于热情作为一个副业项目开发的软件将许多人的公司紧密地联系在一起。这就是我开发软件以及把软件开发到何种程度的方式或原则。
没有冒犯他人之意,但我真的不想白白付出我的努力。现有的寄生虫文化将“开源”视为免费劳动力池,因而我很难想让自己的副业项目像 log4j2 那么真正有用,除非你付钱给我。
“如果你想让我为你开发有用的软件,那就付钱给我。”
如果你使用别人在业余时间开发的软件,觉得它很有用,那就付钱给他们。
这个观点应该不会有大的争议。这应该不是什么新鲜事。这应该已经是行业现状,我们软件正常运行所依赖的开源项目,眼看着那些开发者忍饥挨饿、乞求捐赠,确实很糟心。
联系客服