企业如何选择一个开源「好」项目?
开源 · 三句半
需求明确是关键
风险考量要周全
开源虽好不白捡
别忘合规!
显然,开源已成为一股不可阻挡的洪流,企业拥抱开源,积极参与开源项目不仅是响应技术潮流的必然选择,更是实现自身技术创新、市场拓展等战略目标的新途径。然而,在企业进行开源治理的关键一点就是选择适合自己企业的开源项目。面对琳琅满目的开源项目,企业如何做出正确的选择却成为了一大挑战。
融入开源的第一步
企业如何选择合适的开源项目?
合适的开源项目仅能帮助企业加快技术创新和业务发展,还能帮助企业建立可持续的开源治理体系,从而使企业在市场竞争中保持技术领先地位。尽管大型科技企业已经有较完善的开源治理策略,但许多中小企业在选择开源项目时仍缺乏清晰的方向和有效的策略。本文结合多家公司治理经验,提炼出一套安全实用的策略,帮助企业选择开源项目。
“制度先行”,打好开源标准化工作基础
很多人认为,在选择和使用开源项目之前,制定一套开源相关的制度往往被视为繁文缛节,而忽视其重要性。但这些制度并不是多余,而是确保企业能够安全高效地开展开源项目管理标准化工作的关键。其中,必要的制度包括:开源项目使用制度、开源项目贡献制度、开源项目风险管理制度。
开源项目使用制度。开源项目使用制度是确保企业在使用开源项目时遵循一定规范和流程的基础。该制度应明确企业如何评估、选择、引入、使用和更新开源项目。其中包括建立清晰的决策流程,确保所选项目与企业的技术战略和业务需求相匹配。
同时,使用制度还应规定对开源项目的持续监控和维护,以确保其安全性、稳定性和性能满足企业要求。
开源项目贡献制度。除了使用开源项目外,企业还应积极参与开源社区,为开源项目做出贡献。开源项目贡献制度旨在鼓励和支持企业员工参与开源项目的开发、测试、文档编写等工作。通过制定明确的贡献指南和流程,企业可以确保员工的贡献符合开源社区的规范和标准。
此外,贡献制度还有助于提升企业在开源领域的声誉和影响力,吸引更多优秀人才加入。
风险管理制度。使用开源项目不可避免地会面临各种风险,如法律风险、安全风险、技术风险等。开源项目风险管理制度旨在帮助企业识别、评估、监控和应对这些风险。
其中应包括风险识别机制,定期评估开源项目的潜在风险;风险监控机制,持续跟踪开源项目的安全漏洞和法律纠纷;以及风险应对机制,制定应急预案和补救措施,以减轻潜在风险对企业的影响。
“择优录取”,项目的选型和引入
根据《信息技术 开源治理 第2部分:企业治理评估模型》中所言,在项目选型上企业研发项目在需要引入开源项目前对其进行评估,可以根据以下四个维度对开源项目进行综合考量。
综合上面维度考虑,我们可以将开源项目引入分为以下流程:
需求分析与评估
1. 明确业务需求:确定企业需要引入开源项目来解决的具体问题或实现的功能。
2. 技术评估:分析开源项目的技术栈、架构、性能等是否符合企业的技术要求和标准。
3. 成本效益分析:评估引入开源项目的成本(包括人力、物力、时间等)与预期收益之间的平衡。
项目筛选与审查
1. 市场调研:收集并整理相关领域的开源项目,了解其活跃度、社区支持、文档完善度等指标。
2. 筛选审查:基于业务需求和技术评估结果,筛选出几个潜在的候选项目,对候选项目进行审查。
3. 许可证检查:核实候选项目开源项目的许可证类型,确保满足选型规则条件。
原型测试与验证
经过筛选审查后,企业应选出几个候选的开源项目,进行原型测试与验证。这一阶段的重点是:
1. 搭建测试环境:模拟实际生产环境,对开源项目进行安装部署和配置。通过模拟实际生产环境,对开源项目进行安装部署和配置,以确保其在真实场景中的可行性。
2. 功能性验证:编写测试用例,验证项目是否满足企业的基本功能需求。通过编写测试用例,全面验证项目是否满足企业的基本功能需求,确保其功能完备且符合预期。
3. 兼容性与集成性测试:确保所选开源项目能够与企业现有的系统和工具无缝集成,避免在实际应用中出现兼容性问题。
4. 安全性测试:通过代码检测、软件成分分析、渗透测试、权限验证等手段,全面评估项目的安全性,确保其在应用过程中不会引入安全风险。
风险评估与应对策略
在选择开源项目之前,企业应对可能面临的风险进行评估,并制定相应的应对策略。常见的风险包括:
1. 技术风险:开源项目可能存在技术上的局限性、不成熟或潜在缺陷,企业应仔细评估项目,通过性能测试工具模拟高负载和并发场景,检测项目在性能、稳定性等方面的表现。
2. 社区风险:开源社区的变化(如核心开发者流失)可能影响到项目的长期维护和发展。企业应密切关注开源社区的动,与核心开发者建立良好关系,以便及时获取项目更新和支持。
3. 许可风险:某些开源许可证的变更可能导致企业,需要调整使用策略或面临合规性问题。企业应通过工具审查项目的许可证,并通过SCA工具检测项目依赖的问题,确保其与企业的商业模式和合规要求相符。
4. 安全风险:开源项目可能成为不法分子的攻击目标,从而间接攻击引入项目的企业,导致开源软件供应链安全风险增加。企业应加强对开源项目的持续管理和监控,定期通过SCA工具进行组件识别与漏洞分析,结合SAST工具对源代码扫描检测,有效加强项目安全性。
决策与审批
1. 制定决策报告:汇总项目筛选与审查的结果,形成详细的决策报告,包括推荐引入的开源项目及其理由。
2. 内部审批:将决策报告提交给企业的决策层或相关技术委员会进行审批。确保决策过程透明且符合企业的决策流程。
入库集成
1. 入库管理:将选定的开源项目的代码/制品拉取到企业内部,并入企业开源项目管理库,供后续进行使用和管理。代码/制品需要从官方或者可靠的源下载,避免引入安全隐患。
2. 文档编写与培训:编写开源项目的使用文档和培训材料,为企业员工提供必要的技术支持和培训。
精选开源项目,引领技术未来
面对开源的洪流,企业如何乘风破浪,抓住技术革新的机遇,关键在于能否精准地选择并引入适合自己的开源项目。通过制定一套完善的开源项目选择策略,企业可以快速融入开源项目,持续推动技术创新和业务拓展。
推荐阅读
企业如何安全参与开源项目?
面对开源许可证的隐患,如何做出明智选择?
相关文章:

企业如何选择一个开源「好」项目?
开源 三句半 需求明确是关键 风险考量要周全 开源虽好不白捡 别忘合规! 显然,开源已成为一股不可阻挡的洪流,企业拥抱开源,积极参与开源项目不仅是响应技术潮流的必然选择,更是实现自身技术创新、市场拓…...
c++算法学习笔记 (14) 并查集
1.合并集合 一共有 n 个数,编号是 1∼n,最开始每个数各自在一个集合中。 现在要进行 m 个操作,操作共有两种: M a b,将编号为 a 和 b 的两个数所在的集合合并,如果两个数已经在同一个集合中,…...
import * as的使用
import * as 是将一个模块的所有导出内容作为一个命名空间对象导入到当前模块中,其中 * 表示导入该模块中的所有导出内容,而 as 则用于指定导入的命名空间对象的名称。 例如:在 formatter 文件中有两个方法导出 const a () > {console.…...

微服务(基础篇-003-Nacos)
目录 Nacos注册中心(1) 认识和安装Nacos(1.1) Nacos快速入门(1.2) 服务注册到Nacos(1.2.1) Nacos服务分级存储模型(1.3) 配置集群(1.3.1) 根据集群修改…...

java数据结构与算法刷题-----LeetCode215. 数组中的第K个最大元素
java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/123063846 文章目录 解题思路:时间复杂度O( n n n),空间复杂度…...

Springboot 整合 Knife4j (API文档生成工具)
目录 一、Knife4j 介绍 二、Springboot 整合 Knife4j 1、pom.xml中引入依赖包 2、在application.yml 中添加 Knife4j 相关配置 3、打开 Knife4j UI界面 三、关于Knife4j框架中常用的注解 1、Api 2、ApiOperation 3、ApiOperationSupport(order X) 4、ApiImplici…...

C语言---------strlen的使用和模拟实现
字符串是以‘\0’作为结束标志,strlen函数的返回值是‘\0’前面的字符串的个数(不包括‘\0’) 注意 1,参数指向的字符串必须以‘\0’结束 2,函数的返回值必须以size_t,是无符号的 使用代码 #include<stdio.…...

【MATLAB源码-第168期】基于matlab的布谷鸟优化算法(COA)机器人栅格路径规划,输出做短路径图和适应度曲线。
操作环境: MATLAB 2022a 1、算法描述 布谷鸟优化算法(Cuckoo Optimization Algorithm, COA)是一种启发式搜索算法,其设计灵感源自于布谷鸟的独特生活习性,尤其是它们的寄生繁殖行为。该算法通过模拟布谷鸟在自然界中…...

集合深入------理解底层。
集合的使用 前提:栈、堆、二叉树、hashcode、toString()、quesalus()的知识深入和底层理解。 1、什么是集合 集合就是咋们所说的容器 前面我们学习过数组 数组也是容器 容器:装东西的 生活中有多少的容器呀? 水杯 教室 酒瓶 水库 只要是…...
【阅读笔记】《硬笔书法艺术》
硬笔书法基础教程,也介绍了一些实用案例 作者: 万应均 出版社: 湖南人民出版社 笔记 CH1 运笔方式 起笔:起笔、切笔、顺峰、搭峰。 行笔:提笔、按笔、滑笔、转笔、折笔。 收笔:提收、顿收、折收。 CH2 钢笔楷书 “古人善书者…...
5.5.5、【AI技术新纪元:Spring AI解码】使用PGvector设置向量存储及进行相似性搜索
使用PGvector设置向量存储及进行相似性搜索 本节指导您如何设置PGvector VectorStore来存储文档嵌入并执行相似性搜索。 PGvector是一个开源的PostgreSQL扩展,能够支持存储和搜索机器学习生成的嵌入向量,提供查找精确和近似最近邻的功能。它设计得与PostgreSQL的其他特性无…...

EDR下的线程安全
文章目录 前记进程断链回调执行纤程内存属性修改early birdMapping后记reference 前记 触发EDR远程线程扫描关键api:createprocess、createremotethread、void(指针)、createthread 为了更加的opsec,尽量采取别的方式执行恶意代…...
洛谷刷题 | B3623 枚举排列
枚举排列 题目描述 今有 n n n 名学生,要从中选出 k k k 人排成一列拍照。 请按字典序输出所有可能的排列方式。 输入格式 仅一行,两个正整数 n , k n, k n,k。 输出格式 若干行,每行 k k k 个正整数,表示一种可能的队…...
程序员35岁会失业吗?
程序员35岁会失业吗? 35岁被认为是程序员职业生涯的分水岭,许多程序员开始担忧自己的职业发展是否会受到年龄的限制。有人担心随着年龄的增长,技术更新换代的速度会使得资深程序员难以跟上;而另一些人则认为,丰富的经…...

RabbitMQ 安装保姆级教程
目录 1.MQ引言 1.1 什么是MQ 1.2 MQ有哪些 1.3 不同MQ特点 2.RabbitMQ 的引言 2.1 RabbitMQ 2.2 RabbitMQ 的安装 2.2.1 下载 2.2.2 下载的安装包 2.2.3 安装步骤 3. RabiitMQ 配置 3.1RabbitMQ 管理命令行 3.2 web管理界面介绍 3.2.1 overview概览 3.2.2 Admin用…...

【MySQL】InnoDB引擎
逻辑结构 InnoDB存储引擎逻辑结构如图所示: Tablespace:表空间,一个数据库可以对应多个表空间。数据库中的每张表都有一个表空间,用来存放表记录、索引等数据。 Segment:段,表空间中有多个段,…...

小白如何兼职赚得第一桶金?六大网络赚钱方式助你轻松开启副业之旅
小白如何兼职赚得第一桶金?六大网络赚钱方式助你轻松开启副业之旅 无需担忧,以下为你精心挑选的六大线上兼职方式,将助你轻松开启副业赚钱之旅。 1,参与网络调查:市场调研公司及品牌商为洞察消费者需求,常…...
富格林:出金不顺谨防虚假受害
富格林悉知,做投资有盈有亏是正常的,投资者需要做的是尽可能降低亏损的风险,警惕虚假出金陷阱,避免造成不必要的亏损。在进入黄金投资市场之前,投资者需学习一定的投资技巧,并且需要采取正规的策略来打击和…...

Saltstack 最大打开文件数问题之奇怪的 8192
哈喽大家好,我是咸鱼。 今天分享一个在压测过程中遇到的问题,当时排查这个问题费了我们好大的劲,所以我觉得有必要写一篇文章来记录一下。 问题出现 周末在进行压测的时候,测试和开发的同事反映压测有问题,请求打到…...

Appium Inspector 展示设备当前页面
定位元素需要使用appium inspector,之前每次都是从登录页开始,后来发现连接设备的时候只需要去掉appPackage、appActivity即可。 { "platformName": "Android", "platformVersion": "6", "deviceNa…...

Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...

以光量子为例,详解量子获取方式
光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学(silicon photonics)的光波导(optical waveguide)芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中,光既是波又是粒子。光子本…...
CSS设置元素的宽度根据其内容自动调整
width: fit-content 是 CSS 中的一个属性值,用于设置元素的宽度根据其内容自动调整,确保宽度刚好容纳内容而不会超出。 效果对比 默认情况(width: auto): 块级元素(如 <div>)会占满父容器…...

mac 安装homebrew (nvm 及git)
mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用: 方法一:使用 Homebrew 安装 Git(推荐) 步骤如下:打开终端(Terminal.app) 1.安装 Homebrew…...

STM32---外部32.768K晶振(LSE)无法起振问题
晶振是否起振主要就检查两个1、晶振与MCU是否兼容;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容(CL)与匹配电容(CL1、CL2)的关系 2. 如何选择 CL1 和 CL…...
【FTP】ftp文件传输会丢包吗?批量几百个文件传输,有一些文件没有传输完整,如何解决?
FTP(File Transfer Protocol)本身是一个基于 TCP 的协议,理论上不会丢包。但 FTP 文件传输过程中仍可能出现文件不完整、丢失或损坏的情况,主要原因包括: ✅ 一、FTP传输可能“丢包”或文件不完整的原因 原因描述网络…...

篇章二 论坛系统——系统设计
目录 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 1. 数据库设计 1.1 数据库名: forum db 1.2 表的设计 1.3 编写SQL 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 通过需求分析获得概念类并结合业务实现过程中的技术需要&#x…...