## 空指针“问题”重审 托尼·霍尔,空引用概念的发明者,曾称其为他“价值十亿美元的错误”,因为它会导致错误和漏洞。然而,这种批评往往被夸大。空指针解引用实际上比其他内存安全问题*更容易*捕获,并且在C和Odin等语言中相对不常见。 核心问题并非空指针本身,而是关注单个元素而非整体程序架构的心态。试图“解决”空指针的问题——例如强制指针检查或强制初始化——会带来显著的权衡。例如,在所有地方强制初始化会降低性能并导致不良设计。 作者认为,更好的方法是转向“分组元素”的心态,专注于管理更大、更连贯的内存块,而不是单个分配。这自然可以缓解许多内存安全问题,包括使用已释放内存的错误。 语言设计,例如Odin,应该考虑到这些心态。Odin有意允许隐式零初始化,以鼓励更全面的架构方法,即使这意味着接受空指针错误的可能——这些错误通常很容易调试——作为一种值得的妥协。最终,关注架构原则比追求针对每种潜在错误的编译时保证更有效。
## FreeBSD 家庭服务器:WireGuard VPN 设置
本文详细介绍了在 FreeBSD 14.3 服务器上设置 WireGuard VPN 的过程,该服务器用作 NAS,用于连接家庭和办公室网络。目标是启用对 NAS 的安全访问,并最终直接在服务器的 ZFS 存储池上托管博客文件/备份。
WireGuard 因其较小的代码库、内核级操作、内置加密和点对点架构而被选为 OpenVPN 的替代方案。设置涉及安装 `wireguard-tools`、配置内核模块以及为服务器(FreeBSD 主机)和客户端(家庭笔记本电脑)创建密钥对。
关键步骤包括启用 IP 转发、配置数据包过滤器 (PF) 防火墙以允许 VPN 流量和网络之间的访问,以及在办公室路由器上设置端口转发。最终配置允许在两台笔记本电脑和 FreeBSD 服务器之间进行 SSH 和 ping 访问,即使办公室笔记本电脑未连接 VPN 也是如此。作者强调路由表和防火墙规则的重要性,以实现网络之间的通信,最终实现功能齐全且安全的连接。
## 第三方内容:隐藏的网站风险
第三方内容对网站性能和可靠性有显著影响,常常造成单点故障(SPOF)。虽然大型提供商的重大中断会引起关注,但即使是知名度较低的第三方出现减速或故障,也可能破坏用户体验——甚至对于*未*直接使用该提供商的网站。
这些SPOF发生在一个网站依赖外部服务提供关键的、渲染阻塞资源时。如果该服务失败,页面加载就会停滞。尽管这个问题已知超过15年,但数据显示**67.7%的网站至少请求一个渲染阻塞的第三方**,近60%使用与主要内容不同的CDN。常见原因包括Google Fonts、广告网络和分析工具。
测试这些漏洞至关重要。方法包括使用WebPageTest等工具模拟故障,通过hosts文件修改DNS设置,或利用Chrome DevTools的请求限制功能。Speedcurve和Catchpoint等监控工具也可以跟踪第三方性能并提醒异常情况。
最终,最大限度地减少对第三方内容的依赖——特别是对于渲染阻塞资源——并主动测试SPOF,对于维护网站稳定性和积极的用户体验至关重要。自托管静态资源是关键的预防措施。
## Wayland 迁移:2026 年仍未完全实现
作者近二十年来一直尝试从 X 服务器 (X11) 迁移到其预期继任者 Wayland,但始终遇到障碍。尽管 Wayland 已经成熟很多——GNOME 和 KDE 提供了支持,Asahi Linux 等发行版将其作为优先事项——但完全可用性仍然难以捉摸,尤其是在使用要求较高的硬件时。
主要挑战在于 NVIDIA 显卡的支持。虽然 NVIDIA 在 2021 年增加了基本的 Wayland 兼容性,但问题仍然存在。具体来说,作者的 8K 显示器需要通过 DisplayPort 的 TILE 支持,而 wlroots(Sway 偏好的 i3 替代方案的合成器基础)历史上缺乏这种支持。虽然存在补丁,但会引入输出问题,需要借助 Claude Code AI 助手识别出的复杂解决方法。
除了驱动问题外,应用程序兼容性(Chrome 中的缩放故障,Emacs 中的输入延迟)、桌面行为(Chrome 窗口恢复)以及屏幕共享等功能仍然存在问题。虽然已经取得了一些进展——Sway 越来越兼容 i3,`dunst` 和 `rofi` 等工具运行良好——但整体体验尚未达到稳定且性能良好的 X11 设置的水平。
作者得出结论,虽然可用的 Wayland 体验*几乎*触手可及,但目前调试和解决剩余问题所需的时间投入过于巨大。他们将继续使用 X11/i3,直到这些问题得到解决,优先考虑无缝的工作流程而不是早期采用。