当前位置: 首页 > news >正文

开源治理的基本实践与指导原则

各种规模和各行各业的公司都在开发软件产品,并依靠开源代码来实现。业界领先的研究咨询公司 Forrester 和 Gartner 都表明,80%-90% 的商业软件开发人员在其应用程序中使用开源组件。随着开源项目的增多,在没有预防措施的情况下使用开源组件的风险也在增加。而开源治理可以帮助和指导开发人员如何使用开源工具来优化开源软件,同时降低风险。

本文将讨论开源治理的基本实践与指导原则,帮助降低安全风险的同时增加责任感。

开源治理的基本实践

从无视到重视

从过往的经验来看,让开发人员可以自由选择开源组件,没有记录,不受监控,能够加快软件开发的效率。然而,在快进开发流程时,这些开发人员渐渐意识到他们在享受开发自由的同时也需要处理十分棘手的问题,比如由于对许可证的了解不足,在不检查漏洞,不考虑漏洞严重性的情况下提取开源组件,而在接下来的开发中(几周甚至几个月)陷入修复漩涡。

在当今的开发环境中,企业开始尝试在开源治理和开发人员高效完成工作所需的自由之间找到平衡,以自动化、连续和一致的方式控制和管理开源使用。

从概念到实际

开源治理首先作为一个概念性想法发挥作用。该想法基于企业对开源的依赖且不了解他们的代码中有哪些组件涉及何种风险。当开发人员真正需要使用开源组件时,企业将需要了解开源相关的法律、安全、开发相关的细节,并根据信息制定治理政策。

这就是从概念到实际治理政策的转变。从需要以某种方式管理开源库,到公司跟踪、批准、控制和维护其软件中使用的开源组件的政策。治理策略还包括检测和批准过程、处理开源使用以及有关这些过程自动化的决策。

实际问题的实际解决方案

开源代码有潜在的安全、法律和运营风险。如果处理不当,这些风险可能会导致产品延迟发布、花费高昂代价进行补救措施,甚至于出现可用性错误和最终不受客户欢迎的情况。那么企业高层(CTO、CISO)应该做什么呢?首先,避免受影响的组件进入代码。其次,了解易受攻击的组件并在黑客利用之前对其进行处理。换句话说,为企业制定治理政策并执行。

这时,治理策略进入选择自动化工具的这类本质问题的解决方案阶段。比如,软件组合分析工具 (SCA)有各种形式和大小,其功能因产品而异。这些工具的能力范围从检测易受攻击的组件和阻止易受攻击的组件被开发人员选择,到检测代码中已经存在的易受攻击的组件并查明其位置。

为开发人员提供治理知识

企业需要在开源治理过程中为开发人员提供治理知识,让他们了解相关的合规性问题及其对应补救措施。根据 Forrester 的研究表明,在美国排名前 40 位的计算机科学课程和国际排名前五位的课程中,没有一个课程包含开源许可和安全编程实践。

因此,在工作中学习和积累开源治理专业知识就落到了行业本身。行业领先的公司正在将开源培训计划打包成类似于标准 HR 主导和管理的培训,并定期更新内容和安排培训,以确保开发人员能够跟上变化和挑战。本着开源精神,许多公司在业内分享这方面的最佳治理实践,行业专家在其他公司就该主题发表演讲。还有部分公司利用现有的管理培训课程(例如 Linux Foundation 提供的课程 1)对开发人员进行培训。

开源治理的三大指导原则

随着越来越多的企业使用开源组件和软件进行开发,开源软件已从地下 DIY 演变为运行许多企业软件重要部分的通用工具。随之,围绕开源项目展开商业活动的公司也如雨后春笋般涌现,这些公司通过提供更新、支持和服务来实现盈利。

开源和商业利益的交叉引发了关于权威、真实性和文化的问题。项目是由商业赞助商还是外部贡献者推动的?商业利益会凌驾于社会期望之上吗?如何以及在哪里划定商业实体和开源社区之间的界限?

开源治理的三大指导原则,帮助解决上述问题的同时,也保持商业组织和开源社区的活跃与繁荣,这些原则还有助于促进更多企业采用开源软件。

1. 透明度是关键

开源社区和围绕其建立并与之合作的公司必须保持足够透明。当出现问题时,双方进行及时和充分的讨论。博客、IRC、邮件列表、论坛和协作源代码共享网站(如 GitHub)是进行公开透明讨论的好选择。

2. 制定治理准则

社区的领导者可以根据社区习惯的工作或协作方式来制定政策和指南来治理社区。首先是行为准则或社区准则。每个社区成员在代表项目时都应当遵循这些准则。准则中必须概述可接受和不可接受的行为,并应描述处理事件的程序。接下来是治理政策,描述项目的规划、结构、政策和其他相关细节的管理。治理政策可以包括公开参与征集、操作描述和处理申诉的程序。最后是维护策略,描述如何做出有关项目的决策。包括对提议的软件更新进行审查、批准并将其合并到项目中的过程。

3. 每个角色都各具价值

开源社区中的所有成员都发挥着关键作用。因此让项目参与者意识到他们的价值并帮助他们在各自的角色中取得成功十分重要。

在开源领域有各种各样的角色。他们包括:

  • 社区参与者 ——参与者使用软件、阅读邮件列表并与社区中的其他人互动。如果参与者在社区中的使用体验感很好,并能够顺利得到帮助并成功使用软件,将会推荐更多人加入社区。

  • 贡献者 ——为项目贡献代码的人是社区的命脉。优秀的贡献者能够编写清晰且易于查找的贡献指南,定期审查贡献,并对每个提议的更改提供直接、建设性的反馈。

  • 企业用户 ——企业越来越多的采用开源技术,但企业开发人员并不像社区贡献者那样将代码毫无保留地贡献给项目。当然,企业用户也会向社区贡献一些重要内容,比如一些新的用例、新想法、以及要解决的新挑战。

  • 公司员工 ——有时公司员工也是社区内最活跃的社区成员,他们热衷于在社区内积极贡献。当然有少数员工因为公司要求和绩效评估而在社区内保持活跃。总之,让员工有时间和资源参与社区项目,有助于保持开源社区开源开放的宗旨。

  • 社区倡导者 ——这些人在社区中成为领导者并希望发挥专门的作用。在制定行为准则和社区指南时,社区倡导者监督的特定区域有:邮件列表、Stack Exchange、IRC 或其它论坛。倡导者需要鼓励健康积极的社区参与行为,并及时并严格处理不当行为。

总之,实践高透明度、鼓励积极参与并认可所有成员的贡献和价值,能够让开源社区变得更加活跃繁荣,并且拥有更强的迭代能力和项目加强能力。

参考链接:

https://training.linuxfoundation.org/training/fundamentals-of-professional-open-source-management-lfc110/
https://www.techtarget.com/searchitoperations/tip/Improving-open-source-software-governance-stature
https://www.mend.io/resources/blog/best-practices-for-open-source-governance/
https://devops.com/are-developers-responsible-for-open-source-governance/

相关文章:

  • 【APP测试】怎么对App进行功能测试
  • Mybatis-Plus复习
  • 8、JAVA入门——switch选择结构
  • Inno Setup 创建Revit安装包
  • Windows和Linux使用FRP实现内网穿透
  • c++代码如何实现在win/linux下创建编译及部署后台服务,并管理其他服务
  • UI 自动化测试应不应该投入?有没有前途?怎样做最明智?
  • 股票量化交易有什么优势?
  • 元宇宙电商-NFG系统,是如何用数字藏品平台,促进新营销的?
  • thunderbird102编译-环境搭建(1)
  • curl用法:查看响应时间
  • 房地产基础知识!!!
  • 写一个简单食用的拦截器
  • 算法竞赛进阶指南 0x68 二分图的匹配
  • 【无标题】数字ic设计|ic芯片设计全流程
  • ----------
  • @jsonView过滤属性
  • 【面试系列】之二:关于js原型
  • ES6--对象的扩展
  • Hibernate最全面试题
  • IndexedDB
  • Java 网络编程(2):UDP 的使用
  • java2019面试题北京
  • JavaScript学习总结——原型
  • PAT A1092
  • ReactNative开发常用的三方模块
  • React系列之 Redux 架构模式
  • ubuntu 下nginx安装 并支持https协议
  • Vultr 教程目录
  • 从零开始的无人驾驶 1
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 讲清楚之javascript作用域
  • 山寨一个 Promise
  • 深入浅出webpack学习(1)--核心概念
  • 王永庆:技术创新改变教育未来
  • 问题之ssh中Host key verification failed的解决
  • ​二进制运算符:(与运算)、|(或运算)、~(取反运算)、^(异或运算)、位移运算符​
  • ​总结MySQL 的一些知识点:MySQL 选择数据库​
  • #我与Java虚拟机的故事#连载13:有这本书就够了
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • %3cscript放入php,跟bWAPP学WEB安全(PHP代码)--XSS跨站脚本攻击
  • (07)Hive——窗口函数详解
  • (1)bark-ml
  • (js)循环条件满足时终止循环
  • (二)linux使用docker容器运行mysql
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (论文阅读23/100)Hierarchical Convolutional Features for Visual Tracking
  • (四)模仿学习-完成后台管理页面查询
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • (一)为什么要选择C++
  • ..回顾17,展望18
  • .net mvc 获取url中controller和action
  • .net 怎么循环得到数组里的值_关于js数组
  • /bin/rm: 参数列表过长"的解决办法