采访 Kajetan Staszkiewicz

TJ: 你能简单介绍一下你自己以及你与 FreeBSD 的背景吗?

KS: 我叫 Kajetan Staszkiewicz。 1984 年出生于波兰神奇的城市克拉科夫。大约在 8 岁,我在计算机俱乐部接触了 ZX Spectrum 和 Atari 65XE 等 8 位机器。后来父母给我买了一台 Commodore 64。我对这台机器记忆犹新,直到现在我的桌上还摆着一台能正常工作的机器。

1996 年,我们家买了第一台 PC 克隆机(注:IBM PC 兼容机),不久波兰家用用户就能通过拨号连入互联网。但这种方式可持续时间不长。大约 1999 年,我和邻居们决定搭建邻里网络(注:小区或街道搭建的局域网)。大约 15 个人通过悬挂在屋顶到阳台的 10 Mb/s 以太网线共享一家网吧的 115 kb/s 连接。

网络共享由一台运行 IPchains(注:一款网络数据包过滤与地址转换工具) 的 Linux 机器来完成,最初由网吧的系统管理员提供,很快就被我们网络里年长的朋友搭建的另一套系统取代。后来我接手管理,用 Perl 写了几段 CGI 脚本,通过 Web 界面管理 DHCP 服务器和流量整形。

凭借这些经验,我在一家公司找到了兼职,网络架构和我们当初的类似,不过是商业用途。那时我在雅盖隆大学(注:位于波兰克拉科夫,由卡齐米日三世创建于 1364 年)学习计算机科学。一位同学向我介绍了 FreeBSD,大概是 5.0 版。在新工作中,路由和流量整形由 Linux 系统完成,但 FreeBSD 的 jail 看起来是托管平台的完美方案。我们需要提供网页、电子邮件和 Webmail 等服务。虚拟化尚未普及, jail 帮助我们实现了这些服务的隔离。

我的下一份工作是在一家大多数服务都使用 FreeBSD 的公司,甚至有员工大胆地在工作站上运行 FreeBSD。

目前我居住在德国汉堡。在现在的工作中, FreeBSD 是我们路由器和负载均衡器的首选系统。

TJ: 你是如何开始提交第一个 FreeBSD 贡献的?当时你如何选择起步的项目?

KS: 选择很简单:修复那些出问题的部分。在 $WORK,我们依赖 pf(4) 的源跟踪,期间发现一个棘手的 Bug:删除源节点时,每个源节点会扫描所有状态。数百个源节点与数十万条状态会导致内核代码出现大量循环,系统因此被锁死。

在 glebius@ 的帮助下,我成功修复了该问题,并提交了我的第一个补丁到 FreeBSD。

TJ: 你是如何定位这个问题的?FreeBSD 中是否有现成的工具可以帮助,还是你需要自行开发?

KS: 当时我已经大致知道问题出在哪,因为它是由我们用于负载均衡的自定义工具引发的。

那时我对 FreeBSD 尤其是内核开发经验尚浅,所以采用了最原始的暴力调试法:不断在代码里加 printf,直到找到卡住的位置。

不过系统自带了构建自定义内核所需的所有工具,这点对我帮助很大。

此外,还能按需生成内存转储,再用调试器分析,也非常方便。

TJ: 在这个过程中你一定学到了很多。有没有什么技巧能让新开发者的调试和开发更轻松?

KS: 不只是知识,额外的工具和工作流也很关键。

第一是要有完善的开发和测试环境。在 $WORK,我们只在裸机上跑 FreeBSD,最初的补丁必须部署到这些“真”服务器上——它们启动要花几分钟 POST,并且承载着真实的生产流量,影响客户体验。

在那种环境下测试补丁又紧张又慢。现在我有三层系统:

  1. 可以在几秒内重启新内核的虚拟机;

  2. 承载少量流量、即便挂了也不影响客户的测试机;

  3. 承载更多流量、但仍不影响付费客户的预演机。

第二是 FreeBSD 的测试套件,真的能救命!我能在几分钟内(支持并行)跑完所有测试,确保没破坏现有功能。虽然偶尔会发现有些功能还没对应的测试,但我们正在逐步完善。

最后是在编译内核时启用各种调试选项——可以监测锁顺序、变量断言,甚至捕获内核中的非法内存访问。FreeBSD 开发者手册对这些选项都有详细说明。

TJ: 对新贡献者有什么建议或其他想补充的吗?

KS: 开源项目(包括 FreeBSD)依赖贡献者。FreeBSD 已经很成熟,虽然代码复杂,但总有贡献的空间——从小而简单的改动开始也完全没问题。社区友好又乐于助人,会在代码审查中给出建设性反馈,别被吓到!

希望大家的贡献既能带来新功能,也能让新手学习新技能、职业成长,甚至享受与计算机打交道的乐趣。


Tom Jones 是一位致力于保持高效网络栈的 FreeBSD 提交者。

Kajetan Staszkiewicz 是专注于网络和虚拟化的系统管理员,偶尔为 FreeBSD 的 pf(4) 做出贡献。

最后更新于