开源软件和OpenSSL的真实故事到底是什么样的?

摘要

去年发生的心脏流血事件让 OpenSSL 引发了外界关注,而中国公司的公开捐助也让这个开源项目在国内为人所知。关于这个项目背后的历史到底是怎样的呢?

编者注:本文转自霍炬的微信公共帐号「歪理邪说」(微信号:wxieshuo) ,经原作者同意转载,文章内容有所改动。阅读原文请点击这里


我想聊聊开源软件的模式和 OpenSSL 存在的问题,以及到底谁在捍卫我们的隐私。我也会写到在「心脏出血」这个漏洞从发现到公布的过程中,惊心动魄和争分夺秒的故事,这个过程暴露出 OpenSSL 严重的管理问题,

先从开源说起。

开源是一种商业模式

开源组织并不是没有捐款就没法生存的组织。开源和免费一样,是一种商业模式,他们之间有诸多不同,但有一个基本的相同点,就是都希望尽量多的人免费使用它。大家已经免费使用了很多互联网服务,对于免费模式应该非常理解,我们从未给 Google 付款,从未为我们每一次搜索买单。但我们搜索的行为,我们的注意力、数据,都会变成 Google 的广告收入。我们每一次使用 Google 搜索,都是在帮助 Google 赚钱,尽管没直接付钱给他们。

开源软件也是如此。开源软件的世界是激烈竞争的,任何一个组织,都可以从当前代码分支一份继续开发新的版本,这个行为叫做 Fork。一个开源组织要想生存下去,最重要的基础就是普遍被使用,不然很快就会被竞争者替代。一个软件被普遍被使用之后,就会因此衍生出相关服务,团队可以通过这些服务获得比较好的收入,商业模式就成型了。最著名的例子应该算是 Red Hat Linux,中文叫做红帽,他们免费提供 Linux 发行版,企业可以通过付费订阅获得技术支持,他们收入相当不错,现在已经是一家市值 100 多亿美金的上市公司。

OpenSSL 采用的也是同样的开源和服务收费的方式运转,OpenSSL 基金会的负责人 Steve 说他们最多一年有将近 100 万美金的商业咨询项目(资金来源是美国国防部和美国国土安全部),这已经是相当不错的状况。开源软件的全职工作人员都不会太多,大部分项目的核心贡献者同时也都会承担商业性项目,这是很正常的情况。在开源社区中,像 Linux 创始人 Linus 这样全职为开源项目工作的程序员,反而不是普遍现象,Linus 得以这么做,一方面是 Linux 基金会财力丰厚,另外一方面也是因为 Linux 衍生项目太多,影响力也太大,Linus 本身又是精神领袖,他不得不全职为 Linux 工作,同时从事商业服务和开源项目。

再来个例子,最好的开源 UNIX 操作系统 FreeBSD,其核心开发者 Poul-Henning Kamp(社区内叫他 phk)到今天仍然承担商业性项目。即使从 1994 年到现在,他的一直在 FreeBSD 代码贡献的排行榜上排第一,也仍然不是 FreeBSD 基金会的全职员工,他对自己的描述是「自雇」。phk 在自己主页上公开了最近正在做的一个商业项目,报酬每月 3000 美金。以 OpenSSL 的项目规模,有一个全职开发者已经是相当不错的状况了。

为什么有这么多人会放弃传统的卖软件的方式,转向免费软件和开源软件?除了个人兴趣和理想之外,开源软件是一个成熟可靠的商业模式,这个商业模式有自己的收入方式和生态。任何一个用户,只要在使用 OpenSSL,就是在帮助这个组织获得市场份额,在竞争中获得更大优势,无论有没有直接捐款给他们,用户都已经做出了贡献。

为什么 OpenSSL 之前只能收到很少捐款?——基金会、捐赠和募资

虽然开源组织可以通过商业服务来让自己生存的不错,但是一般也都很愿意接受捐款。有足够的捐款,可以少做一些商业项目,把精力往开源软件方面倾斜一些,这当然是好事。大部分软件和 IT 企业,每年都有不小的一笔钱用来支持开源项目们,同时也争取自己在开源社区的影响力和发言权,开源组织们每年接受的捐款按照各自项目状况,都不算少。但为什么一年前,OpenSSL 这个项目每年只能收到几千美金的捐款呢?答案很简单,因为他们从来没有搞过募捐活动。

开源组织通常会设立一个注册为非盈利机构的基金会,通过这个基金会募集资金、组织活动、推广自己的开源产品,视项目情况给专职或者兼职开发者付报酬,其中募集资金是基金会相当重要的工作。如果经常使用维基百科的用户,应该会有印象。维基百科每年都有一个固定时段,会在网站上放置非常明显的筹资通告,设定好本年度预算目标,让大家捐款。达到数额之后,捐款就停止,不再接受更多。几乎所有开源组织,都会通过这种方式募集捐赠。

OpenSSL 基金会从来没公开募集过资金,如果没有捐款目标,没公开募捐,就很难有成批的捐款进入,毕竟,需要资金的项目实在太多了。对于 OpenSSL 这种项目,募资相当容易,他们只需公开发一份筹款通知,各大企业的钱就可以立刻到手。当「心脏出血」发生之后,诸多企业惊讶的不是只有一个全职开发者这件事,而是,为什么你们一直没筹款。OpenSSL 从来没公布过自己的财务状况,没有设置过募款目标,这让人们如何去捐款给他?

更有意思的是,OpenSSL 基金会并没有注册为非盈利机构,而是一个盈利性企业。捐助 OpenSSL 的人和企业无法从美国政府获得减税。按照他们自己的说法,是他们没有时间维护一个非盈利组织,这不是个好理由。对于一个开源项目,注册一个非盈利组织比注册公司难不了多少,再说,基金会之所以成立,不就是为了去做这些事吗?盈利性企业已经定义了他们是希望靠商业活动获得收入,而不是靠捐款生存。捐款给盈利性企业,钱的利用率就会变低很多,按照美国税法粗算,最多的情况下要多交出 30%~40% 的税,是巨大的浪费。这也解释了为什么美国企业很少捐款给 OpenSSL 基金会。

不过,就算如此,事情也是在快速好转的。「心脏出血」事件之后,Linux 基金会在极短的时间内就成立了核心基础架构联盟(CII, Core Infrastructure Initiative),这个联盟和以往最大的区别是,他们主动挑选缺乏资金的重要开源项目进行资助,无论对方是否募款,OpenSSL 是他们资助的第一个项目。这个联盟集结了世界各国的科技企业共同出资,其中包括了 Google、Amazon、Facebook、思科、富士、惠普、IBM…目前已经有了 10 多家企业。其中中国企业只有一家,是华为。特别值得一提的是,除了给 CII 出资,华为也单独资助了 OpenSSL 基金会每年 5 万美金。参加 CII 联盟的企业每年出至少 10 万美金,按照 2014 年的数字,CII 每年总共有 170 万美金基金可以使用,第一期资金主要用来资助 OpenSSL 和 OpenSSH,资金相当富裕。

上面这些事情都发生在去年 5 月,也就是「心脏出血」事件之后的一个多月时间里。无论是各大科技企业,还是 Linux 基金会,他们的行动都非常迅速,这是开源世界的做事方式和效率。到去年 5 月,OpenSSL 的资金问题就算解决了。从这个结果看,之前 OpenSSL 没有得到足够捐款的直接原因就是其基金会失职。

做为对比,再看看去年 OpenBSD 募款的经历。OpenBSD 是最关注安全的开源 Unix 操作系统,他们同时也是 OpenSSH 的维护者(看到 SS 是不是觉得和加密也有关系?没错,这也是一种加密工具,只不过不是给客户用的,是给服务器管理者和程序员用的),去年的募款目标仅仅是 15 万加币。相比起来,170 万美金实在已经是太多了,如果 CII 给的钱不够让 OpenSSL 变好,恐怕再多的钱也不会好了。

除了直接捐钱,各大企业支持开源项目的方式还有很多,比如捐献自己员工的时间。任何一个开源项目中,都有来自各大公司工程师的贡献,这些公司给自己员工发薪水,他们写的代码会回馈给开源项目,比起捐款,这是更直接的支持。比如去年发现「心脏出血」漏洞的工程师,是 Google 员工,他在上班时间全职对 OpenSSL 代码做安全审计,找到了这个 Bug。他确实不是 OpenSSL 基金会的直接雇员,但这份由 Google 买单的全职劳动成果是贡献给了 OpenSSL 项目的,说所有大公司都没支持过这个项目,未免太不公平。

说到这里,再说说捐款问题。钱是非常宝贵的资源,需要用钱的地方太多了,正确的捐款是在捐款者对项目的充分了解后,基于对其价值观和方向认同,按照自己的愿望进行长期而小额的固定捐助。在这个过程中,税务问题也是必须要考虑的,这直接决定了资金利用率,比如美国税务居民,捐赠给 OpenSSL,资金的利用率就很低,而捐款给 CII 再由他们资助 OpenSSL,就可以得到一部分免税,利用率高了很多,如果是加拿大税务居民,想对操作系统方面的项目捐款,应该首选 OpenBSD,因为它是加拿大注册的非盈利组织。捐款是一个非常理性的行为,隐藏部分信息,利用人们对开源项目的不了解,煽情,制造愧疚感,这是不可持续的,也是不公平的。

OpenSSL 的问题和未来

Theo de Raadt 是 OpenBSD 项目的创始人,他可是操作系统领域最好的计算机科学家之一,他曾批评 OpenSSL 的代码「令人作呕」。

OpenBSD 开发者们并没止步于批评,而是立刻决定从当前 OpenSSL 版本创建一个叫做 LibreSSL 的独立项目,从清理 OpenSSL 的代码重新开始。他们在第一周就删除了 9 万多行代码,OpenSSL 整个项目只有 38 万行,相当于删减了近 1/4 的代码。可见 Theo 的批评并不是顺口胡说。几年来,OpenSSL 出过各种漏洞,在「心脏出血「之后,仍然有隐藏了 10 年以上的漏洞被发现,很多熟悉这个项目的人看法都是「除了重写别无办法」。

OpenBSD 有一份文档说明了他们在清理过程中遇到的问题,去掉其中的技术细节,我把主要观点列在这里,这些也基本是业内主流看法:

  • OpenSSL 的代码混乱不堪,难以阅读。开源软件一般通过让更多人看到代码来发现 bug,如果代码难以阅读,这个办法就失效了;
  • 他们使用了大量自己的代码封装和编程风格,这些代码有的有 bug,有的不符合现代主流做法。这让常见的检测工具没法应用于他们的项目,更难以发现 Bug;
  • 他们的开发者更关心增加功能,而不是维护和修补;
  • 其他开发者提供的修改和贡献,一般不会被合并到最终代码里;
  • 很多用户指出的 Bug,包括一些相当严重的,公开放在追踪系统里面长达几年,没被修补;
  • 其中存留了大量无用的旧代码,比如给 windows 2000 之前的 16 位系统写的兼容代码,仍然包含在最新版本的 OpenSSL 中。

基于以上原因,OpenBSD 认为这个项目已经没法维护了,必须要重新开始。这就是他们创建一个分支,从清理代码这种基础工作开始的原因。可见,这个项目根本不是钱的问题,而是管理方式和社区文化有问题。比起来其他项目,他们在有一个全职开发者和一个全职基金会主席的情况下还能响应如此缓慢,实在更令人沮丧。顺便说一句,做清理代码这件事的 OpenBSD 开发者,也不是全职工作,他还在这份文档前面特别注明了「可以被雇佣」。一年之后的今天,LibreSSL 已经基本算可用了,除了清理和改变了原有代码风格,他们也增加了一些更先进的特性,看起来很有前途。另外,这个项目也很需要捐款,如果更认同他们的做法,可以捐款给他们。

除此之外,OpenSSL 公布「心脏出血「漏洞的过程也非常有问题。一般出现严重漏洞的流程,是先不对公众公布,立即通知主流操作系统维护者和相关厂商,让大家先修改,之后一起发布安全公告和升级。之所以这样做,是因为如果操作系统不去打补丁,很多普通用户知道漏洞也没办法修补,反而让黑客们更容易利用这些漏洞。OpenSSL 不是这么做的,在 Google 告知了他们漏洞之后,OpenSSL 没有告知任何一家操作系统厂商,反而奇怪的被几家主要 CDN 厂商知道了,也就是说,在不知道哪个环节发生了泄密。之后开源社区中开始有关于这个重大 Bug 的传言,直到这个时候,几大操作系统仍然没得到正式通知。又过了 3 天,OpenSSL 才告知了 Red Hat,当天,参与处理这件事的一位 Red Hat 员工在一个私密邮件组里面把这个消息分享给了 SuSE/Debian/FreeBSD 等几个重要操作系统相关负责人。

多亏了他,因为此时 OpenSSL 仍然表示没有任何细节提供,这是加州湾区的太平洋时间 4 月 6 日晚上,从 Red Hat 得到具体细节的几大操作系统,连夜开始忙着打补丁,到这个时候,Red Hat 提供的消息是 OpenSSL 将在 9 号,也就是 3 天之后公开这个漏洞。可惜,转天,4 月 7 日一大早,OpenSSL 就直接发布了公告,媒体们知道了,全世界都知道了。如果没有 Red Hat 提前放的消息,最后的影响恐怕还会大的多,就算如此,因为时差的原因(Red Hat 那位员工在印度),很多在他夜里睡觉之后的邮件没来得及回复,仍然有很多厂商没能提前得知细节。关键厂商对于如此重大的漏洞比媒体知道消息还晚,近年来恐怕这是第一次。这造成了不少损失,比如加拿大国税局 CRA 在漏洞被公开之后发现数据被盗,此时已经来不及打补丁了,所以干脆直接把电子报税系统关掉了,当时是 4 月 9 号,加拿大 2014 年的报税截至日期是 4 月 30 日,正是电子报税系统最繁忙的日子,其间的尴尬可想而知。整个过程的时间线,在 theage 的一篇文章有完整记载,我列在最后,供参考。

针对这个反常的流程,社区中有不少阴谋论的看法,我不转述这些看法,我只是想说,这是另外一个证据证明 OpenSSL 有严重的管理问题,而不是钱的问题,人们说他们把事情做的一团混乱绝对不是没理由的指责。

另外,OpenSSL 并不是凭空出现的项目,而是继承了另一个项目 SSLeay 的代码。在 SSLeay 的开发者去 RSA 公司工作,不能继续这个开源项目之后,有好几个项目继承了它的代码继续开发,OpenSSL 只是其中比较成功的一个。维基百科上列出了 SSL 库的实现,包括 OpenSSL,现在还在使用的也有 10 多个,其中开源的占了将近一半。

这也是我不赞成吹捧 OpenSSL 的原因,历史的选择往往存在偶然,具体到 SSL 软件上,就更复杂,这是混合了技术,商业,历史,政治复杂因素之后的偶然结果。现在 OpenSSL 暂时有最多的用户,以后则未必会如此,我相信,早晚会有一个新的替代者出现。

谁是真正的人类隐私捍卫者?——电子前线基金会的故事

事实上,OpenSSL 只是同类众多加密软件中的一个。今天,我们可以不知不觉获得加密软件的保护,背后有一些曲折的故事,那是真正的隐私捍卫者的故事。

曾经,加密技术是被美国政府禁止出口的,就像很多武器禁止出口一样,其他国家的人,想要使用这些加密算法,就像要从美国买导弹一样,是不可能的。转机发生在 1995 年,这一年,加州伯克利大学的研究生 Bernstein 在一个叫做电子前线基金会的律师帮助下,起诉美国政府。他的主张是自由发表加密算法,属于言论自由的一部分,从而受美国宪法第一修正案保护,史称 Bernstein v. United States。这个案子进行了 4 年,到 1999 年,美国联邦第九巡回上诉法院出了判决,依据第一修正案,判决美国政府禁止公开密码算法违宪。在这之后,各种密码协议和开源算法才从美国流传出来,被自由使用。

电子前线基金会 EFF(Electronic Frontier Foundation),创建于 1990 年,是一个法律援助组织,他们的使命是捍卫隐私,自由表达和公民权利。这也是一个基金会,而且是一个完全靠捐款运作的非盈利组织。EFF 创始人之一是 Lotus 公司创始人卡普尔,曾经是和比尔盖茨齐名的软件天才。80 年代,Lotus 是最大的独立软件公司,几年之后微软才超过它。卡普尔是一个极具前瞻精神的奇才,1990 年,卡普尔意识到未来技术、隐私、法律和政治的冲突,自己出资创建了 EFF,后来的资助者中还有著名的苹果联合创始人沃兹。当时,商业互联网尚未成型,可见他们前瞻性之强。关于 EFF 的传奇故事可以写很多篇文章,这里我们先说和 OpenSSL 有关的部分。

曾经浏览器的领导者 Netscape,于 1995 年开发了第一个 SSL 协议。SSLeay 也在 1995 年完成了第一个实现,1998 年 SSLeay 中止开发,由社区接手。直到 1999 年美国政府败诉,加密技术终于可以自由流通。这才是人类隐私保护工程的历史脉络。在这个复杂的故事里面,OpenSSL 是受益者之一,也是整个故事中的一小段。

EFF 及其创始人卡普尔,是真正的理想主义者,他们没有商业收入,自己掏钱,做这一件事做了 25 年之久,通过一个又一个的诉讼案和对隐私相关案件的法律援助,他们成功推动了社会进步。这才是互联网时代真正的隐私的捍卫者。


相关资料:

最新文章

极客公园

用极客视角,追踪你不可错过的科技圈.

极客之选

新鲜、有趣的硬件产品,第一时间为你呈现。

张鹏科技商业观察

聊科技,谈商业。