Hacker News 中文摘要

RSS订阅

FreeBSD上的Linuxulator如同魔法般神奇 -- Linuxulator on FreeBSD Feels Like Magic

文章摘要

作者习惯使用VS Code编辑器,但在FreeBSD上运行ARM64设备受限,目前缺乏媲美Apple Silicon的ARM64笔记本。他主要开发SvelteKit和Go后端项目,常需远程开发,但现有方案如NFS和SSHFS体验不佳。

文章总结

标题:FreeBSD上的Linuxulator体验如魔法般神奇 | Hayzam

过去几年,我选择的编辑器一直是Visual Studio Code。它虽不完美,也绝非轻量级,但在功能、扩展和性能之间取得了绝佳平衡。

在FreeBSD上运行微软的专有版本并不可行,但开源版本运行良好。既然VS Code已经可用,为何还要写这篇文章?

因为有一个因素始终阻碍我将FreeBSD作为日常主力系统:

必须使用ARM64设备

必须使用ARM64设备。这一点毋庸置疑。

体验过苹果M1/M2芯片的Mac(此前使用大型x8664台式机)后,回归x8664在性能和续航上都像是一种倒退。遗憾的是,目前没有支持FreeBSD(甚至Linux)的ARM64笔记本能真正匹敌苹果芯片。我真心希望Framework或其他厂商能在未来几年改变这一局面。

生产力杀手:远程开发

在Debian(我最爱的Linux发行版)和macOS上,VS Code体验极佳。但我大多数项目都运行在其他平台:嵌入式Linux系统、OpenWRT设备,以及最近的FreeBSD主机。

这意味着需要依赖NFS挂载、SSHFS等方案。说实话?这些方案糟糕透顶。

我当前的主力技术栈是SvelteKit搭配Go后端,日常工作涉及大量OpenWRT开发。随着项目规模增长,通过NFS或SSHFS编辑代码变得异常痛苦——尤其是同时运行多个LSP服务时,有时打开文件就要5-10分钟。NFS稍好,但遭遇无数权限问题后,我彻底放弃了它。

这已成为影响我工作效率的真正障碍。

VS Code远程SSH的曙光

最近几天,我开始尝试VS Code的Remote SSH扩展。官方支持大多数主流操作系统,但明确不支持基于musl的OpenWRT和FreeBSD。

我仍尝试在OpenWRT上使用。

令人惊讶的是...它竟然开箱即用

通过SSH连接后,我能直接在设备上流畅编辑文件,性能远超预期。无需任何魔改,就像在本地操作目标设备般神奇。

自然要尝试FreeBSD

当前我正在开发一个大型FreeBSD项目Sylve。由于文件目录数量庞大,通过SSHFS/NFS管理简直是噩梦。

于是,在未深入研究兼容性的情况下,我决定在FreeBSD上尝试Remote SSH。

如预期所见: 不支持的平台:FreeBSD

这很合理。

但放弃前,我搜索发现了一个优秀仓库:vscode-server-freebsd

配置过程简单得令人发笑。实际上,我在初始化FreeBSD时已完成大部分步骤: service linux enable # 启用Linuxulator模拟层 service linux start pkg install linux_base-rl9 # 安装Linux基础系统(本例为Rocky 9)

我将Linux专用的PATH放入家目录的.bash_linux文件而非全局环境: PATH="/compat/linux/usr/local/sbin:/compat/linux/usr/local/bin:/compat/linux/usr/sbin:/compat/linux/usr/bin:/compat/linux/sbin:/compat/linux/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

通过配置sshd接受BASH_ENV变量,确保仅在Linuxulator环境下生效: sysrc sshd_flags="-o AcceptEnv=BASH_ENV" 客户端SSH配置则设置为: SetEnv BASH_ENV=".bash_linux" 最终我的FreeBSD主机SSH配置如下(macOS客户端): Host sylve-code Hostname 192.168.72.172 SetEnv BASH_ENV=".bash_linux" User root Port 22 IdentityFile ~/.ssh/id_ed25519 IdentitiesOnly yes ServerAliveInterval 60 ServerAliveCountMax 3 RemoteCommand /compat/linux/bin/bash

然后...奇迹发生了

我原本持怀疑态度,预计半数扩展会失效、语言服务崩溃或性能低下。

但这些都没发生。

所有依赖的扩展都完美运行,除了Rollup(因其未提供FreeBSD二进制文件)。但这也不成问题——通过WASM构建和npm覆盖轻松解决: { "overrides": { "rollup": "npm:@rollup/wasm-node@^4.30.1" } }

最终感悟

结果如何?通过Linuxulator无缝运行Linux二进制文件,我在FreeBSD上获得了快速、流畅且功能完整的远程开发体验。

这感觉如同魔法。

更重要的是,这证明了Linux ABI的稳定性以及FreeBSD的Linuxulator的优秀实现。该方案彻底改变了我使用FreeBSD的方式,消除了工作流程中的最大障碍。

这种看似脆弱实则稳健的方案令我惊叹,也让我对未来可能性充满期待。

(注:原文中关于ARM64设备对比、OpenWRT具体体验等非核心内容已精简,重点保留了Linuxulator实现的关键技术细节和实际效果)

评论总结

评论1(评分:无,作者:wolvoleo)主要观点: 1. 反对使用Linux兼容层 - "我不喜欢使用linuxulator或Linux兼容层...我选择FreeBSD就是因为它不同于Linux" - "如果我们妥协,最终会引入越来越多的Linux特性,最后所有东西都会依赖这些"

  1. 认为FreeBSD原生方案已足够
  • "FreeBSD版的codium工作得很好,只需调整一些设置就能安装专有扩展"
  • "有些工具没有FreeBSD移植版,我就选择其他替代方案"
  1. 坚持纯FreeBSD环境
  • "现在我完全没有使用任何Linux兼容层,这很棒"
  • "开发者说'用兼容层就好',但我宁愿选择其他方案"

总结:该用户强烈反对在FreeBSD中使用Linux兼容方案,认为这会损害系统特性,主张坚持纯FreeBSD环境并使用原生替代方案。