内容提要
作者因Java版阿里云盘WebDAV内存占用高,用Rust自研aliyundrive-webdav,三晚完成首个下载版本,并通过CI/CD发布二进制及PyPI包。随后开发OpenWrt和梅林插件,采用LTO和upx压缩体积,支持多CPU架构与Docker,并新增上传功能。社区贡献完善插件并推动其被OpenWrt固件收录,还向上游Rust库提交改进。项目三个月内Star快速增长,体现开源协作价值。
延伸解读
从内存痛点到Rust重写
作者因Java版WebDAV工具内存占用高达几百兆,在软路由上运行不畅,于是用Rust自研替代品。这反映了在资源受限设备上,语言和运行时选择对内存 footprint 影响显著。Rust的静态编译和低开销特性使其适合路由器等嵌入式环境,但作者也需自行处理跨平台构建和依赖问题。
为路由器适配的工程取舍
为适应路由器存储空间小的特点,作者启用LTO、opt-level='z'和strip,并用upx将二进制从5MB压到2.2MB。但upx 3.96压缩的MIPS二进制会启动卡死,降级到3.95才解决。这说明在嵌入式场景中,体积优化可能引入兼容性风险,需针对不同CPU架构验证。
社区协作推动项目成熟
项目初期OpenWrt插件代码不够规范,经社区贡献者改进后被收录至Lean's OpenWrt仓库,进而被多个固件发行版集成。同时,作者为支持armv5te和MIPS架构,向上游Rust库提交PR或Issue,促进了生态对32位系统的支持。这显示开源项目能借助社区力量弥补个人短板,并反哺上游。
用户用法超出作者预期
作者最初设想在NanoPi R4S等较高性能软路由上运行,但实际用户将其用于斐讯N1、玩客云、威联通NAS等多样平台,并配合rclone、davfs或RaiDrive进行文件同步。这提醒开发者,产品落地场景往往比预想更丰富,保持架构通用性和可配置性有助于适应不同需求。
Q&A
为什么作者要自己开发 aliyundrive-webdav?
作者使用阿里云盘时,通过 Java 实现的 webdav-aliyundriver 项目为云盘添加 WebDAV 支持,但该 Java 版本内存占用高达几百兆,作者觉得不舒服,加上程序员喜欢自己捣鼓,于是萌发了用 Rust 自行实现一套的想法,这就诞生了 aliyundrive-webdav 项目。
aliyundrive-webdav 第一个版本是怎么发布的?
作者用 Chrome 网络调试分析阿里云盘网页版接口后,大约花了三个晚上发布了只支持下载功能的 0.1.0 版本。从一开始就基于 GitHub Actions 的 CI/CD 流程自动构建基于 musl libc 的二进制文件并发布到 GitHub Releases,同时借助 maturin 将二进制文件发布到 PyPI,使得 macOS、Linux 和 Windows 用户可以通过 pip install aliyundrive-webdav 安装使用。
aliyundrive-webdav 的 OpenWrt 插件是如何减小体积的?
为了减小 .ipk 文件大小,作者增加了 Link Time Optimization 和 opt-level = "z" 优化,并自动 strip debug symbols,但二进制文件仍有 5MB 左右。后来使用 upx 压缩,体积减少约 44% 至 2.2MB 左右。不过 upx 3.96 压缩的 MIPS 架构二进制文件启动即卡死,降级到 3.95 版本才解决。
aliyundrive-webdav 支持哪些平台和架构?
aliyundrive-webdav 支持多种平台:通过 pip 安装可在 macOS、Linux 和 Windows 上使用;提供了 OpenWrt 插件和梅林插件;发布了支持多种 CPU 架构的 Docker 镜像,包括 armv7、armv5te、x86_64 和 MIPS 等架构。
社区对 aliyundrive-webdav 项目有哪些贡献?
社区贡献包括:@flyhigherpi 贡献了梅林 384/386 固件版本的支持;@Beginner-Go 改进了 OpenWrt package 代码使其更标准规范化,并将项目提交收录至 lede Lean's OpenWrt source 代码仓库,逐渐被各个 OpenWrt 固件发行版本收录。此外,作者还向依赖的 Rust crates(如 quanta 和 moka)提交 PR 或 Issue,增加了对 armv5te 和 MIPS 等 32 位系统的支持。
作者从 aliyundrive-webdav 项目中有哪些收获或感悟?
作者总结道:这个用爱发电的开源项目几乎没有带来收入,但让人看到开源社区有趣的一面,大家互不相识却能热情高效地解决问题。另外,永远不要假设用户一定会怎么用产品,尽管最初是想在软路由上跑,但用户却跑在斐讯N1盒子、玩客云、威联通NAS等各种平台上,配合 rclone、davfs 或 RaiDrive 以及 NAS 文件同步服务使用。项目三个月内 GitHub Star 增长很快,对 Rust 社区 crates 的改进也会长久留存。