开源 #### 2020 年较上一年新增了 1600 万开发者用户,预计 2025 年开发者用户的数量将达到 1 亿。这其中, 在 GitHub 的中国开发者数量及开源贡献度增长已成为全球最快,GitHub 预测到 2030 年中国开发者将成为全球最大的开源群体。 TiDB 背后的商业公司 PingCAP 2021年3月12日,《中华人民共和国国民经济和社会发展第十四个五年规划和2035年远景目标纲要》首次明确地将开源写入国家总体规划纲要之中,中国开源从此开启了新的 篇章。 中国开源软件推进联盟 COPU Open Source Inner Source 1. 开源正在吞噬软件世界 - 很多公司都在尝试内部开源(BAT、海尔、PingCAP) - 现在国内政府重视开源(开放原子开源基金会) 2. 对公司有利 未来开源提升公司影响力 高松散低耦合,有利于业务部门快速开发业务 3. 具体步骤 以1、2个项目开源推广、摸索制度(法律、培训、布道) 形成内部开源组织 先吸引有经验、有想法的人加入形成管委会 公司认同,提供激励机制,制度条件 4. 想法来源 刚来公司时,感觉团队是小团队 现在我手里一堆活 微信群,想自己组建原型 有这个机会 代码托管、代码 revierw、持续集成、自动化测试、文档创建、知识库、奖励计划 定义 ---- 内源是在组织内使用开源软件开发最佳实践并建立类开源文化。该组织可以在组织内部开源的同时开发专有软件。 内源这个词是 Tim O'Reilly 在 2000 年提出的。 基于开放式协作的原则(平等的、精英领导的、自组织的),欢迎愿意为内源项目提供帮助的所有贡献者。 从成功的开源项目中汲取有关软件开发的经验教训,并将其引入公司内部。 它是一种自下而上的驱动式发展:先由最基石的开发者,发起开源项目,形成开发者社区,产生扶持和孵化的基金会,再用开源教育吸引培养大量的开源人才加入,在开源项目和组织发展到一定规模后由基金会推动产业生态,同时不断发展和完善商业模式,通过开源许可证和法律对开源风险进行治理,基于各个维度,中国的开源已实现创新突破。 内部开源是把开发开源软件中学到的经验教训应用到公司内部开发软件的实践。因为它是在公司环境中完成的,所以内部开源是在公司内部网络中发生的。 在内部开源中,开发人员将会有相应的回报和付出。 回报: 其他人的代码可重用或直接拿来使用(而不是以不同的方式重写同一个项目) 来自更多人对代码的测试,补充和修复 付出: 代码供他人重用或使用 在其他人的项目中进行协作,补充,测试或修复代码 动机 ---- 开源被认为能够交付高质量的软件。此外,开源世界中的开放式协作可以促进协作。 软件开发组织希望从其成果(软件组件和工具)中受益,也希望从开源世界中实践和建立的开发实践中受益。 这是对程序员们希望或需要阅读和修改代码的一种认可。它说明了一个基本原则,即程序员们是充满好奇的生物,他们不仅渴望了解事物的工作原理,而且也希望自己创造和更改它们。 回报: 其他人的代码可重用或直接拿来使用(而不是以不同的方式重写同一个项目) 来自更多人对代码的测试,补充和修复。 付出: 代码供他人重用或使用 在其他人的项目中进行协作,补充,测试或修复代码。 开放式协作 ---------- 在推行内源的公司,所有员工都必须可以访问所有需要的开发制品(例如,代码、文档、问题跟踪等)。集中软件构建是实施开放式协作的重要工具。 基于开放式协作的原则(平等的、精英领导的、自组织的),通常欢迎愿意为内源项目提供帮助的所有贡献者。 对内源项目的贡献通常是根据其为项目带来的价值来进行评估。 公开讨论决策时,开放式沟通也实现了精英制度。 尽管组织不一定要变成彻底的自组织来适应内源,但是内源允许个人,组织单元和项目团体具有更高程度的自组织。 开放式沟通 ---------- 开放式的沟通可以让内源项目和软件中的所有成员能够公开参与所有的交流互动。 开放式沟通是公开的(在公司内部)、书面的、有存档且完整的。 目的是允许与内源项目有关或感兴趣的任何个人或团体参与沟通。 开放式沟通是会被存档的,软件的详细文档会被收集起来,使你可以回过头来回顾当时的讨论和决策。 通过分离角色保证产品质量 ------------------------ 专门的代码审查以及贡献者和提交者(拥有写入权限的集成者、开发者)分离,可以确保开源项目的质量,也可以保证内源项目的质量。 国家政策 ======== 《中华人民共和国国民经济和社会发展第十四个五年规划和 2035 年远景目标纲要》 开源首次被明确列入其中,在加强关键数字技术创新应用一节中提到,“聚焦高端芯片、操作系统、人工智能关键算法、传感器等关键领域,加快推进基础理论、基础算法、装备材料等研发突破与迭代应用。加强通用处理器、云计算系统和软件核心技术一体化研发。加快布局量子计算、量子通信、神经芯片、DNA 存储等前沿技术,加强信息科学与生命科学、材料等基础学科的交叉创新,支持数字技术开源社区等创新联合体发展,完善开源知识产权和法律体系,鼓励企业开放软件源代码、硬件设计和应用服务。” 以芯片和操作系统为主的深度信息技术生态;多家开源数据库的创新生态;工业软件升级的工业互联网开源生态;以及最热点的包括人脸识别、自动驾驶在内的人工智能生态、中间件和云计算大数据产业生态等。 《2021 中国开源发展蓝皮书》 2021 年 5 月 11 日,由中国开源软件推进联盟发起,联合中国开发者社区 CSDN、中国网络空间研究院、中国电子信息产业发展研究院、中国电子技术标准化研究院、开源社、开源中国、北京大学、国防科技大学、华东师范大学等几十家科研院所、科技企业,共同重磅发布《2021 中国开源发展蓝皮书》,旨在全面梳理、展现当前中国开源发展的真实图谱。 9 月 9 日晚,中国首个开源软件基金会「开放原子开源基金会(OpenAtom Foundation)」官方正式对外发声。 开放原子开源基金会作为中国首个在民政部注册的致力于开源产业公益事业的非营利性独立法人机构,也是目前唯一一个以开源为主题的基金会。 其服务范围包括开源软件、开源硬件、开源芯片及开源内容等,开放原子基金会成立的初衷是致力于为各类开源项目提供中立的知识产权托管,保证项目的持续发展不受第三方影响的同时,通过开放治理寻求更丰富的社区资源的支持与帮助,包括募集并管理资金,法律、财务等专业支持。 在国际上开源基金会一直是开源项目的孵化器、连接器和倍增器。开源基金会通过对开源代码的开放治理以便于形成事实标准,连接产学研共建开源生态,为开源项目找到更多的应用场景。开放原子开源基金会的成立标志着中国开源事业上了一个新台阶。 除鸿蒙外,还包括百度超级链 XuperChain、360 的类 Redis 存储系统 Pika、腾讯的 Kubernetes 发行版 TKEStack 和物联网终端操作系统 TencentOS tiny 、浪潮的低代码开发平台 UBML,以及物联网嵌入式操作系统 AliOS Things 等项目。 目前该基金会的主要捐赠单位有七家,分别是:阿里巴巴、百度、华为、浪潮、腾讯、360 和招商银行。 内源的好处 ========== 内源(InnerSource)是使用开源软件开发最佳实践并在组织内建立类似开源的文化。 该组织可能仍会开发专有软件,但会在内部开放其开发。 1. 开发更有效和高效 更快推向市场 降低开发成本 2. 克服组织单元边界(打破部门墙) 组织单元成本和风险共担 跨越组织单元边界合作 应用程序级信息互通 3. 更多功能重用 可以使用单独组件无法提供的能力 复用者和提供者之间相互独立 组件提供者变轻松 4. 更好的软件产品 代码质量提升 更多创新性开发 5. 更灵活地利用开发人员 简化开发人员部署 无关联的开发人员相互合作 6. 增强知识管理 社区学习 知识开放性和可用性 7. 员工动力更足 企业内源的好处:: 1. 加速知识共享,提升人员能力 2. 提高软件复用,提高软件水平 3. 打破部门墙,促进内部合作 4. 激励创新 提高创新能力,缩短产品上市时间,并使员工和客户感到满意。 首先明确几个角色,分别是: Moderator 管理者:开源或者内源仓库的管理者,有权限添加 Committer、审核 PR、管理 issue 等 Committer 开发者:仓库的成员,可以直接提交代码,审核 Contributor 的代码,处理 Issue 等 Contributor 贡献者:贡献者可以通过 Fork + Pull Request 的方式来贡献代码 企业内源仓库对所有企业成员是开放的,成员要为内源仓库贡献代码的几种途径: 将指定企业成员添加到内源仓库成员中,成为内源仓库的 Committer,仓库成员也就是 Committer 提交代码无需审核直接入库 任何企业内成员都可以直接 Fork 内源仓库,然后通过给主仓库提交 Pull Request (PR) 来实现参与贡献,PR 需要仓库成员 (Committer) 审核才能入库,一旦所提交的 PR 被合并,该开发者即成为内源仓库的贡献者 (Contributor)。经常贡献代码的贡献者建议可以添加到仓库成员成为 Committer 。 企业成员也可以给内源仓库提交 Issue 来报告问题、提需求等贡献 审核贡献者提交的代码 当企业成员通过 PR 提交贡献的代码之后,仓库的 Moderator 和 Committer 有权限来审核代码,并决定是否合并到主仓库,或者拒绝合并。拒绝合并请提供拒绝的理由。建议 PR 审核者在与贡献者出现分歧的时候,不要生硬的拒绝,应该通过 PR 评论进行沟通,并根据最终的沟通结果来决定 PR 的合并还是拒绝。 将内源仓库正式对外开源,并接受社区的贡献 建议企业所有的仓库在对外开源之前,必须先在内部开源(也就是我们所说的内源),这样可以确保多数的问题在内部得以发现并解决后才对外开放。对外开放之前还需要进行各方面的合规检查,合规检查清单包含但不止于以下列表: 是否存在企业不允许公开的专有软件相关内容 是否使用恰当的开源许可证(根目录下的 LICENSE 是许可证的文本副本),可使用 Gitee 提供的开源许可证向导工具进行选择。 检查是否有存在与引用的第三方软件和包的许可证冲突的情况 对引入第三方开源软件包的修改是否已记录,并作为更改日志的一部分包含在开源发行说明中 内源相比开源的不同点:: 将内源仓库正式对外开源,并接受社区的贡献 对外开放之前还需要进行各方面的合规检查 企业不允许公开的专有软件相关内容 使用恰当的开源许可证 是否有存在与引用的第三方软件和包的许可证冲突的情况 企业内源更需要公司从管理上进行支持,通过制度和文化的建设来推动内源的发展,让其真正的发挥出效果:: 不断的给工程师和管理者们进行各种开源的布道; 设定各种政策和流程来激励贡献者; 不断树立各种标杆项目,标杆贡献者等等。 内部开源可以解决什么问题? 封闭或孤立的开发模式所产生的问题,让他们开始追求内部开源。 重复开发 多次以不同方式构建同一事物的成本很高。将代码写完后重用,或者在此基础上构建新的代码,这会具有更高的成本效益。它可能导致相同产品矩阵中外观和感觉不同的产品。客户期望且理应得到同一产品矩阵中的产品能够提供无缝,一致的体验。重复开发也可能意味着你的产品与产品之间无法无缝结合使用或根本无法结合在一起。如果你的目标是提供统一集成的解决方案,那么对不起。如果你不花时间在重新造轮子上,完全可以可以更快地进入市场。 产品上线时间变慢 重复开发导致产品上线时间变慢,但也可能是由于封闭和孤立的开发环境所带来的依赖性。如果你的产品需要与另一个你没有发言权的产品集成,则必须等待有人同意添加你的功能或修复某个 Bug,这意味着你需要花费较长时间才能进入市场。你会因为速度变慢而错过市场机会吗?其他公司会趁机击败你吗? 局限性 如果你的开发环境是孤立的或封闭的,你的测试人员也仅限于你那个特定的小组。在漏洞响应和解决问题的资源方面,你也可能会受到限制。拥有更多不同经验和观点的外部人员可以找到并解决多少个问题?这会对产品的质量产生什么影响? 许多开发者在和聪明,敬业的人们一起工作,他们为出色的产品构建功能,提供支持,这非常棒。但是在封闭或孤立的环境中,你可能只与三五个人或十来人一起工作,建立联系、相互信任并向他们学习。 你如果能和 20 或 30 个,或更多杰出的开发者一起工作,那不是会更好吗?你能成就些什么?你能在这个过程中学到什么?如果你可以从其他项目和领域中学习,将会获得什么新技能?你难道不想在这样的地方工作吗? 其他 ==== (一)开源是现代创新的引擎 (二)构建开源生态、倡导开源文化 (三)开源促进深度信息技术及产业发展 (四)开源加速架构数字时代进程 操作系统:Linux,Android 编辑器:Vim,Emacs,Atom,VSCode 版本管理:SVN,Git,Fossil 数据库:MySQL,MongoDB,Redis 大数据平台:Hadoop,ElasticSearch,HBase 容器:Apache,Nginx 虚拟化软件:Docker,Kubernetes 参考 ==== * https://gitee.com/InnerSource * https://oschina.gitee.io/opensource-guide/ * 使用开源:企业施行内部开源的 10 个步骤: https://www.oschina.net/news/87952/create-internal-innersource-community