项目简介

今年,中科院软件所与华为 openEuler 项目继续共同举办 “开源软件供应链点亮计划——暑期2021” 项目。本次 TUNA 协会将继续作为社区加入这一计划,提供若干项目需求。欢迎有能力、有热情、有时间的小伙伴们参加,也欢迎 TUNA 成员们提出更多需求。TUNA 愿意和大家一起,为国内的开源生态添砖加瓦。

2020 年,TUNA 基于自身与上游需求,共提出了涉及镜像站基础设施、应用软件移植与更新、发行版维护、性能优化等多个方面的 14 个项目,并有 8 个项目通过立项,7 个项目顺利结项,一个项目(将 xgboost 与 prophet 等数据科学软件库集成到 Debian GNU/Linux,学生周默,导师 Aron Xu)获评最佳质量奖。详情可见 TUNA 项目页面官网公示。 TUNA 社区代表也参与了后续举办的开源软件供应链 2020 峰会(可见 TUNA 博客),与其他社区积极地进行交流。

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

我们将于五月份举办项目说明会,具体时间待定。

本页最后更新时间:2021/4/23 23:00

注意事项

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

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

项目列表

自有项目

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

开源弹幕系统改进

  • 项目描述:弹幕是常用的听众与讲者的互动手段。TUNA 开发了自己的 C/S 弹幕系统 danmaQ(见下面的仓库),使用于多种场合,也被多个发行版收录。其服务端使用 Python 编写,客户端使用 Qt 编写,基本实现了跨平台。然而,目前该项目缺乏维护,代码比较陈旧,一些功能缺乏(如 Web 弹幕墙)、不完善(如审核)或已经损坏(如微信互联)。此外,清华大学计算机系科协亦有一套自己实现的弹幕系统 Comment9(见下),使用 Node.js 编写。它与 danmaQ 相比,具有一些高级功能(如多个活动、弹幕墙、多路审核、支持硬件弹幕机),但缺乏弹幕属性配置等。我们希望,整合当前两个系统的功能,改进得到一套全功能的开源弹幕系统,覆盖用户需求。
  • 项目难度:高
  • LICENSE:GPL v3
  • 项目社区导师:陈晟祺 (@Harry-Chen on GitHub)
  • 导师联系方式:shengqi.chen (at) tuna.tsinghua.edu.cn
  • 合作导师联系方式:张宇翔,yuxiang.zhang (at) tuna.tsinghua.edu.cn, @z4yx on GitHub
  • 项目产出要求:
    • 总体要求
      • 尽可能保持与当前实现的兼容性
      • 所有代码使用 GPLv3 许可证开源
      • 所有项目均需要中英双语支持
    • 弹幕服务端(建议依旧使用 Python + Flask)
      • 支持独立的多个活动,按需留存记录,能够导出
      • 发布、订阅、审核可以单独设置密码
      • 每个活动分别支持多种接入(至少包括网页、微信、Telegram)
      • 支持多种不同属性的弹幕(颜色、位置、速度)
      • 支持 Web 弹幕墙(用户可通过命令设置头像、昵称等)
      • 具有 Web 版管理后台,支持审核并设置属性(人工置顶等)
      • 具有 HTTP / WebSocket API,能够主动向客户端推送弹幕
      • 保留弹幕机配置功能
      • 有良好的性能表现
      • 配备 Dockerfile,能够简便地部署运行
    • 弹幕客户端(Qt)
      • 支持多显示器,并能够选择弹幕在哪些显示器上工作
      • 在各个系统上均正确支持高分屏(HiDPI)
      • 能够根据服务器推送的弹幕和属性,正确进行绘制
      • (可选)支持故障恢复(自动重连+跳过已经发送的弹幕)
      • 有良好的性能表现
  • 项目技术要求:
    • Qt + Python + Node.js 编程(基本语言、简单GUI、使用网络框架)
    • 网络编程(WebSocket / HTTP 协议)
    • NoSQL 数据库(redis / mongoDB)
    • 简单前端设计(CSS / Javascript)
  • 相关的开源软件仓库列表:

跨平台 NFC 读写套件的维护与升级

  • 项目描述:我们基于 Flutter 框架,实现了跨平台的 NDEF 格式解析库、移动端 NFC 框架和 NFC 信息读取应用 NFSee。目前,Flutter 已经发布了 2.0 版本,引入了较多的变化,迁移到新框架有一定的工作量。同时,在使用过程中,这些库积累了一些 bug 和功能请求,需要进一步的修复和实现。
  • 项目难度:中
  • LICENSE:MIT
  • 项目社区导师:陈晟祺
  • 导师联系方式:shengqi.chen (at) tuna.tsinghua.edu.cn
  • 项目合作导师:党凡(fan.dang (at) tuna.tsinghua.edu.cn)
  • 项目产出要求:
    • 将提供的三个项目均迁移到 Flutter 2.0 版本
    • 维护 NDEF 库,修复 bug,提供更多格式支持
    • 维护 flutter_nfc_kit 库,修复 bug,实现流式读卡接口(可选),并相应更新文档
    • 维护 NFSee,修复界面 bug,并添加更多卡片支持(如果有)
  • 项目技术要求:
    • 使用过 Dart 编程语言和 Flutter 开发框架(或能够及时学习)
    • 了解 NFC 基础知识和常见的 NFC 标准(导师可提供相关文档指导)
    • 有支持 NFC 的 Android / iOS 设备(可提供,但具备更佳)
  • 相关的开源软件仓库列表:

Windows 平台 SSH agent 的统一实现

  • 项目描述:在 Windows 平台使用 ssh agent 远不及 Linux 平台方便。通常 ssh agent 需要满足以下两个角色:
    • 保管用户的 ssh private key 或是和 smartcard 通信
    • 接受来自 ssh 客户端的 authentication 请求

    Windows 上存在 PuTTY (pageant),Win32 OpenSSH, WSL OpenSSH 等多种 ssh 实现,有 pageant socket 和 windows named pipe (OpenSSH) 两种 agent 通信协议。同时,agent 实现也有 GnuPG agent (simulated pageant, for gpg smartcard), Windows OpenSSH agent 两种。本项目需要参与学生实现一个 ssh agent 协议翻译器,实现不同 ssh 客户端使用同一个 ssh agent 实例的任务。

  • 项目难度:高
  • LICENSE:GPLv3
  • 项目社区导师:许朋程
  • 导师联系方式:i (at) jsteward.moe
  • 项目产出要求:
    • Windows 平台的 agent 翻译中间件
    • 支持 PuTTY, WSL2 OpenSSH, Win32 OpenSSH 作为客户端
    • 支持 Win32 OpenSSH agent, PuTTY Pageant, Win32 GnuPG emulated ssh agent 作为 agent 服务
      • GnuPG agent 需要支持 smartcard authentication
    • 支持客户端进行 authentication 操作
    • 支持客户端进行 ssh agent forwarding
    • 支持简单的管理操作,如:
      • ssh-add -l 列出所有 public key signature
      • ssh-add -L 打印所有完整 public key
      • 添加一个 key 到 ssh agent
      • 删除一个 key
    • 对于 WSL 支持,利用 Windows 10 17063 引入的 AF_UNIX socket 功能(详见 文档)而不是 socat
  • 项目技术要求:
    • 熟悉任何一种 Windows 平台上可以 开箱即用 的的编程语言(推荐 C++/C# .NET,也包括脚本语言,如 PowerShell)
    • 熟悉 Windows named pipe, Unix socket (on Linux and Windows) 相关操作
    • 了解 ssh agent 的工作机理和使用方法
    • 了解 gnupg 使用方法(ssh 模拟部分)
  • 相关的开源软件仓库列表:

MirrorZ:镜像站搜索引擎——镜像站状态的表示、收集与利用

  • 项目描述:国内镜像站较多,但其内容、同步状态、网络环境各不相同。例如 OpenWrt 镜像,只有部分镜像站拥有 snapshots 的内容(参考此处),又例如一些镜像的同步状态落后几天乃至几周(参考此处),其使用的同步后端也各不相同,又例如一些高校的镜像站对校外限速,例如其接入的线路是教育网,对三大运营商用户来说访问较为不理想。之前的 mirrorhub 项目静态地通过用户的网段进行负载均衡,目前的 mirrorz 只有实验性的自动跳转后端与搜索后端,上述实现的指标与功能都不够完善,效果也不理想,所以一个兼顾上述三项内容的镜像站搜索引擎是我们所需要的。
  • 项目难度:中
  • LICENSE:MIT
  • 项目社区导师:郑鈜壬 (@ZenithalHourlyRate on GitHub)
  • 导师联系方式:hongren.zheng (at) tuna.tsinghua.edu.cn
  • 项目产出要求:
    • 对镜像站的状态有较好的表示
    • 对镜像站各镜像的同步状态有较好的表示
    • 将上述指标进行收集
    • 基于收集的指标实现自动跳转或反代的后端
    • 如果可能,实现一个搜索后端
  • 项目技术要求:
    • 爬取镜像站状态的爬虫(例如使用 Python、Node.js 实现)
    • 数据库 (例如 InfluxDB)
    • 高性能的后端 (例如使用 Rust、Go 实现)
  • 相关的开源软件仓库列表:

SCIM Qt5 移植

  • 项目描述:SCIM 是历史悠久的输入法框架,早期为 GNU/Linux 系统的中文本土化立下了汗马功劳,然而近年来 SCIM 的开发团队已经不再活跃,开发停滞,项目处于维护状态。当前 SCIM 依旧可以在各大发行版上顺畅使用,唯一缺失的功能是对 Qt5 的支持。本项目计划把 SCIM 移植到 Qt5。
  • 项目难度:高
  • LICENSE:LGPL v2.1
  • 项目社区导师:续本达
  • 导师联系方式:heroxbd (at) gentoo.org
  • 项目产出要求
    • 运行于 Qt5 的 SCIM
    • 修复 bugs.debian.org 上的其它 SCIM bug
  • 所需知识和技能
    • 有 SCIM 使用经验
    • C++ 编程能力
    • Qt 编程经验
    • 有一年以上 Debian 使用经验
  • 相关的开源软件仓库列表
    • SCIM: https://github.com/scim-im/scim/
    • Debian SCIM 包: https://packages.qa.debian.org/s/scim.html
  • 说明:本项目由于上游已经不再活跃,社区计划 fork 并接手这一项目,因此作为社区自有项目发布。

上游项目

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

Gentoo Android App

  • 项目描述:Gentoo on Android 可以在 Android 上运行 Gentoo Prefix,实现无性能损耗的完整的 GNU 环境。然而,当前的 Gentoo on Android 一方面需要 root 权限,另一方面需要手动安装,亟需一个不需 root 的 Android App 完成安装,更方便地把手机转换成开发和生产工具。在 Android 的系统中,每个 App 有一个专有的用户 uid 和一个保留的空间存放数据,适合嵌入一个这个 uid 下的 Gentoo Prefix 实例,解决当前 Gentoo on Android 的两个问题。
  • 项目难度:高
  • LICENSE:GPL v2
  • 项目社区导师:许朋程
  • 导师联系方式:i (at) jsteward.moe
  • 合作导师联系方式:
    • 续本达,heroxbd (at) gentoo.org
    • 陈晟祺,shengqi.chen (at) tuna.tsinghua.edu.cn
  • 项目产出要求
    • 自由开源的 Gentoo Android App。
  • 所需知识和技能
    • 有 Android App 开发能力
    • 有一年以上 Gentoo 和 Android 使用经验
    • 熟练使用 Git
  • 相关的开源软件仓库列表
    • Gentoo on Android: https://wiki.gentoo.org/wiki/Project:Android
    • Nix on Android: https://f-droid.org/en/packages/com.termux.nix

完善 Gentoo ROCm GPGPU 框架

  • 项目描述:ROCm 是 AMD 显卡的自由开源的科学计算系统,HIP 是 ROCm 的 CUDA 兼容层,提供类似于 CUDA 的 API。然而 ROCm 和 HIP 的文档校为缺乏,除了官方指定的个别平台之外,安装和部署较为困难。Gentoo Linux 作为一个元发行版,已经率先完成了对 ROCm 的支持。但是其构建系统仍有一系列问题不能满足 Gentoo 社区的官方要求。本项目将完善 Gentoo 的 ROCm 软件包,并为 PyTorch, Tensorflow 提供 AMD 设备上的进行方案,完成发行版上开源 GPGPU 框架的布局。
  • 项目难度:高
  • LICENSE:GPL v2
  • 项目社区导师:续本达
  • 导师联系方式:heroxbd (at) gentoo.org
  • 项目产出要求:
    • 修复 Gentoo 的 ROCm 软件包、PyTorch-ROCm 软件包和Tensorflow-ROCm 软件包的构建系统 bug
  • 所需知识和技能:
    • 有一年以上 Gentoo 使用经验
    • Gentoo portage/ebuild 理解和写作能力
    • shell 编程能力
    • 熟练使用 Git
  • 相关的开源软件仓库列表
    • ROCm: https://github.com/RadeonOpenCompute/ROCm
    • Gentoo Portage 软件仓库: https://gitweb.gentoo.org/repo/gentoo.git
    • Gentoo Science Overlay:https://github.com/gentoo/sci/

Emacs Jupyter client

  • 项目描述:Emacs 是久负盛名的编辑器,以其高度的可编程扩展性闻名于世。Jupyter 是基于 HTTP 的远程异步运行系统,在科学计算有广泛的应用。EIN 项目为 Emacs 提供 Jupyter 客户端,可以弥补 Jupyter 网页上输入功能薄弱的劣势,把 Emacs 的强大编辑功能与 Jupyter 异步执行功能有机结合,成为 literate programming 的最强方案之一。但是,EIN使用的 HTTP 框架由基于 callback 的异步编程框架,维护较为困难,本项目将使用 coroutine 的函数式编程模型重写 EIN,完成现代的 Emacs Jupyter 客户端。
  • 项目难度:高
  • LICENSE:GPL v2
  • 项目社区导师:续本达
  • 导师联系方式:heroxbd (at) gentoo.org
  • 项目产出要求
    • 使用函数式 coroutine 重写 EIN 的异步模块,提升 EIN 的稳定性。
  • 所需知识和技能
    • 有一年以上 Emacs 使用经验
    • 有 Emacs LISP 编程经验
    • 熟练使用 Git
  • 相关的开源软件仓库列表
    • EIN – emacs-ipython-notebook: https://github.com/millejoh/emacs-ipython-notebook