一次制作终端版博客的经历
内容提要
作者利用AI助手制作了两个版本的终端版博客:一个基于WASM Linux,实现真实Linux环境,支持文章浏览和评论,但存在兼容性问题;另一个基于JSNix,模拟更轻量、加载快,但功能有限。整个过程通过AI辅助完成,作者负责方案设计,最终实现了在浏览器中用Linux访问博客的独特体验。
延伸解读
AI辅助开发的局限与应对
作者在开发过程中发现AI容易陷入错误方向,且喜欢自己造轮子,因此需要人工预先设计好方案。例如,在实现网络功能时,AI会尝试自建TCP/IP协议栈,但漏洞较多,最终作者选择引入现成的tcpip.js库。这提示我们,AI辅助开发时,明确的技术选型和约束能显著提高效率与质量。
WASM Linux与JSNix的取舍
WASM Linux提供真实Linux环境,但存在兼容性问题,如手机浏览器不支持跨源隔离,且体积较大;JSNix虽非真实Linux,但加载快、兼容性好,且功能模拟到位。作者最终同时提供两个版本,让用户根据设备选择。这反映了在追求真实性与实用性之间的权衡,也说明轻量级模拟方案在特定场景下更具优势。
开源协作中的反馈与迭代
作者在开发中多次向WASM Linux原作者提交Issue和PR,虽然PR被拒,但作者通过反馈问题(如管道符失效、内存限制)促使原作者快速修复,甚至第二天就解决了问题。这表明开源社区中,用户反馈对项目改进至关重要,即使贡献不被接受,也能通过沟通推动项目发展。
Q&A
作者是如何实现在浏览器中用真正的Linux访问博客的?
作者基于WASM Linux方案,让AI助手开发了一个能在浏览器中执行JS的设备文件,实现与外界通信,再通过虚拟HTTP服务和脚本实现文章浏览等功能。
WASM Linux方案存在哪些限制?
WASM Linux方案存在兼容性问题,如手机浏览器不支持跨源隔离导致SharedArrayBuffer无法使用;体积较大(几MiB);有启动过程,加载较慢;且初期不能使用管道符和异步操作。
JSNix版本与WASM Linux版本相比有哪些优缺点?
JSNix版本优点是体积小(不到1MiB)、加载快、兼容性好(手机浏览器可用)、开发简单;缺点是功能有限,命令输出多为硬编码,grep、sed、awk等工具基本不可用,不支持直接在终端中使用if、for等语法。
作者在开发过程中遇到了哪些技术问题?
遇到的主要问题包括:Web Worker无法与网页交互、Shell管道符失效、反引号和$()语法不可用、异步操作导致浏览器卡顿、内存限制导致Safari报OOM错误、网络功能实现复杂等。
作者如何解决网络请求和TLS终止问题?
作者让AI编写虚拟HTTP服务,并集成tcpip.js库实现网络功能;对于TLS终止,使用node-forge库进行解密,再转换为fetch()请求。
作者对AI助手的表现有何评价?
作者认为AI非常强大,几乎所有代码都由AI完成,但方案设计仍需自己考虑,因为AI容易走错方向或自己造轮子。
作者为什么选择WASM Linux而不是虚拟机方案?
因为WASM Linux比虚拟机更轻量、效率更高,且能在Safari中完美运行。