欢迎!以下是 AOSC 提供的可供参与的项目主题。您可以从中挑选并联系项目导师,也可以在社区 IRC、Telegram 群组或邮件列表(随意)中和我们讨论您感兴趣的话题。
请先仔细阅读学生指南。
发行版构建自动化:打包调度器
社区主要项目 AOSC OS 的一部分构建过程仍然依赖手工操作。即使大部分繁杂的工作已经能为数个社区项目很好地完成,AOSC OS 仍然面临着社区人手严重不足而带来的更新速度不足及潜在质量缺陷问题。于是我们希望建立一套切合社区实际情况的,能将发行版构建 95% 的操作自动化的基础设施来解决上述问题,以求 AOSC OS 的可持续发展。
目前分布式打包方案中包括构建机、调度器、软件包仓库管理和触发器四个部分,其中构建机和调度器是最重要的部分。本项目为编写一套功能较为完整的软件包构建调度器,以实现像 BOINC 分布式科学计算那样,自动分配打包任务、回收二进制软件包和打包时的日志和统计信息。调度器的调度模型、依赖解析已经实现,需要设计并实现的是接口和管理功能。
- 项目难度:高
- 项目社区导师:Dingyuan Wang
- 导师联系方式:gumblex@aosc.io
- 项目产出要求:
- 主要目标:实现打包任务的分配和回收
- 打包任务元数据包和编译结果二进制包的管理
- 编译过程日志和统计数据的管理
- 设计并实现本地传输接口和 HTTP 接口
- 密码学双向验签、错误处理和汇报机制
- 可选/预留:软件包测试管理
- 次要目标:实现调度器的前端可视化界面
- 实现打包统计数据的可视化
- 实现实时观看输出日志
- 简洁明瞭实用即可
- 主要目标:实现打包任务的分配和回收
- 项目技术要求:
- 熟悉 Python 3 编程语言(主要开发语言)
- 会使用 SQLite 或 PostgreSQL 数据库
- 了解常见 Linux 发行版的系统结构及其工具
- 会使用 Tornado 或其他 Python Web 框架
- 相关的仓库:
- https://github.com/AOSC-Dev/aoinb (自动化项目主仓库)
- https://github.com/AOSC-Dev/abbs-dep (依赖解析)
- https://github.com/AOSC-Dev/ciel (基于 Systemd 容器和 Overlayfs 的容器化构建设施)
- https://github.com/AOSC-Dev/acbs (使用构建定义树的构建设施)
- https://github.com/AOSC-Dev/autobuild3 (使用单个软件包构建定义的构建设施)
- 开源协议:GPL 2.0
发行版构建自动化:自动化测试框架
目前 AOSC 的软件包存在一定的质量问题,且已经有了初步的排查方案。我们希望在编译时或编译后主动地将质量问题检测出来,停止编译和发布。本项目需要在当前的打包流程中增加测试环节来确保软件包的质量。
- 项目难度:中
- 项目社区导师:Dingyuan Wang
- 导师联系方式:gumblex@aosc.io
- 合作导师联系方式:白铭骢 <jeffbai@aosc.io>
- 项目产出要求:实现自动测试并汇报软件包质量问题
- 实现在编译的各个环节对已定义问题的检测
- 输出人和机器可读的测试报告(可以分开)
- 实现软件包的安装测试(检查依赖)
- 实现对命令行程序的冒烟测试
- 实现对图形界面程序的冒烟测试(主要难点)
- 在已有软件包的打包元数据中添加测试方法的描述
- 尽量能半自动地添加,至少100个
- 项目技术要求:
- 熟悉 Debian 软件包管理
- 会使用 Bash、Python、Tcl 等脚本编程语言
- 了解软件测试方法
- 相关的仓库:
- https://github.com/AOSC-Dev/p-vector (软件包仓库管理,包括质量问题扫描)
- https://github.com/AOSC-Dev/autobuild3 (使用单个软件包构建定义的构建设施,有些功能需要在此添加)
- https://github.com/AOSC-Dev/packages-site (软件包网站)
- 开源协议:GPL 2.0
安装程序 DeployKit 的实现
社区项目 DeployKit 是未来 AOSC OS 的安装和恢复程序。该程序有两种模式:
- 作为安装向导指引用户正确地安装 AOSC OS;
- 作为恢复向导指引用户在轻微的系统配置错误中恢复系统;
目前,DeployKit 使用 GTK 3 和 Vala 编程语言基本实现了安装向导的图形用户界面,但尚未实现安装向导的实际操作部分(即 DeployKit 还只是个“空壳”)。本项目的目标是按照社区提供的 AOSC OS 安装指引,将这部分原本需要手动操作的安装流程实现到 DeployKit 上。
- 项目难度:中
- 项目社区导师:黎民雍(以俊德)
- 导师联系方式:lmy441900@aosc.io
- 项目产出要求:
- 实现 DeployKit 的系统安装部分
- 实现安装过程在图形用户界面上的可视化(进度展示)
- 项目技术要求:
- 了解基本的 Linux 命令
- 了解 Vala 或其类似编程语言,如 C# 和 Java
- 了解 GObject、GLib 和 GTK 编程
- 相关的仓库:
- https://github.com/AOSC-Dev/DeployKit
- 开源协议:MIT
自由及开源软件简中本地化工作
当前我国国内有相当数量的 Linux 及各大开源或自由软件 (F/OSS) 使用者,但在使用过程中,用户们不难发现,各种软件的简中翻译及本地化质量参差不齐,错漏繁多。尤其主流桌面环境如 GNOME 及 KDE 简中翻译率并不理想;而又有一些如 NetSurf 的知名开源项目则完全没有翻译。该项目的主要目的是改善当前本地化质量及覆盖率。
- 项目难度:低
- 项目社区导师:白铭骢
- 导师联系方式:jeffbai@aosc.io
- 合作导师联系方式:刘子兴 <liushuyu@aosc.io>
- 项目产出要求:
- 完善(或改善,如时间不足)现有开源软件的简中翻译,包括但不限于 CUPS、GNOME、Plasma、MATE Desktop 及 NetSurf(其余项目根据考察决定)。
- 审阅并修改现行大陆简中自由软件本地化工作指南(1.5.4 版),修改后通知各大陆简中 (zh_CN) 翻译小组及社区。
- 项目技术要求:
- 通读大陆简中自由软件本地化工作指南(1.5.4 版),熟知大陆简中标点、句式及选词规范及技巧。
- 了解主要本地化软件框架(如 GNU Gettext)及工具(如 Poedit 及 Lokalize。
- 其余工作流程及技巧将于项目期间沟通及培训。
- 相关的仓库:
- https://github.com/AOSC-Dev/translations
- 开源协议:视上游项目而定
为 libinput 框架实现“划圈滚动 (Circular Scrolling)”
在 Wayland 及如 GNOME 等现代桌面的推动作用下,libinput 即将取代当前诸多碎片化的 X11 输入驱动(如 evdev
及 synaptics
,甚至是更老的 mouse
及 keyboard
),为用户及开发者带来一定便利。但在 libinput 的实现过程中,上游开发者由于人力有限,选择抛弃了一些他们主观认为不常见的硬件特性的支持。而被抛弃的特性之一是“划圈滚动”,即在触摸板上用手指划圈滚动(类似 iPod 的操作),这一特性在滚动长页面时可有效提高操作精度并降低疲劳。
- 项目难度:中
- 项目社区导师:白铭骢
- 导师联系方式:jeffbai@aosc.io
- 合作导师联系方式:刘子兴 <liushuyu@aosc.io>
- 项目产出要求:
- 基于先前 xf86-input-synaptics 的代码移植
circular-scrolling
特性至 libinput 上游。
- 基于先前 xf86-input-synaptics 的代码移植
- 项目技术要求:
- 具有一定上游参与经验,可流畅与其他上游开发者用英文进行交流。
- 分析项目 API 并编写及移植 C 代码。
- 编写特性测试模组。
- 相关的仓库:
- https://github.com/freedesktop/xorg-xf86-input-synaptics
- https://gitlab.freedesktop.org/libinput/libinput
- 开源协议:MIT
半自动软件包退休、封存与整理系统
软件包更新在现代社会已经不再是什么稀奇事。每天,无数软件包获得更新,有些是修复漏洞,有些是增加功能,还有些是性能优化等等。然而,并不是每一个软件包都有充分通过回归测试(Regression test),而有些更新则是主动放弃对于旧硬体的支援。由于系统的软件包仓库亦为业余爱好者维护,打包者的技术、使用的平台与配置等等亦可能导致部分软件包更新后损坏。
作为一个由历史专家带领的专业考古社区,我们提供了大量的软件包供各种不同时代与架构的硬体使用。以往,为了保证大家可以方便的切换各个版本的软件包,大量的老包被留在了系统的软件源中。再加上 AOSC 支援的架构数量在某段时间的爆发,于 2017 年时,我们的软件包仓库达到了惊人的数十 GiB 。庞大的体积对于我们自身以及各种收录了我们的开源镜像站均造成了压力。我们因此启动了Anthon Optical Storage Center (AOSC Archive) 项目,将过去的软件包从软件源中移除并收录进入 Blu-ray Disc 进行冷储存。然而使用冷储存造成的不便亦是显而易见的。如果出于各种原因,我们需要取回一个软件包进行测试,那么将会需要比较费事的人工寻找目录并取回对应光盘。另外,冷储存的成本亦是比较高的。在近期的一次检查时,我们发现有约 1%-5% 的包可能由于各种原因,在收录进入 BD 时出现了重复收录的情况。这些重复收录的包既提高了维护成本,又不具有价值。同样,整理需要取回的软件包目前也是一个非常耗费人力的工作。每次退休包时,需要寻找每个架构中有收到更新的包,并移除老包。需要把这些包适当分类并分卷放好,以便于未来取回时不需要跨越多张光盘。这一个项目就是为了解决该问题而产生的。
我们希望这个系统:
- 可以较为方便的将软件包退休,并且避免不小心移除不应当被移除的软件包。
- 可以提供检查重复的功能,以避免将一个软件包重复退休多次,白白占用资源。
- 可以提供一个软件包搜寻功能,可以方便的告知用户,需要的软件包有哪些版本,分别位于哪些光盘中。
- 可以在未来用在许多发行版上,让每个发行版都可以留下过去的软件包,在未来给大家的老机器使用。
另外,我们还希望这个系统可以快速提供一个「最小软件仓库」,仅包含最新版本的软件包,占用最少的空间。
- 项目难度:低
- 项目社区导师:张顺然 Staph. aureus
- 导师联系方式:staph@aosc.io
- 项目产出要求:
- 提供一个程序用于查询哪些软件源中的包可以被封存,哪些由于已封存,可以直接丢弃,哪些应当留在仓库中
- 提供一个程序用于封存软件包:移除以及分类归纳,可能的话,最终生成 Blu-ray ISO
- 提供一个稳定且高效的 API 可以方便的使用程式查询已封存软件包资讯
- 提供一个较为美观的用户介面用于查询已封存软件包资讯
- 如果有机会,提供一个老包请求网站,允许部分人上传包给请求者下载
- 项目技术要求:
- 封存部分如果可能,使用较少的非标准库
- 尽量做到无人工介入完成包退休封存与整理工作
- 软件包查询可以使用很少系统资源完成
- 这个系统应当可以较容易的应用于其他发行版的软件仓库
- 相关的开源软件仓库列表:
- https://github.com/AOSC-Dev/aosc-archive
- 开源协议:GPL v3 或更高版本