# 2023-07: 一些里程碑

这一期的周报简单总结一下最近开源工作上的一些进展和对未来的展望～

## Rebirth of Sccache

在 [@sylvestre](https://github.com/sylvestre) 的邀请下，我成为了 [Sccache](https://github.com/mozilla/sccache/) 的维护者之一。

在过去的三个月中，我主要做了以下贡献：

- 存储后端迁移至 [Apache OpenDAL](https://github.com/datafuselabs/opendal)
- 重构了 GHA Cache 服务的实现
- 增加了 WebDAV 后端的支持
- 增加了各个存储后端的集成测试

其中最重要的工作是将存储后端迁移到 OpenDAL。迁移后，Sccache删除了大量冗余代码，同时提供了比之前更强的能力和兼容性，诸如不会自动读取 `.config/aws` 等提出长达四五年之久的 Issues 都得到了解决。此外，增加新的存储后端也变得更加容易，开发者只需要考虑如何将配置暴露给用户即可，功能实现上只需要简单几行，以 webdav 为例：

```rust
use crate::errors::*;
use opendal::layers::LoggingLayer;
use opendal::services::Webdav;
use opendal::Operator;

/// A cache that stores entries in a Webdav.
pub struct WebdavCache;

impl WebdavCache {
    /// Create a new `WebdavCache`.
    pub fn build(endpoint: &str, key_prefix: &str) -> Result<Operator> {
        let mut builder = Webdav::default();
        builder.endpoint(endpoint);
        builder.root(key_prefix);

        let op = Operator::create(builder)?
            .layer(LoggingLayer::default())
            .finish();
        Ok(op)
    }
}
```

目前，社区正在紧锣密鼓地准备v0.4版本的正式发布，希望大家会喜欢。

在 v0.4 版本发布之后，我希望 Sccache 能够有以下改进：

- 目前 Sccache 对动态库的支持不是很好，无法缓存 rocksdb-rs 这样的依赖，希望能找到一个好的方案将他们缓存起来
- Sccache 是一个非常古老的项目，我希望能对代码结构做一些重构和清理工作，以降低贡献者参与的门槛
- 支持更多的存储后端，比如社区已经请求的 OSS 等
- Sccache 有潜力成为一个通用的缓存组件：不仅局限于C/CPP/Rust，我们能否支持更多类型的编译缓存？例如 Docker，Golang 和 Zig?
- 希望Sccache能够被更广泛地采用，吸引更多的开源贡献者参与进来。

## OpenDAL in ASF

在 Apache Member [@tisonkun](https://github.com/tisonkun) 的支持下，OpenDAL 的 Apache 捐赠之旅迈出了第一步: [Incubating Proposal for OpenDAL](https://lists.apache.org/thread/px7wjcjy3rd4s59d4d3ll1x6y11d240r)。

OpenDAL 项目从启动之初就有着捐赠的想法，其原因是多重的：

- OpenDAL 的愿景是 `Access data freely, painless, and efficiently`，捐赠给一个中立的开源基金会可以免除潜在用户的版权和供应商锁定问题的担忧。
- OpenDAL 作为一个底层库，本身没有商业价值。通过捐赠，它有望吸引更多用户，实现更广泛的采用，并促进项目本身的改进和稳定。
- OpenDAL 的能力边界不断扩展。如果没有相应的社区支持，我们将花费大量精力来维护这个项目。
- [Datafuse Labs](https://github.com/datafuselabs) 从上到下都是狂热的开源爱好者，非常支持将 OpenDAL 项目捐赠出去

从个人角度来看，这是一个执念：它在 17 年诞生，在 18 年成长，却最终在 19 年消逝。现在我有一个完美的机会去亲手实现它，有一个强大的团队在背后支持我，我没有理由不付出全身心的努力。希望 OpenDAL 能够顺利开始孵化，在 Apache Way 的指引下努力构建一个更多样化更大的社区。

在进入孵化器之后，我期望 OpenDAL 能够：

- 吸引更多的参与：社区成员能够各自 own 不同的模块，去除对我个人的依赖，最极端情况下也能够独立健康发展。
- 聚集更多的使用：OpenDAL 能够在更广的范围取得采用，逐步实现其愿景。
- 提供更多的绑定：OpenDAL 能够把自己的能力带到其他语言社区（比如 Python 和 Node.js），提供一个稳定可靠的存储访问接口。
- 支持更多的服务：OpenDAL 在支持对象存储的基础上，还可以支持更接近用户的存储平台，例如 Google Drive、Dropbox 等，为更多有趣的应用赋能。

---

感谢一路相伴的朋友们，让我们一起改变世界吧～
