如何成为开源项目的贡献者?

学习, 创建, 分享

现如今,越来越多的开源软件被应用于千行百业。据统计,我国在全球最大开源平台GitHub上的贡献者数量已经达到了全球第二。2020年,GitHub平台上中国贡献者数量增加了37%;而在另一个开源平台Gitee上,中国贡献者的数量更是增加了50%,总量超过了600万人。

OpenCV这个开源计算机视觉及机器学习库为例。OpenCV于2000年首次公开发布,已经成功地经历了20多年的发展,为全球开发者提供了2500多个优化算法。OpenCV团队花费了大量时间,完成了出色的工作,知道吗,其实你也可以这么做。但是,如果你这样做没有为你带来任何直接的经济收入,你还会觉得为开源项目做贡献有什么意义吗?

为什么要为开源项目做贡献?千言万语都说不完

开源项目提供源代码来帮助开发者免费解决他们的问题,开发者分享改进的解决方案并为开源项目做出贡献。 因此,双方都受益匪浅,形成了一个良性循环。

现在,让我们来看看为开源项目做贡献有哪些益处:

  • 通过学习他人的源代码来获得个人成长

在开源项目中,你通常可以免费下载或克隆源代码。因此,你可以方便地阅读源代码,了解如何定义函数来实现特定功能,如何建立模型训练流水线等等。通过这种方式,你将学会如何使用开源项目提供的功能和工具,并能通过阅读源代码学到知识,逐步成长为高级开发者!

  • 建立起自己的影响力

如果你使用开源软件,并提出比目前更好的解决方案,欢迎将你的工作提交给开源项目。提交后,你的工作将得到审查,并会获得有益的反馈。经过几轮修改,你的工作最终可以获得批准并合并到该项目中。最后,你的解决方案被其他人正式接受并使用,这意味着你开始建立起自己的影响力😊

  • 在简历中增加优秀的开源项目经历

通过贡献一个开源项目,你加入了一个拥有成千上万志同道合的开发者的社区。你还将有机会通过提交你的工作并获得评审,与开发和维护开源项目的专业人员建立起联系和互动。同时,你可以通过在开源平台上公开展示你的技能来创建一份优秀的简历。优秀的代码能力不言自明,有希望让你更快速地增加面试录用的机会!

哪里可以找到“最佳的”开源项目?

你可以通过各种平台或渠道为开源项目做出贡献。这里有一些成功案例,根据我们的经验,你可以先找到一些有趣的项目和方法,让你成为开源开发者。

首先,考虑GitHub或任何其他代码托管服务。通常,开源项目有一个存储库来存储代码和相应的介绍文档。你可以通过浏览GitHub找到你感兴趣的项目。有关如何为开源项目做贡献的详细指南,一般可以在名叫“CONTRIBUTING.md”的文件中找到。

其次,还可以找到一些开发者活动(如针对全日制学生或开源初学者的谷歌编程之夏(GSoC)等)、挑战赛或项目核心开发人员和维护人员组织的竞赛。通过参加这些活动或竞赛,你可以按照组织者指定的方式做出贡献,甚至还可以顺便赢得一些奖金。

最后,可以借助你当前使用的应用程序。正如开头所提到的,今天常用的许多应用程序都是免费和开放的。你正在使用的一些你非常喜欢的应用程序,很有可能是开源的——有了这个想法,你可以寻找这些应用程序的开源代码仓,然后参与这些程序的开发和维护工作,帮助它们变得更好!

接下来,我们将回答最重要的问题,“如何做出贡献?”。

本文基于OpenVINO™ Toolkit–一个来自英特尔的用于优化和部署AI推理的开源项目。对于其它开源项目,请联系社区并阅读他们详细的贡献指南。

好的,现在你决定为OpenVINO ™这个开源项目做点贡献了。 首先,你应该找到该项目的网站和代码库,以了解更多关于项目需求、代码结构和贡献规则的信息。目前,你可以在这里 找到 OpenVINO ™项目的官方文档,整个代码库托管在GitHub上。想要了解这个项目,最佳选择就是把它用起来!如果您不熟悉OpenVINO™, 请克隆并运行OpenVINO Notebooks仓库,并运行其中一些notebooks代码示例来学习并享受其中的乐趣。

强烈建议你通过运行:

为开源项目做贡献的典型步骤如下:

第一步:分支(Fork)项目

这个项目需要你工作在自己的仓库副本上,并创建pull request来合并代码。这意味着当你准备好开始你的旅程时,你需要点击“fork”按钮来fork主仓库。

第二步:克隆(Clone)项目

现在你已经拥有了你的远程副本。是时候在你的机器上克隆整个仓库了。你可以通过以下命令来克隆:

git clone git@github.com:<your_nickname>/openvino.git

如果你遇到如下图所示的错误,那可能跟你的SSH密钥有关。可以在这里(指导 或者 通过https克隆 )查找相应的解决方法。

第三步:编译(Compile)项目

下一步是建立你的开发环境,包括克隆子模块、安装依赖项和设置选项。我们推荐使用Ubuntu 20.04。请注意,在调试模式下编译代码将占用大约50GB的磁盘空间。如果您是经验丰富的开发人员,可以指定不同的选项来启用或禁用某些模块。请参阅此处的指南

cd openvino/
git submodule update --init --recursive
./install_build_dependencies.sh
sudo apt install cython3 intel-opencl-icd
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Debug -DENABLE_PYTHON=ON -DENABLE_TESTS=ON -DENABLE_FUNCTIONAL_TESTS=ON -DENABLE_DEBUG_CAPS=ON -DENABLE_CPU_DEBUG_CAPS=ON -DENABLE_NCC_STYLE=ON ..

至此,你已经为编译做好准备了。运行以下的“make”命令行,然后等待整个过程运行结束。

make --jobs=$(nproc --all)

比较少见但是有可能出现的情况是,你的操作系统杀掉了你的编译。如果你碰到了如下图所示的情况,请以更少的并发任务,再次运行“make”命令

如果你想学习更多的关于整个编译建立的过程,请参考这篇文章

第四步:运行(Run)项目

为了确保每一项都正确构建了且 OpenVINO™ 是可用的,你可以运行如下这个名为 hello_query_device 的示例程序,它将打印所有可用的计算设备。

cd ../bin/intel64/Debug
./hello_query_device

你应该能看到所有可以运行 OpenVINO™的设备。在我们这种情况下,包括CPU, GNA以及GPU。

第五步:选择一个问题(issue)

你已经构建了代码。现在,你已准备好进行真正的开发了。一个好的起始点是根据实际需求修复或实现一些东西,使你的工作更有价值,并增加被合并的可能性。Github上有一个Issues标签,在那里你可以找到社区报告的bug和功能请求。

在你非常熟悉代码之前,最好寻找一个容易解决问题(easy-to-fix issues)的地方开始你的开发工作。这些地方通常有特定的标签,比如“good first issue”或类似的标签。

当你决定修复/实现什么时,建议先与开发人员和社区讨论一下,以确认最终的需求并指定你自己来解决这个问题。当一切都知道后,你就可以开始编写代码了。

第六步:代码实现

在你开始之前还有一件事,那就是找到并阅读贡献指南。遵循规则和代码风格是非常重要的。在大型项目中,一致性是至关重要的。然后您可以创建一个新分支(带有有意义的名称的)并切换到它。

git branch <meaningful_branch_name>
git checkout <meaningful_branch_name>

在您喜欢的任何IDE中打开代码,或者使用像vim这样的文本编辑器开始编写代码吧!每隔一段时间测试一下你的修改,以确保它朝着正确的方向推进着。

如果你在实现功能时遇到任何的bug,请创建一个issue来上报这个错误。

第七步:测试代码

如果你实现了一个新特性或修复了一个bug,您应该为它提供单元和功能测试(如果可以的话)。例如,如果你的更改与Python API相关 (src/bindings/python/src),好的做法就在相同的模块中增加单元测试 (src/bindings/python/tests) 。当你的修改影响了推理引擎的时候(src/inference/src ),你就应该增加相应的测试目录 (src/ tests/unit/inference_engine) 。接着再编译一遍 OpenVINO™,与其他人一起运行你的测试,并检查是否一切都通过。


cd ~/openvino/bin/intel64/Debug
./ieUnitTests

第八步:推送(Push)并创建拉取请求(Pull Request)

当 OpenVINO™编译和测试都通过了,你可以将你的分支推送到远程仓库。

git push -u origin <meaningful_branch_name>

创建一个PR(Pull Request),将您的更改拉向主仓库(main repo)是必须的。你可以在Pull requests选项中完成。

记得要为你的修改添加注释以及合适的标签,比如 Python API。

第九步:更新

然后,请等待主要开发团队的评估,当评估准备就绪时,请回答问题,消除开发团队的疑虑,并根据评估结果改进你的代码。同时,您需要确保所有CI测试都通过。如果没有,找到这些问题并解决它们。

第十步:合并(Merge)

最终,你的工作被合并啦!

我们鼓励您与我们长期合作😊 选择下一个issue,记得不时同步您的主分支!

快来动手尝试,加入我们,为开源项目做贡献吧~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值