在Hacker News上,一个名为ymawky的项目获得了375分的高赞。项目的描述很特别:“Building a web server in assembly to give my life (a lack of) meaning”——用汇编语言写一个Web服务器,给缺乏意义的人生一点意义。这不仅是一个技术项目,更是一个关于程序员为什么要写代码的哲学表达。
ymawky是什么
ymawky(发音:yuh maw kee)是一个完全用ARM64汇编语言编写的Web服务器,专门为macOS(Apple Silicon)设计。它的特点包括:
- 零依赖:不使用libc,不使用任何第三方库
- 纯系统调用:所有功能直接通过系统调用(syscall)实现
- fork-per-connection:每个连接fork一个子进程处理
- 纯手工编写:所有代码都是作者手写的汇编指令
它能做什么
ymawky是一个静态文件Web服务器,支持以下功能:
- HTTP方法:GET、PUT、DELETE、OPTIONS、HEAD
- 路径安全:自动检测和阻止路径遍历攻击(如
../../../etc/passwd) - URL解码:支持%十六进制编码(如
%20解码为空格) - 自定义错误页:在
err/目录下放置对应编号的HTML文件 - DoS防护:基本的slowloris攻击防护
如何编译和运行
环境要求
- macOS(Apple Silicon / ARM64)
- Xcode Command Line Tools
编译
git clone https://github.com/imtomt/ymawky.git
cd ymawky
make
运行
# 在 127.0.0.1:8080 启动
./ymawky
# 指定端口
./ymawky 3000
# 调试模式(只处理一个请求,不fork)
./ymawky d
准备文件
在ymawky可执行文件旁边创建www/目录作为文档根目录:
mkdir www
echo '<h1>Hello from assembly!</h1>' > www/index.html
然后在浏览器访问http://127.0.0.1:8080/就能看到页面了。
技术细节
为什么用汇编写Web服务器
作者在项目说明中解释了动机。这不是为了性能(现代编译器生成的代码通常比手写汇编更好),也不是为了实用性(nginx和caddy已经足够好了)。这是一个探索性的项目:
- 理解计算机系统最底层的工作原理
- 体验”从零开始”的编程乐趣
- 在高度抽象化的技术世界中,找回对底层的掌控感
- 给”缺乏意义的人生”一点目标和成就感
代码量
整个Web服务器的核心逻辑大约在1000-2000行汇编代码。考虑到它实现了HTTP解析、文件服务、路径安全检查、进程管理等功能,这个代码量相当精简。
限制
- 只支持macOS ARM64,不支持Linux(虽然作者提到做了可移植性设计)
- 只支持静态文件,不支持动态内容生成
- 只能绑定
127.0.0.1,不支持自定义地址 - 不支持HTTPS
- 不支持URL查询参数(如
/search?query=term)
Hacker News社区的反应
这个项目在HN上引发了有趣的讨论:
- 很多程序员表示理解作者的感受——在高度抽象化的今天,用底层语言写东西是一种”回到初心”的体验
- 有人讨论了汇编语言在现代的实际应用场景(嵌入式、安全、性能关键路径)
- 也有人指出,这种”无用”的项目往往是最有价值的,因为它让人真正理解系统是如何工作的
适合谁
- 对计算机底层原理感兴趣的程序员
- 想学习ARM64汇编语言的开发者
- 需要理解HTTP协议底层实现的Web开发者
- 想找一个”从零开始”学习项目的工程师
- 纯粹欣赏代码之美的人
本文参考来源:ymawky GitHub仓库 | Show HN讨论 | 项目主页
© 版权声明
THE END
















暂无评论内容