采访 Kajetan Staszkiewicz
作者:Tom Jones
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,并且承载着真实的生产流量,影响客户体验。
在那种环境下测试补丁又紧张又慢。现在我有三层系统:
可以在几秒内重启新内核的虚拟机;
承载少量流量、即便挂了也不影响客户的测试机;
承载更多流量、但仍不影响付费客户的预演机。
第二是 FreeBSD 的测试套件,真的能救命!我能在几分钟内(支持并行)跑完所有测试,确保没破坏现有功能。虽然偶尔会发现有些功能还没对应的测试,但我们正在逐步完善。
最后是在编译内核时启用各种调试选项——可以监测锁顺序、变量断言,甚至捕获内核中的非法内存访问。FreeBSD 开发者手册对这些选项都有详细说明。
TJ: 对新贡献者有什么建议或其他想补充的吗?
KS: 开源项目(包括 FreeBSD)依赖贡献者。FreeBSD 已经很成熟,虽然代码复杂,但总有贡献的空间——从小而简单的改动开始也完全没问题。社区友好又乐于助人,会在代码审查中给出建设性反馈,别被吓到!
希望大家的贡献既能带来新功能,也能让新手学习新技能、职业成长,甚至享受与计算机打交道的乐趣。
Tom Jones 是一位致力于保持高效网络栈的 FreeBSD 提交者。
Kajetan Staszkiewicz 是专注于网络和虚拟化的系统管理员,偶尔为 FreeBSD 的 pf(4) 做出贡献。
最后更新于