用汇编语言写Web服务器:ymawky,一个关于意义的Show HN项目

在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
喜欢就支持一下吧
点赞9 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容