起因

在看各类技术相关的视频的时候,经常提到开源社区,同时使用开源社区的活跃度作为对一些开源技术/中间件的评价,也积极鼓励大家去开源社区提问和交流。

经常看到在社交媒体活跃的大佬都鼓励去做开源。

出于个人原因,希望在开源社区学习技术,更希望贡献力量。

问题
针对以上的点,我有很多疑问,希望大佬们帮忙解答

什么是开源社区,GitHub 算开源社区吗? Discord 、telegram 群算开源社区吗?怎么在开源社区里交流?怎么评判开源社区活跃度?不同的软件的开源社区的形态是不是不一样的?

怎么学习开源?怎么做贡献?我感到迷茫是因为例如 Kafka 这种开源软件代码非常庞大,无名之辈怎么去学习、去哪里交流、又怎么做贡献?

网上很多关于学习和贡献开源都说的很笼统,比如去看 pr ,学习规范,然后 fork 提交。但是没有教你怎么去从头开始学习开源,我相信不是每个人把整个大项目源码都看了然后去贡献的。那在这种前提下,我该怎么去做开源?

如何将开源和自己的学习和职业相结合?

最后
如果我提问有问题,我可以继续补充。希望各位不吝赐教,能回答任意一点都好,也可以畅所欲言。
提前感谢大家的经验。

开源社区就像 3D 区,新人总想问到底哪里是 3D 区,老玩家虽然说不上来哪里是 3D 区,但是知道有耶路撒冷的地方就是 3D 区。

开源和开源社区是两码事,就像 3D 和 3D 区是两码事

开源代码的 org 是开源社区,开源中文教程的 org 是开源社区,没有 qq/tg/ds 的也是开源社区;回复 issue 是交流,review pr 是交流,群里吹牛也是交流; star 多/pr 频繁/issue 多 -> 活跃;当然,Linux 社区还是基于邮件的呢当 collaborator 是加入开源社区,fix typo 灌水是加入开源社区,加入开源社区 qq/tg/ds 也是加入开源社区写一个流行的 lib 是做开源,撸一个 app 是做开源,传 cs231n 课程笔记也是做开源做后端就做后端项目开源,前端做前端,cv 做 cv ,nlp 做 nlp祝 v 友早日 pr kafka

来点实在的, 先把҉某发行版 linux 移植到某款手机上,把҉旧手机变 home server, 自然有开源社区的人来勾搭你.

先从简单的开始弄啊- 先从你平时会用的,熟悉的项目开始入手- 不要一下子就去那种超大型项目,kafka 这种开始加入- 先从简单的贡献开始搞,改改 typo ,完善一下文档,贡献一下例子,帮着回答一些问题

1.做开源运动在哪里活动哪里就是开源社区2.3. 看 pr/issue ,学源码,交流参与,这么简单清晰的流程你做不到自己掌握摸索出门道的话,那我觉得你不行,不适合做开源。可能和你想象的不太一样,但我的认知是开源社区的主流中坚力量全部都是“没人教他他自己投入开源项目还越做越好的”我虽然就是个没啥用的打打嘴炮的,这里我还是要说一下我挺讨厌中文技术讨论里某种无脑捧开源,无条件推荐所有人都去搞开源或者什么去做开源来学习的。实际上可能多数人缺的是怎么从 30 分提升到 60 分,但参与真正有价值的开源的门槛就有 80 分(还要赔上大量时间为爱发电),然后能不能帮一个 80 分的高玩提升到 90 分还很看运气。拱的一堆 70 分不到的人乱七八糟的搞开源,伤的其实是整个中文技术圈子(虽然可能已经没救了

完全回答不上来,只能给你举个例子我是做 CFD 的,求解器用的是某 NASA 大佬的开源项目这两天我想基于最新的论文开发一个新的关于超高速流体的化学方程的计算方法,我就去添加了我的代码,由于完全不熟悉 D 语言遇到诸多错误我就去请教他们并获得了诸多帮助,这就是开源社区。而这个代码,我能修改并提交,这就是开源项目。

您说的大体赞同,但那句「不适合做开源」,我觉得不太正确,就算其他群友说的(以及你自己提到的“交流参与”),开源应该是任何人都可能去做的事情,只要 ta 的心态是真正拥抱开放、乐于助人的,技术上 10 分、30 分、70 分、90 分又何妨呢?毕竟「闻道有先后、术业有专攻」,所有人都是一路成长的,只是那些大佬起步早些、跑的快些~当然我也理解您的抱怨,现在确实有些低质量项目丑化“开源”的行为(收小费、索要 star 之类的)

opensource.guide/zh-hans/

先明确一个概念——社区( community )指的是人群,而不是地方。所以你不能说 GitHub 是个社区,应该说有很多开源社区活跃在 GitHub 上。所以要加入开源社区也很简单——为你想做的那个东西(比如 Linux 内核)提交一些代码,你就算那个社区的一员了。

至于怎么做贡献,不是一定要抱着去做贡献的心态去找一个项目,而是可以在平时使用开源项目遇到问题时,如果可以定位问题出在开源项目内,就自己修复并 pr 。也不需要了解整个项目,一般编程都讲究低耦合,看懂一部分的代码就可以尝试改了,至于是否会影响其他地方,会有看到或合并 pr 的人去判断。实在没有目标,可以看看 GitHub 上 help wanted 的 issue github.com/issues?q=is%3Aopen+is%3Aissue+archived%3Afalse+label%3A%22help+wanted%22

巧了,我之前就写过一篇文章分享我参与开源的小经验:[开源指北,如何参与 170k 的顶级项目]( juejin.cn/post/7308371444371718144 )

开源项目和开源社区是两个东西. 开源项目是写了一个东西,把源代码开放出来, 比如 GitHub 上的一个仓库.开源社区,我理解的是一群人,为了做一个开源项目聚在一起, 使用邮件,QQ 群,微信群等等方式讨论 这个项目的开发,使用等等和这个项目相关的问题.怎么学习开源?怎么做贡献?没必要把整个项目都了解了再去参与,可以先从一个比较简单的模块开始,然后慢慢了解整个项目.说一下我是怎么接触到开源社区的吧, 我用到了一个开源的数据库, 但是遇到了性能问题, 开始自己排查, 最后发现是一个参数导致的,但是这个参数不能通过配置文件修改, 于是我就在群里反应了这个问题, 群里好几个人都认为这个参数应该要通过配置文件设置, 于是我就提交了一个 PR, 解决了这个问题.

不要为了做而做,万一哪天你没啥干了,想做了,那就开始做了。万一你有了时间就想睡觉,或者打打游戏,可能你一直也不需要做。在这个论坛里,一种是开源了,拉微信群,或者让你点赞。一种是开源了,希望能靠这找到好工作,虽然我也不知道有么有啥好工作是通过开源找到的😄 但我觉得这个真的只是 YY ,开源做的好,你自己的工作肯定不会做的差,自然能找到配得上你的工作。自己的工作一塌糊涂,想把开源做的光鲜亮丽精妙绝伦来找到好工作,我觉得不现实。。要做好开源,你肯定要有足够的精力,如果上完班就已经精疲力竭了,你不会有时间和精力来做开源的。至于要怎么做,肯定是从你熟悉的开始做,自己用到的东西,你才知道哪里有问题,需要提高。给你一个完全陌生的东西,你肯定要花很多时间来摸到门道。当然也有些人是专门做开源的。就像我以前工作过的地方,做的东西都在 GH 上,钱是 ZF 拨款的。

你可以这样理解,先不考虑开源协议这些,你那天写了一个有意思的工具,你想把它分享出去,你可以选择放在 GitHub 上或者 GitLab 上等等;接着你想去推广这个工具,你就会围绕这个工具去做一些微信群,Discord ,telegram 等等;加入开源社区就是你看到了一个有意思的项目,上手把玩了一下,觉得很有意思,但是有些地方你不满意,你就去提一个 PR ,或者你去解决别人的问题。

摘录一下我之前写的一篇文章: imzlp.com/posts/8890/个人开发者参与开源的开始,应该都是从玩具代码起步的,觉得自己做了个有点用的东西,就放到 Github 上,如果恰好被人看到,觉得有用,可能就会在自己的项目中尝试使用。如果开发者能坚持对项目进行迭代、更新,会积累起一些真正使用它到实际项目中的用户。这是个人开源项目的正常发展过程,不同于大公司内部开源的项目,项目本身在内部就已经经历了很多的迭代之后,在某个时间点开源出来,而且有大厂的背书,对项目会产生很强大的推广作用,但是个人开发者只能靠混迹相关的技术社区,靠使用的人口口相传了,传播速度和广度则比较受限。在我看来,如果以功利的心态去看待开源是肯定做不好的( KPI 项目),基本开源行为是没什么实际收益的,好好做开源要耗费的精力十分巨大,大多数项目都是靠情怀支撑的。而且会因为项目慢慢用的人多了,对项目的功能、适用度、稳定性都有要求,可能改动了一点点代码就会对一波不同情况的用户产生影响,更新起来就不能那么随心所欲,提交之前还是要尽可能地经历一些测试流程的,是比较耗费精力的,测试的时间可能比开发的时间还要长,不过我觉得在这个阶段,开源项目才真正摆脱了只是在 Github 存一下代码的状态,才真正对其他的用户产生了价值。

一群人在开源项目里协作、交流就形成了一个组织,称为社区。大部分贡献是在使用开源项目中发现一些 Bug 、增加了一些功能,然后回馈到社区中,如下工作都算贡献:- 帮助开源项目完善文档- 在 issue 中回答问题- 修改代码、文档中的拼写、格式问题dperf github.com/baidu/dperf 是网络领域性能最高的开源测试仪,各个大厂都在用,如果你对网络、协议栈有兴趣,欢迎加入

可以看看这个博客: www.zentao.net/redirect-index-23859.html ,里面算是比较详细和系统的介绍了开源,包括:开源是什么?开源协议有哪些?谁来参与开源?为什么要参与开源?关于开源软件的 7 个误区、如何作开源?如何将开源商业化等等。

建议你用到什么开源代码遇到问题后不去提 issue ,而是自己调试,修复后提 pull request 。或者自己有想法了做了一些小工具直接开源出来。都算在做开源

开源更多是精神信仰,用宗教作为例子,教堂是机构,信仰在心中

summer-ospp.ac.cn/

我刚好有一套 react 完整的开源,包含了 web 、app 、小程序(已经开始), github.com/huanghanzhilian/c-shopping 、 github.com/huanghanzhilian/c-shopping-rn 、 github.com/huanghanzhilian/c-shopping-weapp ,我也是刚做,不知道会怎么样,但我感觉,行动起来比不动强点吧!

感谢哈哈,给了我莫大的鼓励

是通过什么方式联系上仓库的开发者的?

感谢,我后面会去尝试一下

认可你的观点,也接受批评。不过我觉得弄清楚参与开源基本的思路,少走弯路也挺重要的。所以在做这件事之前,先弄清楚疑问,看看大家有没有什么前辈经验可以交流一下的。总之老哥话糙理不糙,爱听。

嗯嗯,是的,心态“端正”也很重要。

在职打工人还能参加开源之夏吗

cfd 论坛和 github 上放 issue ,后面认识了就发邮件

#29 了解了,十分感谢