项目简介

今年,中科院软件所继续举办 “开源软件供应链点亮计划——暑期2024” 项目。该项目与 Google Summer of Code 形式类似:开源社区提供项目需求并提供导师(mentor),在校学生利用暑期时间进行开发,主办方为顺利完成的项目提供一定额度的奖金。无论 GSoC 还是“点亮计划”,都是一种非常好的开源实践范式,能够有效增进高校学生对开源的理解、增加与真实社区的接触,并积累宝贵的经验。本次 TUNA 协会将继续作为社区加入这一计划,提供若干项目需求。TUNA 愿意和大家一起为国内的开源生态添砖加瓦,欢迎有能力、有热情、有时间的小伙伴们参加。

2023 年,TUNA 基于自身与上游需求,共立项 TUNA 镜像站帮助文档、清华大学网络学堂助手更新迭代、flutter-nfc-kit 更新迭代等多个方面的 5 个项目,4 个项目顺利结项,其中 清华大学网络学堂助手(Learn Helper)更新迭代(学生:王铮,导师:陈晟祺)获评最佳质量奖。详情可见 TUNA 项目页面官网公示

你也可在活动官网查看 TUNA 的项目列表

项目说明会将于 5 月 11 日举行,活动细节见 https://tuna.moe/event/2024/ospp2024/

本页最后更新时间:2024/05/10

注意事项

下面是一些通用的注意事项:

  • 请先详细阅读 活动首页 的介绍、日程安排、FAQ 等,对活动形式和流程有一个基本的认识。
  • 在决定报名前,首先邮件联系导师进行交流,简单地介绍一下你自己。
  • TUNA 成员大多使用 Telegram 作为即时通讯工具,而非 QQ 或微信。希望你能注册并加入 TUNA 群组以进行更细致的讨论(加入方式见本页面底部)。
  • 不要担心太难/工作量太大,在截止日期前,项目内容都是灵活可更改的。

项目列表

自有项目

以下项目从 TUNA 的实际需求而来,目前或者将作为 TUNA 的自有项目开放源码,由 TUNA 和开发者共同维护。

Rust 基于完成的异步 QUIC

  • 项目页面:https://summer-ospp.ac.cn/org/prodetail/24c480487
  • 项目描述:QUIC 协议是 HTTP3 的基础,是新一代网络通信的基石。Rust 的 QUIC 生态处于起步阶段,仅在 tokio 这类基于就绪(Ready)的异步运行时上有成熟实现。然而,操作系统的最新发展(如 io-uring)表明,基于完成(Completion)的异步将是高性能 IO 的未来,而 Rust 的生态尚未完全就这一未来做出完善的应对。本项目希望为一个跨平台的、基于完成的异步运行时 compio 完善在 QUIC 方面的生态。
  • 项目难度:进阶
  • 项目社区导师:王宇逸
  • 导师联系方式:Strawberry_Str (at) hotmail.com
  • 项目产出要求:
    1. 为 compio 项目添加使用 QUIC 协议的 Endpoint, Connection 和 Stream。
    2. 编写单元测试并通过 CI,合并入 compio 项目主线。
    3. (可选)以 QUIC 为基础加入 HTTP3 客户端和/或服务端支持
  • 项目技术要求:
    1. 使用 Rust 语言实现
    2. 基于完成的异步编程,如 IOCP 或 io-uring
    3. 理解 Rust 在基于完成的异步中需要做的特殊处理
    4. QUIC (RFC 9000)
  • 相关的开源软件仓库列表:

上游项目

下面的项目非 TUNA 维护,由 TUNA 成员和相应的上游社区成员(可能为同一人)共同担任导师。项目成果将以 Pull Request 的形式回馈给上游项目。

CIRCT 编译器的电路划分及 Arcilator 仿真并行化

  • 项目页面:https://summer-ospp.ac.cn/org/prodetail/24c480497
  • 项目描述:CIRCT 是基于 LLVM/MLIR 开发的电子设计自动化 (EDA) 工具,提供了硬件电路的统一中间表示、不同硬件描述语言 (HDL) 的前端和输出以及综合、仿真功能。目前 Chisel HDL 使用 CIRCT 作为其后端。

    CIRCT 中的仿真器后端目前正在进行活跃开发中,原理是电路中间表示下降到 LLVM 方言上,将 HDL 所定义的电路直接编译为对应的软件仿真器。这一编译器整体称为 Arcilator (和 Verilog 仿真编译器 Verilator 对应),在 CIRCT 中主要参与的方言是 ARC 方言。目前 Arcilator / ARC 只支持单线程仿真,为了进行多线程仿真需要进行电路划分以及线程之间的同步工作。本项目的目标是为 Arcilator / ARC 添加初步的多线程仿真支持。

  • 项目难度:进阶
  • 项目社区导师:刘晓义
  • 导师联系方式:circuitcoder0 (at) gmail.com
  • 项目产出要求:
    1. 添加 Arcilator 中的电路划分支持:添加一个 LLVM Pass,将电路整体划分为多个可以单独仿真的仿真域,同时确定仿真域之间需要交换的数据。
    2. 将 Arcilator 多个仿真域的仿真并行化:在上述 Pass 中额外将仿真域的任务分配到多个线程上。线程的创建、同步可以由 Runtime library 提供,也可以直接由 Pass 生成。
  • 项目技术要求:
    1. 对添加 LLVM 编译器的编译 Pass 有经验。本项目最终将实现为一个 CIRCT 中可以打开的 LLVM Pass。
    2. 推荐对集成电路设计和 HDL 语言 (例如 SystemVerilog, VHDL, Chisel 等)有所了解。本项目中处理的 IR 将会是由上层 HDL 语言转换而来,具体的划分方式会受 HDL 语言中相应的构造(模块、寄存器等)影响。
    3. 推荐对于多线程程序的优化有所了解。本项目所完成的电路划分算法将用于软件或多片硬件仿真,降低多线程程序的通信、同步开销可能会对最终的端到端性能有所影响。
  • 相关的开源软件仓库列表:

RISC-V 向量处理器 T1 性能评估框架

  • 项目页面:https://summer-ospp.ac.cn/org/prodetail/24c480491
  • 项目描述:T1 (https://github.com/chipsalliance/t1) 是一个高性能RISC-V Vector 处理器生成器,本项目旨在为 T1 RISC-V Vector Machine 提供基于 WASM 的体系结构性能评估前端框架,将来自 T1 仿真输出的波形和日志文件中与性能相关的数据进行可视化。本项目的工作将被用于推进软硬件协同设计,提高 T1 处理器在真实软件运行环境下的性能表现。
  • 项目难度:进阶
  • 项目社区导师:刘玖阳
  • 导师联系方式:liu (at) jiuyang.me
  • 项目产出要求:
    1. 对 T1 产生的 fst 格式波形图、仿真日志进行分析
    2. 针对所有的体系结构状态进行可视化
  • 项目技术要求:
    1. 具有一定的用户界面开发经验,在本项目中可以完成用户界面的设计和实现工作
    2. 推荐使用 egui (https://www.egui.rs) 实现 UI
    3. 对处理器内部结构有所了解,以便确定能够有效表现性能数据的关键信号或日志输出
  • 相关的开源软件仓库列表:

基于前端技术栈的 OpenStreetMap 中公共交通关系编辑器

  • 项目页面:https://summer-ospp.ac.cn/org/prodetail/24c480495
  • 项目描述:OpenStreetMap 是英国人 Steve Coast 于 2004 年发起的以知识开放为原则的地图项目。其数据模型对于公共交通等现实中抽象要素采用的关系描述方式较为复杂,OSM 基金会从 2016 年至今每年都往 GSoC 提交公共交通相关的项目,但是成果和具有技术债的工具链关系密切,可用性不强。本项目旨在以现代化的前端技术栈,实现一个可跨平台使用且操作简单交互明了的编辑器。本项目过程中在交互和功能性上会与 OSM 中国社区合作。
  • 项目难度:进阶
  • 项目社区导师:赵家成
  • 导师联系方式:me@jacksonzhao.email
  • 项目产出要求:
    1. 能够在编辑器内添加站点并创建线路关系(关系内成员顺序可变)或删除关系并通过OSM API 0.6上传。
    2. 能在只有站点数据的情况下,根据图幅中路网和控制点自动计算可行的经由,和基于前述经由自动切割较长的路径以便于添加关系。
    3. 在本次 OSPP 项目中不需要整体完成最终的平台,但需实现至少包含主要功能的原型。
  • 项目技术要求:
    1. 能够使用前端技术栈开发具有复杂界面的跨平台程序,对 WebGL 有了解。(有用过 Cesium.js/MapboxGL 等 WebGL 的 GIS 框架属于加分项)
    2. 有一定算法能力,对导航算法的实现有一定的了解。(有用过开源的导航路由工具如 OSRM、Graphhopper、Valhalla 等属于加分项。)
    3. 对 OpenStreetMap 的数据模型和API有所了解。(对社区文化和协作方式有了解或曾使用过相关数据进行分析等利用可视为加分项)
    4. 推荐有一定用户界面开发经验。取决于技术栈选取,可能需要有一定 WebAssembly、图形学知识基础。
  • 相关的开源软件仓库列表: