中国开源的发展速度发展加快,个人和组织对于为开源作贡献有着前所未有的激情。据《2020年IT行业项目管理调查报告》,约四成受访者以自己开发开源项目、为他人提交项目代码、作为成员开发维护项目、捐助开源项目等不同形式参与到开源项目中;在《2021中国开源发展蓝皮书》中,参与过开源项目的比例为32%,且呈增长趋势,我国开源生态正迅速形成。

创建和维护那些被广泛使用的开源项目每年可能需要耗费数千小时,为什么开发者会愿意花费时间和精力编写这些免费公开的代码?为什么企业会愿意让他们的员工编写代码,开源让其他公司甚至是竞争对手都可以使用?个体参与开源会得到什么?

个人为什么要开源?

1.提升代码质量

参与开源项目是提升个人代码质量的好方法。一方面开源会激发程序员的“耻感”,一旦清楚这些代码是要公开给别人看的,就会自觉将代码写得更加整洁、干净,加更多注释。另一方面,如果项目有一定的影响力,其他关注、参与的程序员也会给予更多建议,这样可以博采众长,无形之中约束自己的代码规范,改进自己的代码质量。
开源运动旗手 Eric S. Ray­mond 就曾说过:“只要经过足够多双眼睛的审查,所有的 bug 都将失去藏身之地。这就是 Linus 定律。”

2.展示个人代码

一个小时的面试可能只能展示你掌握的某些底层基础或者前沿知识,但如果有开源项目傍身,就可以从你长期的代码中看出代码质量如何。而且参与开源项目还能展示出你对技术的热爱,向面试官展示你引以为傲的开源项目,这将是个不错的加分项。而深度参与知名开源项目的开发者,从来不缺工作,参与开源的经验不仅能帮助他们获得更广阔的职业机会,而且能拓深职业发展空间。正如
jQuery 的创始人 John Resig 曾说过的那样:“不管在任何时候,只要涉及到招聘,相比普通的简历而言我更看重的是应聘者在
GitHub 上开源共享的东西。”

3.建立个人品牌

正如上述两条,代码质量提升和简历的加分项都会指向同一个成就:打造个人影响力,建立个人品牌。最为典型的就是Git的发明者Linus,尽管他的自述是“只是为了好玩”,但从他的名声大噪来看,倒是有些“凡尔赛”了。现今活跃的很多技术大牛往往是在大公司工作过的顶级工程师,凭借开源贡献在软件社区当中积累起人气与声望,摆脱公司标签,成功打造个人品牌。

企业为什么要参与开源?

1、改进代码和功能

大多数的组织和个人首先参与的是他们正在使用的开源项目,主要目的是想让项目/软件变得更完善,更便于自己使用;或者直接打造自己所需的工具并将其开源,也就是常说的“造轮子”。
这部分改进的功能当然可以自己使用不提交,但继续分享才是让利益最大化的方式,因为如果不贡献自己的代码,就有可能面临新版本这些功能不再工作的风险。

2.获取竞争、招聘优势

在程序员的世界中,开源虽说不上是多么崇高的事,但整体形象确实是正面的。开源意味着企业愿意与其他企业和个人共建生态,这个企业的大体上来说,是有拥抱开放的这样的倾向的。所以参与开源有助于提高组织和企业的声誉,且更能吸引志同道合的求职者共同发展。此外,这种行为也有助于提高组织和企业的声誉,提升品牌形象,特别是在开发者之间的口碑,带来的好处就是利于招聘和留住人才。

3.开源商业模式直接获利

开源不抵触商业,开源的目的是分享共享,但不是做慈善事业。具体盈利模式有技术支持、培训、高级功能、云服务等方式收费。不同的软件、不同的领域有不同的盈利模式,但所有模式的基础都是用户数。只有用户数量达到了一定的规模,才有成其商业化模式的可能。

商业开源是通过更多人的参与,减少软件的缺陷,丰富软件的功能,同时也避免了少数人在软件里留一些不正当的后门。企业通过开源的商业模式可以直接获得经济利润,开源软件最终还会反哺商业,让商业公司为用户提供更好的产品。

赠人玫瑰,手有余香。开源最美妙地方就是不必花时间解决同样的问题,当你遇到的大问题已经有人做了开源项目时,一定感觉如释重负。同样,当看到你的开源项目为其他人解决了问题时,巨大的成就感也是一种巨大的激励。

所以参与开源的原因或好处,除了上述具体因素,也有各种心理原因,也包含其他诸如降低开发成本、促进行业标准、支持开源价值观甚至纯粹的享受开源乐趣或回馈开源项目等因素。参与开源的“动机”当然可以“不纯粹”,也不讲究“默默无闻,无私奉献”,参与即贡献,开源领域的发展与每一位开发者都息息相关,进一步有进一步的欢喜。

5W1H聊开源之Why——为什么要参与开源?的更多相关文章

  1. SourceTree的基本使用---团队开发/参与开源

    1.实践入门-团队开发 如果你看到第二部分关于“参与开源”的内容,而你的需求是团队开发,你会发现几个不方便的地方: 1.1.组长建项目,组员每次提交,都需要组长审查同意merge 如果你觉得麻烦,组长 ...

  2. 如何参与开源项目 - 细说 GitHub 上的 PR 全过程

    目录 一.概述 二.为什么要参与开源项目 三.为什么我想介绍如何 PR 四.我想参与开源项目,怎么开始? 4.1.寻找一个合适的开源项目 4.2.寻找贡献点 五.我要提交 PR,怎么上手? 5.1.第 ...

  3. 参与开源之夏 x OpenTiny 跨端跨框架 UI 组件库贡献,可以赢取奖金🏆!这份《OpenTiny 开源贡献指南》请收好🎁!

    大家好,我是 Kagol. 近期有几位朋友在 OpenTiny 技术交流群里询问我们在开源之夏(OSPP)的项目,希望能提前做一些准备工作. 这里给大家简单介绍下开源之夏. 开源之夏是由中科院软件所& ...

  4. 2017云计算开源峰会 你是想听Linux谈开源还是想听OpenStack谈开源?

    2017年,善于把握机遇的企业们不是正在开源,就是走在去开源的路上-- 开源是不是就意味着免费? 开源企业就是要当"活雷锋"? 开源项目究竟如何运作?如何参与开源社区? 如何获得最 ...

  5. GitHub Android 最火开源项目Top20 GitHub 上的开源项目不胜枚举,越来越多的开源项目正在迁移到GitHub平台上。基于不要重复造轮子的原则,了解当下比较流行的Android与iOS开源项目很是必要。利用这些项目,有时能够让你达到事半功倍的效果。

    1. ActionBarSherlock(推荐) ActionBarSherlock应该算得上是GitHub上最火的Android开源项目了,它是一个独立的库,通过一个API和主题,开发者就可以很方便 ...

  6. 积极参与开源项目,促进.NET Core生态社区发展

    今天早上在微信群里聊天聊到百度的SDK 已经支持.NET Core, 百度已经在3月份就支持了,想起当时还是我在他们的github上提的issue: https://github.com/Baidu- ...

  7. 【搭建开发环境】在 Windows XP 中参与开源项目,搭建 git 和 cygwin 开发环境

    引言 只有一台 Windows XP 家用机,却想在诸如 Git@OSC 之类的开源社区参与开发,本文提供一个入门级的开发环境搭建指引. 涉及工具:Eclipse,EGit,Cygwin. 欢迎来到 ...

  8. asp.net MVC 5 Scaffolding多层架构代码生成向导开源项目(邀请你的参与)

    Visual Studio.net 2013 asp.net MVC 5 Scaffolding代码生成向导开源项目 提高开发效率,规范代码编写,最好的方式就是使用简单的设计模式(MVC , Repo ...

  9. 一文搞懂秒杀系统,欢迎参与开源,提交PR,提高竞争力。早日上岸,升职加薪。

    前言 秒杀和高并发是面试的高频考点,也是我们做电商项目必知必会的场景.欢迎大家参与我们的开源项目,提交PR,提高竞争力.早日上岸,升职加薪. 知识点详解 秒杀系统架构图 秒杀流程图 秒杀系统设计 这篇 ...

  10. 使用github参与开源项目

    github上有很多非常优秀的开源项目,作为开源项目的受益者,你否想过为开源项目贡献自己的代码?

随机推荐

  1. 文心一言 VS 讯飞星火 VS chatgpt (200)-- 算法导论15.2 4题

    四.用go语言,对输入链长度为 n 的矩阵链乘法问题,描述其子问题图:它包含多少个顶点?包含多少条边?这些边分别连接哪些顶点? 文心一言: 矩阵链乘法问题是一个经典的动态规划问题,其中给定一个矩阵链, ...

  2. Go 项目的文件布局

    转自 kcq 的 https://github.com/golang-standards/project-layout https://github.com/golang-standards/proj ...

  3. pikachu sql inject bool盲注

    输入框中输入 已知用户名 kobe 显示了用户信息 your uid:3 your email is: kobe@pikachu 输入kobe'看一下情况 显示 您输入的username不存在,请重新 ...

  4. 谷歌浏览器vue.js devtools插件安装

    github官网 https://github.com/vuejs/vue-devtools#vue-devtools 插件安装地址(需FQ) https://chrome.google.com/we ...

  5. 如何在C#中解析Excel公式

    前言 在日常工作中,我们经常需要在Excel中使用公式对表中数据进行计算(求和.求差和求均值等)和分析,从而实现对数据的分类,通常情况下,当数据量较少或场景变化单一的情况下,使用公式可以满足用户的要求 ...

  6. React之父组件向子组件传值

    class Parent extends React.Component{ constructor(){ super(); this.state={co:"red"} } rend ...

  7. jstack查看JVM堆栈信息

    目录 介绍 线程状态 Monitor 调用修饰 线程动作 命令格式 常用参数说明 使用实例 jstack pid jstack 查看线程具体在做什么,可看出哪些线程在长时间占用CPU,尽快定位问题和解 ...

  8. 【Azure Redis 缓存】Redisson 连接 Azure Redis出现间歇性 java.net.UnknownHostException 异常

    问题描述 在Java项目中,使用Redisson作为连接Redis的客户端,间歇性的出现了DNS Monitor throwable 错误. DNSMonitor throwable="ja ...

  9. 【Azure 应用服务】Azure Function App Linux环境下的Python Function,安装 psycopg2 模块错误

    问题描述 在Azure中创建Function App(函数应用), 用以运行Python代码(Python Version 3.7). 通过VS Code创建一个HttpTrigger的Functio ...

  10. TLS数据包重组

    TLS解密 参考以下链接:Wireshark 解密 TLS报文_在线tls解密-CSDN博客 总结: 配置环境变量 wireshark首选项配置 TLS解密例子 Frame 2700 Frame 27 ...