“我期望的未来是能够在共同的项目上进行全球合作,能够在未来找到一种不受语言、时区、政治等障碍影响的方法,共同协作。”2022年,CSDN《新程序员》采访了 Apache 之父 & OpenSSF 基金会总经理 Brian Behlendorf,这句话正是他在最后吐露的最真挚且崇高的开源理想。
时过境迁,Brian 现在已经是 OpenSSF 基金会的首席技术官,他带领基金会成为了连接一百家企业的庞大组织,将安全的保护散步开源领域的每一处,预防下一次“Log4j2危机”爆发。在他的“排兵布阵”下,分布在世界各地的 OpenSSF 工作组各司其职,不同国家、不同时区、不同公司的人达成共识,贯彻开源精神实现着全球化的安全治理。
(资料图片)
时间同样改变了全球最热切的话题,ChatGPT 的问世让 AI 席卷各大领域,吸引了包括科技巨头、企业领袖和创业家在内的人们的关注。当马斯克和黄仁勋在人工智能相关新闻上出尽风头的同时,深耕开源领域的 Brian 同样将目光放在了火爆的大模型上:在他看来,AI 模型最后的“大赢家”将会是开源模型,风靡一时的 ChatGPT 正如当年不可一世的 Windows98,但最终全世界的电子设备几乎都选用了同时代的开源操作系统 linux。
本期《近匠》,Brian Behlendorf 来到中国面对面对话 CSDN &《新程序员》首席内容顾问邹欣,他不仅会聊 OpenSSF 在疫情期间的应对经验,还会带来自己对人工智能的独到观点以及给学生、程序员和广大开发者的宝贵建议。
ChatGPT 就像当年的 Win98,
但 Linux 成为了众多领域的支柱
邹欣:近半年 ChatGPT 的爆火让 OpenAI 的成功大受瞩目,你如何看待此事?
Brian:我不知道 OpenAI 现在有多开放,但它无疑利用了现存的所有开源工具训练大量的数据,将 GPT-1迭代到了 GPT-4。从某些角度来看, OpenAI 的成功有些类似于当年微软推出的 Windows98,它象征着微软某一时期的成果总结。ChatGPT 扮演着平台的角色,为初创公司提供了机会,也是时代变迁中的一个重要节点。当我们审视这个转折点时,有一点值得铭记:当 Windows98发布时,Linux 还未为人所知。Linux 如今已成为众多领域的支柱,大多数电子设备都基于 Linux 运行。最初被视为慈善甚至学术研究的 Linux,发展成了支撑70% 到90% 技术品牌的核心。
开源的力量不容忽视,在目睹 ChatGPT 和其他大语言模型崭露头角之后,我们也见证了开源大语言模型领域的蓬勃发展。一些企业如 HuggingFace,在这一领域取得了持续进展。开源模型的影响力正在逐渐增大,与 ChatGPT 的差距也在迅速缩小。这些开源模型将经过更加高效的训练,融合更多的模式。我坚信,到今年年底,开源模型将能够与闭源模型平分秋色。Windows98和 ChatGPT 由单一公司、单一产品主导,这种模式虽然高效且专注,能够创造出许多令人惊叹的成果,但我认为开发者普遍渴望未来的软件模式更加倾向于去中心化,渴望在多人参与的模式下构建一个更加开源开放的开发环境。
长期以来,Linux 基金会设有针对收集大数据的工具和策略,成立了 LF AI & Data 基金会,这对构建大模型至关重要。华为,ZTE,阿里、CSDN 的加入使这些模型更加可靠。另外,LF AI & Data 最近成立了 Generative AI 工作组,专职开源大模型方面的项目,预计9月在深圳发布。
邹欣:IT 领域已经在历史上证明过多人开发往往能带来更好的结果。期待未来有更好的开源大模型,让不同的公司可以利用它们自由地探索不一样的应用模式。此外,今年6月,OpenAI CEO Sam Altman 在一次演讲中呼吁全球的安全合作,在你看来全球协作最大的障碍是什么?
Brian:Linux 其实并不比 Windows 更安全,但人们对 Linux 的信任源于其开源的特性。相信自己能够发现潜在的安全漏洞并进行修复,这使得 Linux 更加透明且更容易被审查。正是因为开源软件能够被许多人审查、改进和分享,更加安全的代码才能诞生。
和开源软件类似,人工智能模型也可能受益于更多的合作、改进和共享。人们对人工智能的担忧和疑虑可能会随着更多人的参与和直接合作而得到解答。通过与模型的合作、重新组合、改进和整合,人工智能也可能变得更加透明和可信,从而解决人们对其发展方向的担忧。
邹欣:这是你在疫情后首次来中国,OpenSSF 是个怎样的组织?过去三年它经历了哪些变化?
Brian:去年年底,Linux 基金会内部为 OpenSSF 定制了一系列不同的策略,目标是改善开源软件的原始安全状态,并解决一些软件供应链上的缺陷。这些项目很快被社区主导,我当时是牵头人。
在此之前,我已经在 Linux 基金会的开源项目 Hyperledger 担任了5年的执行董事,后来从 Hyperledger 转向了更具规模的基金会事业。由于 Log4j2、SolarWinds 这些著名的安全事故引发广泛关注,OpenSSF 得以成立。如今我是 OpenSSF 的 CTO。
我用了三年时间让 OpenSSF 成为编程客栈了一个连接100家公司的组织,包含了不少大企业,比如华为、腾讯、阿里还有很多中国的公司。为了查明开源软件及其代码的安全漏洞,我们发起了一系列的项目,测量开源软件的风险、让软件通过训练 Dev 并变得更安全、编写更安全的代码、查看特定于供应链的工具(比如通过软件工程的签名给出一个框架来描述软件的安全级别)等等。我们的使命就是封锁这些漏洞。
邹欣:开源供应链是开源生态系统的重要组成部分,你在很多演讲场合都强调了这一点。什么是开源供应链?它为何如此重要?
Brian:开源软件与互联网密不可分。在互联网发展的初期,我们能轻松地给任何人发邮件,甚至伪造白宫的名义发总统信函,恶作剧骗人。在 TLS 普及之前,每个人对互联网上的内容有着极高的信任度。但随着人们深入开源软件领域,逐渐学会了关注项目在其网站上发布构建包时的监管链,了解从 github 仓库到软件包发布网站再到个人设备的整个过程,了解哪些环节可能存在不适当的干扰。在复杂的企业环境中,供应链变得日益复。
因此,OpenSSF 推出了两项技术,以防止下一次 Log4j2或 SolarWinds 事故。首先是SIGSTOR,这是一个签名平台,类似于 Let"s Encrypt(一个熟知的 TLS 证书颁发机构)。SIGSTOR 允许开发者轻松地对发布版本和构建压缩包进行签名。这使得代码通过系统时,可以在仓库验证开发者的身份,从而增强了供应链完整性。
其次是SLSA,即“SupplychainLevels forSoftwareArtifacts”(软件工件的供应链级别)。SLSA 提供了一种标准或规范,即在供应链中流动的软件工件是在何种条件下制造的。这涵盖了使用可信硬件的情况、发布源代码压缩包时是否有多人签名确认等。这是一种自我验证的方法,基于谷歌内部开发的技术,已经成为了开源项目,被用于管理软件供应链中的风险。
邹欣:OpenSSF 基金会有六个指定的安全相关工作组。为什么是六个?他们是如何协作的?
Brian:其实我们准备将工作组的数量增加至九个。
在 OpenSSF 成立之初,社区内就已经涌现出各种不同的想法和项目。于是组织开始按主题将各种项目进行分类,最终,OpenSSF 的活动被分类到不同工作组中。有人关注供应链的、测量软件风险的工具开发,还有人编写代码的最佳实践,提供工具、文档和指南。最近我们成立了一支新的工作组,计划从银行和医疗保健公司的角度出发,帮助用户将工具有机地结合在一起使用。
工作组的设立是一种扩展的方式,目前我们正在启动一个专注于人工智能和机器学习的工作组,试图探索如何利用人工智能来提升软件的安全性,并关注人工智能本身的安全问题,并找到方法来协调不同的活动,使它们真正创造价值。
邹欣:工作组的成员分布在世界各地,OpenSSF 如何让不同国家、不同时区、不同公司的人达成共识,并实行有效的工作模式?
Brian:这确实是开源项目长期以来的挑战。我从希腊的二头政治(diarchy)中获取了灵感,让拥有不同动机、优先事项和技能的人能够协同工作。
在开源项目组里,每个人都有自己的优先事项,有好想法并不意味着别人就会去跟随。因此,关键在于如何建立一种框架,使人们不仅有好的想法,还愿意付诸实际行动,提交拉取请求或提供文档。也就是说,我们需要在工作组中塑造一种文化。在开源项目中,人们需要频繁地沟通、保持开放、避免内讧。这就是建立社区的艺术,我从 Linux 基金会的案例中已经学会了如何做到这一点,而且做得很出色。
在考虑构建全球团队时,时区问题是我最担心的。在我参与开发 Apache 时,一切都以电子邮件为主,基本原则是:如果一件事没有在电子邮件列表上发生,那么它就没有发生。因为电子邮件没有时区限制,在这种工作环境下,就算隔几个小时才回复邮件,也没有关系。然而,在 Zoom 或 Slack 上的实时通话中,合作可能会变得困难。现在许多开源项目都非常注重实时聊天和视频会议。这确实是件好事,人们寻求帮助变得更容易了,人面对面交流的时候合作也会变得更加顺畅。但这些工具确实让不同时区的参与者的合作变得困难,这点是不可忽视的。
因此,我们一直在考虑是否将一些会议安排在亚太地区的工作时间。在中国的 Hyperledger 项目中,我们创建了一个专注于支持本地开发者的中国本地社区,并提供翻译等支持。当有人想要做出贡献时,我们会成为连接全球社区的桥梁。OpenSSF 也在推进类似的工作,并将许多 OpenSSF 网站、文档翻译成了中文,通过微信频道分享,却仍然面临着如何将更多中国人引入项目的挑战。
邹欣:我发现了你的窍门,那就是先解决本地的问题。
Brian:是的。开发者在涉足任何开源项目时都会面临一个学习曲线,有时候可能会缺少文档,我们必须帮助开发者理解项目的运作方式。如果你的开发人员不懂英语,这无疑会带来一些挑战。哪怕是当今最好的机器翻译,也没法彻底解决这个问题。我认为未来最坏的情况就是每个问题都在两个不同的开源项目中得到解决,比方说一个在中国,另一个在美国。我真的希望能够共同构建通用的技术解决方案,也许未来的人工智能翻译可以解决这个问题。
我们必须创造出应对时区差异和文化差异的方法。正是因此,我才行至中国,Linux 基金会也在中国举办活动。即使在过去最困难的时刻,我们仍然与世界各地的开源开发者紧密合作,持续不断地努力着。
安全问题不应亡羊补牢,而是防患于未然
邹欣:在软件开发过程中,安全性往往被人们忽视。通常人们先有创意,开发到后面才开始考虑安全性。但我认为现在全球开发者已经有了一些进步,特别是在开源领域。对于一些小公司或项目来说,可能会担心自己没有能力考虑到这么重要的安全性问题。你对此有什么建议呢?
Brian:学习如何重构别人的代码是有技巧的,这是一项开源开发者需要学习的技能。一个已经存在了一段时间、有很多贡献者的项目,往往比只有一个人的年轻项目更加安全。
理想情况下,检查的人越多,错误就会越少。OpenSSF 开展了一个名为安全评分卡的项目,它涵盖了一百多种不同的启发式方法,通过自动化检查软件的表现,为开源软件库(如 GitHub 或其他库)中的项目编程客栈评估风险。目前已经对超过100万个 GitHub 代码库进行了评估,并生成了一份开源代码的信用评分。可将其视为开源代码的信用报告,用来评估代码的可靠性和潜在的漏洞风险。我希望将其整合到开发者工具中。如此一来,开发者可以在需要某个功能时,快速查看不同选项的分数,从风险角度决定是否选择风险最小的选项。你甚至会看到保险公司在审核企业时,根据这个分数来评估数据源的风险,从而决定是否收取更高的网络安全保险费。风险评估是至关重要的。
此外,提高软件安全性的成本并不高昂。我们在 OpenSSF 的最佳实践工作小组中开发了一个课程,名为“编写安全软件”,课程包含约16个小时的内容,汇集了一些常见的不良编程案例,可以帮助新人开发者避免最常见的漏洞。即使是 Log4j 的开发人员也可以通过学习这门课程,意识到代码中存在的风险,因为其中一个重要的建议就是不要轻信用户输入和解析格式化字符串,而这恰恰是 Log4j 的做法。我希望软件开发者——即使是使用 ChatGPT 或 Copilot 这样工具的开发者,也能从这门课程受益。你可以通过 Linux 基金会获得认证,而且这门课程是免费的。
邹欣:这门课程适合大学生学习吗?
Brian:这不是一门很深的技术课程。在学习这门课程之前,最好至少已经学过一门编程语言。可以是 python 或者 Go,当然也可以是 C。
这门课程将帮助学生在职业生涯中更好地理解和应用软件安全的基本原则,打下坚实的基础。也能帮助人们意识到安全问题并不是亡羊补牢,而是可以防患于未然。如果把安全性问题留到最后,它可能永远都不会得到解决。通过学习这些技术,开发者会在编写代码的过程中采取一些措施来提高代码的安全性,而不是等到最后才来考虑。
不懂开源,别想学好计算机科学
邹欣:如今,许多中国的年轻人在大学甚至高中就开始学习 IT 相关的专业,开源可能不是他们最关心的问题之一。你认为高中生加入开源项目是否合适?
Brian:这或许是我的偏见,但我认为在当今的计算机科学教育中,即使是高中生,也应该优先接触开源软件。在美国,有一门非常受欢迎的编程语言叫做 Scratch,教简单的编程概念,它适用于不同年龄层,特别适合初学者。通过可视化的方式,用户可以创建交互式项目,分享代码,并了解如何阅读、改进他人的代码。
在 Scratch 平台上,我可以看到人们制造自己的无人机软件、年轻的孩子们参与机器人软件的开发,这些项目一开始就是开源的。在我上大学那会儿,芯片架构课程教的都是闭源架构。而如今,越来越多的人开始学习 RISC-V 架构。另外,人们在学习操作系统时,也不会学习闭源的 MACOS 内核,而是一开始就去学 Linux 内核或其他开源内核。
因此,现在的学生如果不了解开源知识,就不可能学好计算机科学。
不少年轻人早就觉得开源是计算机科学中理所当然的一部分了。这就好比如果你对鱼解释水有多么重要,鱼可能根本不懂为什么你要强调水的重要性,因为对它们来说,水(开源)的存在理所当然。
邹欣:开源社区的用户对开源的认知仍然存在差异,有些单纯享受着免费的源代码;有些则积极参与贡献;还有一些想要参与贡献但不知如何着手;另外一些未入局的学生认为开源意味着免费,从中无法盈利,因而质疑其意义。你能为我们解开这个谜团吗?
Brian:那些不知如何着手的人往往只是看不出代码中的问题。当软件开发者遇到问题时,他们了解这个问题是 bug 还是代码本身缺失的功能吗?如何找到合适的人问这个问题?怎么在开源项目中聪明地提问?这些技巧鲜有人指出。所以,未来应该在计算机科学教育中设立一门新课程:如何与开源项目进行交互。让软件开发者能够分辨一个问题的性质,然后提供修复甚至创造新的功能。希望每位计算机科学专业的大学生都能明白如何参与项目,如何与人沟通,最终从中受益。
如果 AI 能帮助所有人成为10x 开发者,那就来吧!
邹欣:人工智能最近在编写代码方面取得了惊人的进展,信息技术专业的大学生开始担心人工智能会取代自己的工作。你对他们有什么建议?
Brian:每一次技术浪潮都会颠覆一些东西,我们没有理由害怕这些技术。归根结底,这些技术已经成为增强能力的工具。让我们看看汽车,自动变速箱在问世之年也曾被视为“魔法”,但它没有让人们突然失业,反而让驾驶变得更加容易。人们不会面临失业,而是会转变自己的角色。我认为学生现在应该专注于学习如何使用这些工具,思考如何利用它们来解决实际问题,而不仅仅是用 AI 完成作业,在未来的工作中才会更具竞争力。
邹欣:比如,用 AI 编写一个排序功能。
Brian:期望开发者一遍又一遍地编写排序函数是很荒谬的。了解函数的原理固然有趣,但没人会真的重复编写排序函数。AI 工具将帮助开发者提高效率,加速工作进程。大多数开发者都觉得自己没有足够的时间来处理所有任务,如果 AI 真的能帮助所有人成为10x 开发者,那就来吧!说实话,学习软件开发的人没理由不使用这些工具。
邹欣:敏捷软件开发的倡导者肯特贝克(Kent Beck)曾经在推特上写道:“我很不情愿地用 AI 试着写代码,然后发现它可以让我的90% 技能被取代,并让我剩余的10% 技能放大一千倍。”
Brian:没错,那些被取代的部分,我们会找到新的方法来填补,毫无疑问,AI 会帮助我们实现这一点。
邹欣:在 AI 时代,对于学生、专业人士,特别是软件领域的从业者来说,最关键的核心技能是什么?如果人工智能可以自动完成“CRUD”,即创建、检索、更新、删除这些工作,我们还能做些什么?
Brian:在我看来,出色的开发者通常具备的关键特质就是举一反三。当有人提出需要软件实现某些新功能时,优秀的开发者会先思考:这个软件是否真的需要新功能?也许这个软件还有其他潜在功能,或者能够为创新过程提供价值,比如考虑用户界面和用户体验等。开发人员将更加专注于产品设计,正确引导产品的发展,而不是过于纠结于构建算法或调试低级应用程序接口,这有助于减少错误,提升工作效率,也会带来更多乐趣。
“我希望为女儿创造一个更好的世界”
邹欣:未来两三年,您有什么预期?是乐观地预计不同组织和国家之间将有更多合作?还是为世界上不同的地缘政治冲突而悲观?开发者该如何让软件和生态系统更加安全?
Brian:我天生是个乐观主义者!当前的地缘政治局势虽然看起来很复杂,但最终还是会向好的方向发展。我已经年过半百,也经历过上世纪美俄关系紧张,时好时坏,明白世事不断变迁的道理。我希望在这不稳定的局势中创造一个更好的世界,也坚信人类最终将能够克服分歧,共同合作,解决一些系统性问题——比如气候变化、贫困和可持续发展目标。我有一个七岁的女儿,希望能留给她一个更美好的世界。
随着全世界更关注安全问题,美国和欧洲等地区开始推出旨在提高软件安全性的新法规,我最担心的是政治因素可能会导致某些国家被警告不要使用中国开发的软件,也在努力抵制这种趋势,强调软件的来源并不重要,真正重要的是教育人们如何编写安全的代码。
人工智能会朝着更有益于人类、更安全的方向发展,对保障代码的安全产生积极影响。我也对未来充满期待,现在正是激动人心的转折时刻。