For the complete documentation index, see llms.txt. This page is also available as Markdown.

FreeBSD 上的现代 Java

专访 Harald Eilertsen

Tom Jones

2025 年 9 月,Harald Eilertsen 在 EuroBSDcon 上发表了题为 “改进 FreeBSD 上的 OpenJDK——我们的进展与我所学到的” 的演讲。Harald 一直与上游 OpenJDK 项目合作,改进对 FreeBSD 的支持。与 Harald 对谈的是 Tom Jones。Tom 是一名提交者,《FreeBSD 期刊》编辑委员会成员,也是期刊的定期撰稿人。

Tom:

你是怎么开始用 FreeBSD 的?

Harald:

我或多或少用 FreeBSD 很久了。我最早是在 2000 年代初尝试在桌面系统上用它。具体记不清了,但至少对我来说效果不太理想。当时在桌面上运行它有不少问题。

我在服务器上用它很久了。基本上我在朋友的服务器上有一个 Jail,算是有了自己的虚拟小空间,里面托管了各种 web 服务和我自己的社交网络、我自己的 fediverse 实例,还有……对,很多不同的博客、我的乐队、我的各种东西,有时也帮别人托管。

Tom:

你从 FreeBSD 用户转向开发的过程是怎样的?

Harald:

我一辈子基本上都在做开发,但之所以开始做 FreeBSD 上的 OpenJDK 这个项目,主要是因为 FreeBSD 基金会在找人来做这件事。

Tom:

你之前做过 Java 开发吗?

Harald:

我做过一些 Java 开发,但那是几十年前的事了。对我来说,JVM 比 Java 语言本身更有意思。

它更多是 C++ 加一点汇编,而不是 Java 本身。它是驱动 Java 运行的系统。我看到 Java 语言本身也有不少进展。所以过去十年里,它变得比最初现代多了。

Tom:

嗯,我很久没碰 Java 了,对此我很高兴。

Harald:

大多数人都这样。

Tom:

通过这项工作,你了解到人们想在 FreeBSD 上的 OpenJDK 里运行哪些东西吗?

Harald:

嗯,了解一些,部分是因为我认识一些在生产环境里用 FreeBSD 跑 Java 的人。

也因为从 bug 报告和其他渠道看到的情况来看,它似乎主要跟那些大型关键系统有关。

比如 Elasticsearch,比如 Tomcat,至少目前我的印象是大多是服务端的东西。

我以前工作过的一家公司用 Java 做 “卡不在场” 支付认证。认证的是卡片,不是支付。那套系统跑在 Java 上。所以看起来 Java 仍用于很多关键系统和重要系统,而这些系统在某种程度上对普通人是隐藏的。

Tom:

你刚开始做的时候,情况如何?

Harald:

当时有个 JDK 23 的 Port。那是在上游即将发布 JDK 24 之前。

我花了一些时间熟悉代码,熟悉它怎么运作,熟悉怎么跑单元测试之类的。我遇到的问题之一是很多单元测试……不是很多,但有几个相当关键的单元测试跑不过。

原因很多。所以我到目前为止做的工作,一方面是修复单元测试或测试框架,让它们在 FreeBSD 上能跑,另一方面是修复单元测试或测试标记为不工作的代码。

我觉得现在的状况是,JDK 24,还有我弄好之后即将推出的 25,是一个比以往版本更扎实的 Java 或 JDK 实现,在 FreeBSD 上跑得更好,性能也更好。

Tom:

你对性能提升的幅度和体现在哪些地方有概念吗?

Harald:

一部分是因为有用户告诉我,哦,我们在某处有性能问题。

有个相当大的 Elasticsearch 安装在内存超过 128 GB 的系统上有性能问题。看代码,那部分是 Elasticsearch 想知道已提交内存的量以及我们怎么核算它,而我们之前的做法不太理想。

一旦找到问题所在,改动相当简单。

FreeBSD 基本上有个 API 能直接给你这个数值,我们不必费劲遍历文件、做一堆计算。所以一旦改好,用户确认了,对,这能用。就是这类问题。

Tom:

有没有随手就能说出的百分比提升?

Harald:

没有,而且我觉得这也很大程度上取决于你的工作负载。我正在做的一件事,也是 bapt@ 一直在帮忙的,就是减少对 procfs 文件系统的依赖。

代码从 Linux 那边来,严重依赖 procfs 系统,而这在 Linux 上似乎比在 FreeBSD 上快得多。

在 FreeBSD 上,我们通常有更好、更简单的方式获取这些信息。所以完全去掉它会是一种改进。

我没做过严格的性能测试,尤其是我说的这个问题,我没有那样的机器来测。我没有那种内存的机器。而且我猜,搭建一个高负载的 Elasticsearch 集群或安装要花些力气,也要花些时间去测量。

Tom:

我的经验确实是这样:一部分问题是大型机器不好弄。要是能联系到社区里更多的人,能说 “我把机器跑在我们的测试负载上,这是怎么做的”,那就太好了。

Harald:

这个 Elasticsearch 的事也是一样。我和报告问题的人联系得不错,他们非常乐意帮忙,这种情况下我基本上就说 “这看起来不太理想,试试别的办法。” 然后我把补丁发给他们,他们基本就确认了,对,这解决了问题,所以只能这样测。这种情况下是他们做的测试。我则想办法弄清该改代码里的哪里。

Tom:

对我来说,当我把 VPP 移植到 FreeBSD 时,procfs 里有很多东西只是从文件读字符串来做配置,相关的改动大多数时候都很直接,要么用 sysctl 接口,要么我们有原生接口。

Tom:

感觉我们应该有一份移植软件的指南,比如,grep 这个模式,然后替换掉。

Harald:

我想,对,这基本就是我选的方案。要么用 sysctl,要么有东西直接给我结果,所以快得多。我觉得 OpenJDK 至少有个问题,就是传统上,尤其是 OpenJDK 的 hotspot 代码里,源码树的 BSD 部分包含了 Mac OS,因为他们传统上把 Mac OS 看作 BSD。

虽然我们需要的代码通常更接近 Linux 代码(但不一定完全相同),而 Linux 代码在源码树的另一个子目录里,所以有时会有点混乱,因为有时你有这种 BSD 专用代码,基本分成一份、两份,有时更多,因为不同的 BSD 做事方式也不同,但 Mac OS 部分通常和这些都完全不同。

Tom:

上游接受补丁的情况怎么样?

Harald:

他们很友善,也很严格。所以把补丁推到上游有一套定义得很清楚的工作流和流程。他们不希望看到的情况之一是,一个几乎被支持的平台有一套不完整的补丁集。

他们非常支持把 BSD 纳入上游,但有一个明确的流程要做。

你得按他们的流程来,所以我们现在做的是在 github 上的 OpenJDK 组织下有了自己的仓库,我们会在里面创建一些分支来开发,并与上游保持同步。一旦到了这能工作、测试通过、一切就绪的时候,我们还需要写一份 Java Enhancement Proposal,声明我们想把 FreeBSD 或整个 BSD 或不管我们怎么做,变成上游支持的平台。

这需要获得通过,一旦我们到了那一步,基本上所有东西会一次性合并。但我已经有一些补丁,不是严格和 BSD 相关,但在过程中有助于被上游接受,他们的反应就是 “好”。他们对此一直很友善,也很支持。

这就是 Java 那句老口号:“一次编写,到处运行。” 看来他们真把它当回事。

Tom:

你看到尽头了吗?我们离做那次大合并、加入 FreeBSD 支持还有多近?

Harald:

我想我们现在正在开始做这件事。我不知道要多久,但我觉得大概六个月到一年之间能成。也许会更快,因为 Port 能用,我们基本上有了所有改动。

还有几个测试我暂时还跑不过,但我觉得一旦搞定,再加上有能在他们系统里跑的 FreeBSD CI,就行了。这是最近一直在做的,看起来有进展,所以我也说不好。

我是个程序员,我不会规划时间。

Tom:

一旦我们成为支持平台,是不是意味着不破坏支持的责任就落到别人头上了?

Harald:

对,因为那时我们就是 CI 流程的一部分,如果某个补丁导致 CI 失败,它就不会被合并。这不意味着他们非得自己修。可能是,对,他们联系我或 BSD 移植组的其他人就行。

Tom:

非常感谢你今天抽时间,在我们结束之前还有什么想聊的吗?

Harald:

我刚旅行回来,去了 EuroBSDcon,到处见了很多人,所以脑子有点空白。今年是我第一次参加 EuroBSDcon,我觉得体验不错。能见到真人很好,还有很多有趣的演讲。

我觉得,至少对我来说,作为某种程度上从外部来的人,我不算 BSD 社区的一员。能看到所有正在发生的事、人们在做什么,还有,怎么说呢,所有投入到构建系统里的手艺,对我来说很好。

Tom:

人们知道你做 OpenJDK 的工作后,向你提了很多功能请求吗?

Harald:

倒没有,看起来更多的是我得到了很多支持,比如:

“有人在做这个真好,我们在努力让 OpenJDK 变得更好、跑得更好,这真好。”

我觉得这是件好事,当然,把它推到上游让它被支持也是。

我觉得那才是更重要的部分。至少从人们的反应来看是这样。

Tom:

你有没有告诉人们去感谢 FreeBSD 基金会?

Harald:

嗯,我确实说了。这也正是关键。就像:“你为什么做这个工作?”

就是,“对,我是拿钱做的。”

但这也是我觉得有意思的项目,也觉得有挑战性。我做软件开发做了很久,在各种领域,不同系统,快 30 年了。我有很多经验。

既能引起兴趣、又大致符合我对自由软件和开源信仰的工作,并不那么容易遇到。所以能把这两者结合起来,得到一份有挑战性、我觉得——不是人人都能做的工作。

而且,工作机会其实很多。至少看可用的活儿的话,很多是 web 开发、JavaScript,还有随便什么最新框架。而我对那些没兴趣。

Tom:

很多——感觉像是为变而变。搞点新的、刺激的。

Harald:

所以这就是我的感受。

这份活儿让我能用上一些知识,也挑战我。我有很多东西要学,关于 FreeBSD,关于 OpenJDK,还有一切怎么运作。我注意到这两边都有非常博学的人。我能向他们学习。

这——我觉得很有价值。


Harald Eilertsen 是一名软件开发者和信息安全从业者。他从 1980 年代初开始编程,曾在 Tandberg、Cisco、Modirum 和 Automattic 等公司工作。目前他自雇,作为独立顾问工作。

Tom Jones 是一名 FreeBSD 提交者,致力于让网络栈保持快速。

最后更新于