Skip to content

Commit

Permalink
refactor: refactor outline and docs level
Browse files Browse the repository at this point in the history
Signed-off-by: Zhenchen Wang <[email protected]>
  • Loading branch information
Plucky923 committed Jan 24, 2025
1 parent 181f5dd commit ad56abc
Show file tree
Hide file tree
Showing 21 changed files with 57 additions and 208 deletions.
12 changes: 0 additions & 12 deletions docs/ch0/index.md
Original file line number Diff line number Diff line change
@@ -1,13 +1 @@
# S0: 无意识使用阶段

**目标** :认识到开源已融入生活,了解自己日常使用的开源软件。

## 一、开源无处不在

1. **举例说明** :列举现代科技各领域广泛运用的开源软件实例,像以 Linux 为基础构建的 Android 系统,广受欢迎的浏览器 Chrome 和 Firefox,实用的办公工具 LibreOffice,还有开发人员常用的开发工具诸如 Git、Vim、Node.js 等。通过这些具体案例,展现开源软件在日常生活中的广泛存在。
2. **说明开源如何成为现代技术的基石** :深入阐述开源在诸如手机、服务器、云计算、大数据、人工智能等前沿领域所发挥的基础性、支撑性作用,揭示开源对于现代技术发展的不可或缺性。

## 二、参考任务

1. **列举自己日常使用的一些开源软件,并尝试查找它们的开源主页或仓库** :引导读者主动去发现身边的开源软件,并通过查找其开源主页或仓库,进一步深入了解这些软件背后的开源生态。
2. **调研一个开源项目的背景,了解它在行业中的应用(如 Linux、Kubernetes)** :促使读者选取典型开源项目,如 Linux 或 Kubernetes,深入探究其起源、发展历程,以及在所属行业中的广泛应用,加深对开源项目影响力的认知。
31 changes: 0 additions & 31 deletions docs/ch1/index.md
Original file line number Diff line number Diff line change
@@ -1,32 +1 @@
# S1: 了解开源阶段

**目标** :初步了解开源的概念、历史、许可证及其影响,培养开源安全意识。

## 一、开源是什么

1. **开源是一种软件类型** :明确开源软件的定义,并与闭源软件进行对比,凸显二者差异。
2. **开源是一种软件开发方式** :列举开源协作的典型特点,例如社区贡献模式、代码开放共享机制等。
3. **开源是一种协作与创新模式** :详细阐释如何借助开源途径达成跨组织的协作,实现技术层面的创新突破。
4. **开源是一种产业生态** :深入剖析开源如何推动技术持续演进,以及构建商业生态的过程,可参考红帽的成功范例。

## 二、开源历史

1. **时间线和重要节点** :梳理从 Unix 到 GNU,再到 Linux、Git 直至 Github 的发展脉络,标注关键转折点。
2. **自由软件运动与 Richard Stallman 的贡献** :阐述自由软件运动的发起背景、发展历程,以及 Richard Stallman 在其中发挥的关键引领作用。
3. **开源运动的兴起与 Open Source Initiative (OSI)** :讲述开源运动蓬勃兴起的时代背景,以及 Open Source Initiative (OSI) 在推动开源规范化进程中的重要地位。

## 三、开源许可证

1. **介绍许可证的作用和开源定义(Open Source Definition)** :系统阐述许可证在开源生态中的核心功能,精准解读开源定义的内涵。
2. **常见开源许可证**
3. **如何选择许可证** :结合实际项目案例,讲解依据项目特性、发展规划等需求,恰当选择适配的许可证类型。

## 四、开源安全

1. **开源软件供应链安全** :以 Log4j 漏洞案例为切入点,深度剖析漏洞在开源软件供应链中的传播原理与路径。
2. **安全最佳实践** :介绍开源软件的审计和管理策略,例如借助工具 Dependabot 进行有效管控。

## 五、参考任务

1. 创建 Github 帐号,初始化一个简单的项目(如 README 文件)。
2. 为该项目选择一个开源许可证,并撰写一段文字解释选择理由。
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
27 changes: 0 additions & 27 deletions docs/ch2/index.md
Original file line number Diff line number Diff line change
@@ -1,28 +1 @@
# S2: 拥抱开源阶段

**目标** :开始使用开源软件,初步了解开源项目的协作模式。

## 一、开源协作模式

1. **如何贡献** :详细讲解 Issue、Pull Request、Code Review 等操作在开源项目协作中的关键作用与具体流程,助力参与者明确自身在开源项目中的发力点。
2. **工具与平台** :介绍如 Github、Gitlab 等主流开源项目托管平台的功能特性、使用优势,方便开发者高效管理开源项目。
3. **开源项目工作流** :全面梳理从发现 Issue 问题,到提交 Pull Request 解决问题,再到 Code Review 审核完善的一整套完整流程,让参与者对开源协作有清晰的认知框架。

## 二、开源软件的替代方案

**举例** :列举日常生活与工作场景中,可用开源软件替换闭源软件的典型案例,如以 Linux 系统替换 Windows 系统,用 LibreOffice 替代 Microsoft Office,拿 GIMP 取代 Photoshop,使 VLC 成为商业播放器的替代之选,展现开源软件的实用性。

**选择适合的发行版**

* **桌面发行版** :推荐适合桌面端使用的 Ubuntu、Deepin、OpenEuler 等发行版,阐述其各自的界面风格、功能特性、适配场景,帮助用户精准选型。
* **服务器发行版** :介绍 CentOS Stream、Alpine 等常用于服务器领域的发行版优势,如稳定性、资源占用、运维便利性等,指导用户按需抉择。

## 三、活动组织

1. **了解和参与开源社区活动** :列举如 Linux 101、OpenEuler 社区活动等具有代表性的开源社区活动,阐述参与其中可获得的知识增长、人脉拓展、技术交流等诸多益处。
2. **通过参与活动了解更多开源工具和资源** :强调借助社区活动这一平台,挖掘更多实用的开源工具、优质资源,拓宽技术视野。

## 四、参考任务

1. 找到一个可以替换闭源工具的开源软件,并将其应用到日常工作中。
2. 记录切换开源软件的过程、问题和解决方案,撰写一篇博客分享。
1 change: 1 addition & 0 deletions docs/ch2/sec1/terminology.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@

File renamed without changes.
File renamed without changes.
55 changes: 0 additions & 55 deletions docs/ch3/index.md
Original file line number Diff line number Diff line change
@@ -1,56 +1 @@
# S3: 贡献开源阶段

**目标** :学习开源基础技能并通过代码或文档的贡献实践开源。

## 一、开源基础技能

### **Git 学习**

* **Git 的基本操作** :系统讲解 clone、commit、push、pull、merge 等基础操作的命令、用途与使用场景,帮助初学者快速上手。
* **Git 的原理** :深入剖析分支、HEAD 指针、合并冲突等核心概念,助力开发者理解 Git 底层运行逻辑,更好应对复杂情况。
* **进阶技能** :介绍使用 Git 提交签名、提交模板的方法与优势,提升代码提交的规范性与可追溯性。

### **代码托管平台**

* **Github、Gitlab、Gitee 等的使用技巧** :分享各大主流代码托管平台的特色功能、高效使用诀窍,如项目搜索、个性化设置等,满足不同开发者需求。
* **项目管理功能** :详细阐释 Issue、Milestone、Wiki 等功能在开源项目管理中的运用,助力团队协作与项目推进。

### **如何写好一个 commit message**

* **Linux Kernel Patch** :解析 Linux Kernel 项目中 commit message 的规范与范例,学习行业标杆经验。
* **Conventional Commits** :介绍通用的 Conventional Commits 规范,掌握一种广泛适用的提交信息编写格式。
* **RustSBI 项目的 commit message 规范** :以 RustSBI 项目为例,了解特定项目的个性化要求,拓宽规范认知广度。

### **文档撰写**

讲解开源项目中文档撰写的重要性、基本规范(如格式、语言风格)、常用工具(如 Markdown 编辑器),培养撰写高质量文档的能力。

## 二、计算机基础知识

### **The Missing Semester of Your CS Education**

推荐学习这一经典课程资源,填补计算机科学知识体系漏洞,夯实基础。

### **不同方向的简单介绍与开源项目**

* **系统开发** :介绍 Linux Kernel、QEMU 等开源项目,阐述系统开发领域的关键技术、应用场景,帮助开发者找准兴趣点。
* **Web 开发** :讲解 React、Vue 等热门 Web 开发框架对应的开源项目,分析其优势、适用范围,开启 Web 开发探索之门。
* **网络** :剖析 WireGuard、Cilium 等网络相关开源项目,揭示网络领域前沿技术与创新应用。
* **数据分析** :介绍 Pandas、Jupyter 等数据分析利器背后的开源项目,了解数据分析流程与实践要点。
* **人工智能** :解读 TensorFlow、PyTorch 等人工智能框架所属的开源项目,洞察人工智能发展趋势。
* **找到适合自己的方向并选择活跃的开源项目** :引导开发者依据自身兴趣、技能专长,在众多方向中筛选合适的开源项目深入参与。

## 三、表达与交流的重要性

1. **如何清晰表达问题和想法** :传授有效沟通技巧,如组织语言逻辑、突出重点,确保在开源协作中准确传达信息。
2. **如何有效进行跨文化交流** :鉴于开源社区的全球化特性,分享跨文化交流注意事项,如尊重文化差异、避免误解,促进国际合作顺畅。

## 四、学会如何提问

1. **如何查找资料** :教导善用 Google 和 Stack Overflow 等搜索引擎与技术问答平台,快速定位所需知识,自主解决常见问题。
2. **提问的基本规范** :强调明确描述问题、给出复现步骤的重要性,提高问题被解答的效率,维护良好社区氛围。

## 五、参考任务

1. 学习使用 Git,完成一次 Fork 并提交 PR 的流程。
2. 选择一个开源项目,通过贡献文档或代码提交一个 PR。
1 change: 1 addition & 0 deletions docs/ch3/sec1/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@

File renamed without changes.
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@

# 代码托管平台简介

> 本课程旨在让学生了解如何使用代码托管平台(如 GitHub、Gitee 等)进行代码管理与协作,掌握平台的基本功能和常用操作。
Expand Down Expand Up @@ -59,32 +60,35 @@
### 主要操作

#### **Fork**

!!! info "功能描述"
将别人的仓库复制到自己的账户下,便于修改和贡献。

- **操作步骤**:
1. 进入目标仓库页面。
2. 点击页面右上角的“Fork”按钮。
3. 等待 Fork 完成,仓库将出现在自己的账户下。
1. 进入目标仓库页面。
2. 点击页面右上角的“Fork”按钮。
3. 等待 Fork 完成,仓库将出现在自己的账户下。

#### **Star**

!!! success "功能描述"
对仓库点赞,表示对项目的支持和喜爱。

- **操作步骤**:
1. 进入目标仓库页面。
2. 点击页面右上角的“Star”按钮。
3. 取消 Star 只需再次点击“Star”按钮。
1. 进入目标仓库页面。
2. 点击页面右上角的“Star”按钮。
3. 取消 Star 只需再次点击“Star”按钮。

#### **Watch**

!!! warning "功能描述"
关注仓库,接收仓库的更新通知。

- **操作步骤**:
1. 进入目标仓库页面。
2. 点击页面右上角的“Watch”按钮。
3. 选择接收通知的频率(如所有活动、仅发布和评论等)。
4. 取消 Watch 只需再次点击“Watch”按钮并选择“Not watching”。
1. 进入目标仓库页面。
2. 点击页面右上角的“Watch”按钮。
3. 选择接收通知的频率(如所有活动、仅发布和评论等)。
4. 取消 Watch 只需再次点击“Watch”按钮并选择“Not watching”。

---

Expand All @@ -95,4 +99,4 @@
- 学会在浏览器中浏览和搜索仓库。
- 掌握平台的主要操作,如 Fork、Star、Watch 等。

这些技能将为后续的代码开发、团队协作和开源贡献打下坚实的基础。
这些技能将为后续的代码开发、团队协作和开源贡献打下坚实的基础。
File renamed without changes.
Empty file.
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@

一个优秀的*提交*应该只解决一个问题,使得功能完整,即便只有一行代码也可以提交。而一个优秀的*提交信息*是项目的标杆,这是未来其他贡献者给项目贡献的规范。他们会按照你的*提交信息*去编写他们的贡献,从标题的格式到内容的详细程度。所以如何写好一个*提交信息*就显得十分重要。不仅要遵循项目的风格指南,确保*提交信息*的一致;还要使得*提交信息*的标题清晰简洁,能够准确反映变更的内容。

需要注意的是,RustSBI 社区采用**全英文**编写的*提交信息*。同时,`rustsbi/rustsbi`若干个模块都具有自己的更改日志文件,我们使用*提交信息*来生成 `CHANGELOG.md` 文档。我们通过*集成测试*检查对本模块文件夹下的任何文件的修改,**必须一并为对应的`CHANGELOG.md`增加 CHANGELOG 条目**。否则检查不通过,可能会导致您的更改无法出现在下一个版本的更新日志中。
需要注意的是,RustSBI 社区采用**全英文**编写的*提交信息*。同时, `rustsbi/rustsbi` 若干个模块都具有自己的更改日志文件,我们使用*提交信息*来生成 `CHANGELOG.md` 文档。我们通过*集成测试*检查对本模块文件夹下的任何文件的修改,**必须一并为对应的 `CHANGELOG.md` 增加 CHANGELOG 条目**。否则检查不通过,可能会导致您的更改无法出现在下一个版本的更新日志中。

其次,每个*提交*都需要签名,每次*拉取请求**推送*都由*集成测试*检查更新的*提交*是否具有 `Signed-off-by` 标记。

Expand All @@ -35,25 +35,26 @@
```

> 为了更好的可读性,提交信息每行都不应该超过 100 个字符!
#### 标题

作为提交信息的第一行,`<标题>`有着严格的格式要求,通常为:
作为提交信息的第一行, `<标题>` 有着严格的格式要求,通常为:

```
<scope or type>: <subject>
```

如果你已习惯了**约定式提交**也可以同时使用`<类型>``<范围>`
如果你已习惯了**约定式提交**也可以同时使用 `<类型>``<范围>`

```
<type>(<scope>): <suject>
```

> `<范围 或 类型>/<类型>(范围)`后面有一个 `!` ,或在`<脚注>`中包含 `BREAKING CHANGE:` ,提醒注意**破坏性变更**。破坏性变更可以是任意`<类型>`提交的一部分。
> `<范围 或 类型>/<类型>(范围)` 后面有一个  `!`  ,或在 `<脚注>` 中包含  `BREAKING CHANGE:`  ,提醒注意**破坏性变更**。破坏性变更可以是任意 `<类型>` 提交的一部分。
#### 范围

`<范围>`是所主要更改的子模块名称,多个子模块和具有重名的子模块的更改可以取上层模块名称作为`<标题>`的前缀。`<范围>`的使用适合于一个提交中涵盖了多个`<类型>`或不适合用`<类型>`来界定的场景。
`<范围>` 是所主要更改的子模块名称,多个子模块和具有重名的子模块的更改可以取上层模块名称作为 `<标题>` 的前缀。 `<范围>` 的使用适合于一个提交中涵盖了多个 `<类型>` 或不适合用 `<类型>` 来界定的场景。

示例:

Expand All @@ -68,7 +69,7 @@

#### 类型

作为对`<范围>`的补充,遵循**约定式提交**,必须为下列之一,同时附上示例:
作为对 `<范围>` 的补充,遵循**约定式提交**,必须为下列之一,同时附上示例:

- **`feat`**: 新增了一个功能 ([5baa946](https://github.com/rustsbi/rustsbi/commit/5baa946c4036bccba760be36c049ad1626b8d5e0))
- **`fix`**: 修复了一个 bug ([293db69](https://github.com/rustsbi/rustsbi/commit/293db697b39daf69eae1315cb85996e134d0d0b7))
Expand All @@ -89,11 +90,11 @@

#### 正文

`<标题>``<正文>`之间隔一个空行,即保持第二行为空,正文另起一行。这里可以对你的变更说明进行详细的展开了,希望上面整理思路的方式可以帮到你。记得和`<主题>`同样使用命令式的现在时态:"change" 而不是 "changed" 或 "changes"。
`<标题>``<正文>` 之间隔一个空行,即保持第二行为空,正文另起一行。这里可以对你的变更说明进行详细的展开了,希望上面整理思路的方式可以帮到你。记得和 `<主题>` 同样使用命令式的现在时态:"change" 而不是 "changed" 或 "changes"。

#### 脚注

`<脚注>`与之前的`<正文>`也要隔一个空行。`<脚注>`部分包含签名和与该提交相关的其他引用:
`<脚注>` 与之前的 `<正文>` 也要隔一个空行。 `<脚注>` 部分包含签名和与该提交相关的其他引用:

- **`Signed-off-by:`** `git commit` 命令中通过 `-s` 参数指定。
- **`Fix:`** 如果该提交修复了一个开放问题,在日志末尾添加对该问题的引用。
Expand Down Expand Up @@ -132,7 +133,8 @@ Signed-off-by: DongQing <[email protected]>
```
binary: enhance `SbiRet` structure functions to match `core::result::Result` APIs
- binary: change `SbiRet::and` signature to `fn and<U>(self, res: Result<U, Error>) -> Result<U, Error>`
- binary: change `SbiRet::and` signature to `fn and<U>(self, res: Result<U, Error>) -> Result<U, Error>`
- binary: add function `is_ok_and`, `is_err_and`, `inspect` and `inspect_err` for `SbiRet` structure
Signed-off-by: Zhouqi Jiang <[email protected]>
Expand Down
Empty file.
Empty file.
33 changes: 0 additions & 33 deletions docs/ch4/index.md
Original file line number Diff line number Diff line change
@@ -1,34 +1 @@
# S4: 领导开源阶段

**目标** :成为开源项目的领导者,掌握社区管理和开源治理能力。

## 一、开源社区及其管理

1. **如何组织和维护开源社区**

* **Code of Conduct** :深入阐释制定并推行行为准则(Code of Conduct)的必要性,明确其对于营造健康、友好、包容社区氛围的关键作用,以及如何依据社区特性拟定具体条款。
* **贡献者指南** :详细介绍编写一份全面、易懂且具有吸引力的贡献者指南的要点,涵盖从新手入门指引、开发流程规范,到问题反馈机制等各个环节,助力潜在贡献者快速融入项目。

2. **如何吸引和管理贡献者**

* **鼓励多样性和贡献** :探讨多种策略激发来自不同背景、技能水平的人员参与开源,如设立多样化的任务模块以适配不同能力层次,举办线上线下交流活动增强社区凝聚力,设置合理激励机制认可贡献者价值,促进社区持续繁荣。

## 二、开源社区安全治理

1. **如何处理安全问题(如 CVE 报告)** :讲解面对安全漏洞报告(如 CVE 报告)时的应急响应流程,包括漏洞确认、信息发布、修复方案制定与实施,确保社区项目安全性。
2. **如何保护社区免受恶意代码或行为影响** :分享识别与防范恶意代码注入、恶意行为扰乱社区秩序等安全威胁的方法,例如采用代码审查自动化工具、建立社区成员信誉评级体系,全方位保障社区健康运行。

## 三、开源社区合规

1. **合规流程的重要性**

* **知识产权管理** :强调在开源项目中妥善管理知识产权的重要意义,避免侵权纠纷,保障项目合法权益,阐述如何对代码来源、版权归属进行清晰记录与管控。
* **许可证合规** :深入剖析开源许可证合规的关键要点,依据不同许可证类型(如 GPL、MIT 等)要求,确保项目的使用、分发、修改等操作严格遵循规定,防范法律风险。

2. **如何进行开源项目的合规审计** :介绍开展合规审计的流程、方法与工具,如定期自查代码库许可证一致性、借助专业法务工具审查知识产权隐患,维护项目合规运营。

## 四、参考任务

1. 创建一个开源项目,撰写清晰的 README 和贡献者指南。
2. 通过自己的开源项目吸引其他人贡献并管理他们的贡献。
3. 如果不想长期维护,可以将项目捐献到俱乐部。
Loading

0 comments on commit ad56abc

Please sign in to comment.