|
| 1 | +# 开源软件通识课程 |
| 2 | + |
| 3 | +欢迎大家来到华科开放原子开源俱乐部的《开源软件通识课程》内部培训课程。本课程将秉持 “以开源方式来建设开源课程” 的指导方针,带同学们一起畅游开源软件的海洋。 |
| 4 | + |
| 5 | +带领俱乐部成员认识开源软件经历如下的不同阶段: |
| 6 | + |
| 7 | +--- |
| 8 | + |
| 9 | +### **S0:无意识使用阶段** |
| 10 | + |
| 11 | +> **目标:**认识到开源已融入生活,了解自己日常使用的开源软件。 |
| 12 | +
|
| 13 | +* **开源无处不在** |
| 14 | + * 举例说明:现代科技中广泛应用的开源软件,例如 Android 系统(基于 Linux),浏览器(如 Chrome 和 Firefox),办公工具(如 LibreOffice),以及其他开发工具(如 Git、Vim、Node.js)。 |
| 15 | + * 说明开源如何成为现代技术的基石:手机、服务器、云计算、大数据、人工智能等领域。 |
| 16 | +* **参考任务:** |
| 17 | + * 列举自己日常使用的一些开源软件,并尝试查找它们的开源主页或仓库。 |
| 18 | + * 调研一个开源项目的背景,了解它在行业中的应用(如 Linux、Kubernetes)。 |
| 19 | + |
| 20 | +--- |
| 21 | + |
| 22 | +### **S1:了解开源阶段** |
| 23 | + |
| 24 | +> **目标:**初步了解开源的概念、历史、许可证及其影响,培养开源安全意识。 |
| 25 | +
|
| 26 | +* **开源是什么?** |
| 27 | + * **开源是一种软件类型:**定义开源软件,与闭源软件对比。 |
| 28 | + * **开源是一种软件开发方式:**举例开源协作的特点,如社区贡献、代码开放。 |
| 29 | + * **开源是一种协作与创新模式:**讲解如何通过开源实现跨组织协作和技术创新。 |
| 30 | + * **开源是一种产业生态:**开源如何驱动技术演进和形成商业生态(如红帽的成功案例)。 |
| 31 | +* **开源历史** |
| 32 | + * 时间线和重要节点:Unix -> GNU -> Linux -> Git -> Github。 |
| 33 | + * 自由软件运动与 Richard Stallman 的贡献。 |
| 34 | + * 开源运动的兴起与 Open Source Initiative (OSI)。 |
| 35 | +* **开源许可证** |
| 36 | + * 介绍许可证的作用和开源定义(Open Source Definition)。 |
| 37 | + * **常见开源许可证:** |
| 38 | + * Copyleft:GPL、AGPL 等。 |
| 39 | + * Permissive:MIT、Apache-2.0、BSD。 |
| 40 | + * 禁用场景:禁止与专利冲突等。 |
| 41 | + * **如何选择许可证?**举例如何根据项目需求选择适当的许可证。 |
| 42 | +* **开源安全** |
| 43 | + * 开源软件供应链安全:了解漏洞传播机制(如 Log4j 漏洞案例)。 |
| 44 | + * 安全最佳实践:开源软件的审计和管理(如使用 Dependabot)。 |
| 45 | +* **参考任务:** |
| 46 | + 1. 创建 Github 帐号,初始化一个简单的项目(如 README 文件)。 |
| 47 | + 2. 为该项目选择一个开源许可证,并撰写一段文字解释选择理由。 |
| 48 | + |
| 49 | +--- |
| 50 | + |
| 51 | +### **S2:拥抱开源阶段** |
| 52 | + |
| 53 | +> **目标:**开始使用开源软件,初步了解开源项目的协作模式。 |
| 54 | +
|
| 55 | +* **开源协作模式** |
| 56 | + * **如何贡献:**Issue、Pull Request、Code Review。 |
| 57 | + * **工具与平台:**使用 Github、Gitlab 等托管平台。 |
| 58 | + * **开源项目工作流:**了解从 Issue 到 PR 的完整流程。 |
| 59 | +* **开源软件的替代方案** |
| 60 | + * 举例:用 Linux 替代 Windows,用 LibreOffice 替代 Microsoft Office,用 GIMP 替代 Photoshop,用 VLC 替代商业播放器。 |
| 61 | + * **选择适合的发行版:** |
| 62 | + * 桌面发行版:Ubuntu、Deepin、OpenEuler。 |
| 63 | + * 服务器发行版:CentOS Stream、Alpine。 |
| 64 | +* **活动组织** |
| 65 | + * 了解和参与开源社区活动:如 Linux 101、OpenEuler 社区活动等。 |
| 66 | + * 通过参与活动了解更多开源工具和资源。 |
| 67 | +* **参考任务:** |
| 68 | + 1. 找到一个可以替换闭源工具的开源软件,并将其应用到日常工作中。 |
| 69 | + 2. 记录切换开源软件的过程、问题和解决方案,撰写一篇博客分享。 |
| 70 | + |
| 71 | +--- |
| 72 | + |
| 73 | +### **S3:贡献开源阶段** |
| 74 | + |
| 75 | +> **目标:**学习开源基础技能并通过代码或文档的贡献实践开源。 |
| 76 | +
|
| 77 | +* **开源基础技能** |
| 78 | + * **Git 学习:** |
| 79 | + * Git 的基本操作(clone、commit、push、pull、merge 等)。 |
| 80 | + * Git 的原理:分支、HEAD 指针、合并冲突等概念。 |
| 81 | + * 进阶技能:使用 Git 提交签名、提交模板。 |
| 82 | + * **代码托管平台:** |
| 83 | + * Github、Gitlab、Gitee 等的使用技巧。 |
| 84 | + * 项目管理功能:Issue、Milestone、Wiki。 |
| 85 | + * **如何写好一个 commit message:** |
| 86 | + * Linux Kernel Patch。 |
| 87 | + * Conventional Commits。 |
| 88 | + * RustSBI 项目的 commit message 规范。 |
| 89 | + * **文档撰写:** |
| 90 | +* **计算机基础知识** |
| 91 | + * The Missing Semester of Your CS Education。 |
| 92 | + * **不同方向的简单介绍与开源项目:** |
| 93 | + * 系统开发:Linux Kernel、QEMU。 |
| 94 | + * Web 开发:React、Vue。 |
| 95 | + * 网络:WireGuard、Cilium。 |
| 96 | + * 数据分析:Pandas、Jupyter。 |
| 97 | + * 人工智能:TensorFlow、PyTorch。 |
| 98 | + * 找到适合自己的方向并选择活跃的开源项目。 |
| 99 | +* **表达与交流的重要性** |
| 100 | + * 如何清晰表达问题和想法。 |
| 101 | + * 如何有效进行跨文化交流。 |
| 102 | +* **学会如何提问** |
| 103 | + * 如何查找资料:善用 Google 和 Stack Overflow。 |
| 104 | + * 提问的基本规范:明确描述问题、给出复现步骤。 |
| 105 | +* **参考任务:** |
| 106 | + 1. 学习使用 Git,完成一次 Fork 并提交 PR 的流程。 |
| 107 | + 2. 选择一个开源项目,通过贡献文档或代码提交一个 PR。 |
| 108 | + |
| 109 | +--- |
| 110 | + |
| 111 | +### **S4:领导开源阶段** |
| 112 | + |
| 113 | +> **目标:**成为开源项目的领导者,掌握社区管理和开源治理能力。 |
| 114 | +
|
| 115 | +* **开源社区及其管理** |
| 116 | + |
| 117 | + * 如何组织和维护开源社区:Code of Conduct、贡献者指南。 |
| 118 | + * 如何吸引和管理贡献者:鼓励多样性和贡献。 |
| 119 | +* **开源社区安全治理** |
| 120 | + |
| 121 | + * 如何处理安全问题(如 CVE 报告)。 |
| 122 | + * 如何保护社区免受恶意代码或行为影响。 |
| 123 | +* **开源社区合规** |
| 124 | + |
| 125 | + * 合规流程的重要性:知识产权管理、许可证合规。 |
| 126 | + * 如何进行开源项目的合规审计。 |
| 127 | +* **参考任务:** |
| 128 | + |
| 129 | + 1. 创建一个开源项目,撰写清晰的 README 和贡献者指南。 |
| 130 | + 2. 通过自己的开源项目吸引其他人贡献并管理他们的贡献。 |
| 131 | + 3. 如果不想长期维护,可以将项目捐献到俱乐部。 |
| 132 | + |
| 133 | + |
| 134 | +### **贡献指南** |
| 135 | +如果 commit 时候遇到 md 格式问题,在对应的 action run 底下会有一个 artifact,保存了所有的 log 和对应的 autofix |
| 136 | +commit message 中尽量不要出现中文,以及相同的 commit 可以合并成一个。 |
0 commit comments