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

企业如何选择一个开源「好」项目?

开源 · 三句半​​​​​​​

需求明确是关键

风险考量要周全

开源虽好不白捡

别忘合规!

显然,开源已成为一股不可阻挡的洪流,企业拥抱开源,积极参与开源项目不仅是响应技术潮流的必然选择,更是实现自身技术创新、市场拓展等战略目标的新途径。然而,在企业进行开源治理的关键一点就是选择适合自己企业的开源项目。面对琳琅满目的开源项目,企业如何做出正确的选择却成为了一大挑战。

融入开源的第一步

企业如何选择合适的开源项目?

合适的开源项目仅能帮助企业加快技术创新和业务发展,还能帮助企业建立可持续的开源治理体系,从而使企业在市场竞争中保持技术领先地位。尽管大型科技企业已经有较完善的开源治理策略,但许多中小企业在选择开源项目时仍缺乏清晰的方向和有效的策略。本文结合多家公司治理经验,提炼出一套安全实用的策略,帮助企业选择开源项目。

“制度先行”,打好开源标准化工作基础

很多人认为,在选择和使用开源项目之前,制定一套开源相关的制度往往被视为繁文缛节,而忽视其重要性。但这些制度并不是多余,而是确保企业能够安全高效地开展开源项目管理标准化工作的关键。其中,必要的制度包括:开源项目使用制度、开源项目贡献制度、开源项目风险管理制度。

开源项目使用制度。开源项目使用制度是确保企业在使用开源项目时遵循一定规范和流程的基础。该制度应明确企业如何评估、选择、引入、使用和更新开源项目。其中包括建立清晰的决策流程,确保所选项目与企业的技术战略和业务需求相匹配。

同时,使用制度还应规定对开源项目的持续监控和维护,以确保其安全性、稳定性和性能满足企业要求。

开源项目贡献制度。除了使用开源项目外,企业还应积极参与开源社区,为开源项目做出贡献。开源项目贡献制度旨在鼓励和支持企业员工参与开源项目的开发、测试、文档编写等工作。通过制定明确的贡献指南和流程,企业可以确保员工的贡献符合开源社区的规范和标准。

此外,贡献制度还有助于提升企业在开源领域的声誉和影响力,吸引更多优秀人才加入。

风险管理制度。使用开源项目不可避免地会面临各种风险,如法律风险、安全风险、技术风险等。开源项目风险管理制度旨在帮助企业识别、评估、监控和应对这些风险。

其中应包括风险识别机制,定期评估开源项目的潜在风险;风险监控机制,持续跟踪开源项目的安全漏洞和法律纠纷;以及风险应对机制,制定应急预案和补救措施,以减轻潜在风险对企业的影响。

“择优录取”,项目的选型和引入

根据《信息技术 开源治理 第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’作为结束标志&#xff0c;strlen函数的返回值是‘\0’前面的字符串的个数&#xff08;不包括‘\0’&#xff09; 注意 1&#xff0c;参数指向的字符串必须以‘\0’结束 2&#xff0c;函数的返回值必须以size_t,是无符号的 使用代码 ​ #include<stdio.…...

【MATLAB源码-第168期】基于matlab的布谷鸟优化算法(COA)机器人栅格路径规划,输出做短路径图和适应度曲线。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 布谷鸟优化算法&#xff08;Cuckoo Optimization Algorithm, COA&#xff09;是一种启发式搜索算法&#xff0c;其设计灵感源自于布谷鸟的独特生活习性&#xff0c;尤其是它们的寄生繁殖行为。该算法通过模拟布谷鸟在自然界中…...

集合深入------理解底层。

集合的使用 前提&#xff1a;栈、堆、二叉树、hashcode、toString()、quesalus()的知识深入和底层理解。 1、什么是集合 集合就是咋们所说的容器 ​ 前面我们学习过数组 数组也是容器 ​ 容器&#xff1a;装东西的 生活中有多少的容器呀? 水杯 教室 酒瓶 水库 只要是…...

【阅读笔记】《硬笔书法艺术》

硬笔书法基础教程&#xff0c;也介绍了一些实用案例 作者: 万应均 出版社: 湖南人民出版社 笔记 CH1 运笔方式 起笔&#xff1a;起笔、切笔、顺峰、搭峰。 行笔&#xff1a;提笔、按笔、滑笔、转笔、折笔。 收笔&#xff1a;提收、顿收、折收。 CH2 钢笔楷书 “古人善书者…...

5.5.5、【AI技术新纪元:Spring AI解码】使用PGvector设置向量存储及进行相似性搜索

使用PGvector设置向量存储及进行相似性搜索 本节指导您如何设置PGvector VectorStore来存储文档嵌入并执行相似性搜索。 PGvector是一个开源的PostgreSQL扩展,能够支持存储和搜索机器学习生成的嵌入向量,提供查找精确和近似最近邻的功能。它设计得与PostgreSQL的其他特性无…...

EDR下的线程安全

文章目录 前记进程断链回调执行纤程内存属性修改early birdMapping后记reference 前记 触发EDR远程线程扫描关键api&#xff1a;createprocess、createremotethread、void&#xff08;指针&#xff09;、createthread 为了更加的opsec&#xff0c;尽量采取别的方式执行恶意代…...

洛谷刷题 | B3623 枚举排列

枚举排列 题目描述 今有 n n n 名学生&#xff0c;要从中选出 k k k 人排成一列拍照。 请按字典序输出所有可能的排列方式。 输入格式 仅一行&#xff0c;两个正整数 n , k n, k n,k。 输出格式 若干行&#xff0c;每行 k k k 个正整数&#xff0c;表示一种可能的队…...

程序员35岁会失业吗?

程序员35岁会失业吗&#xff1f; 35岁被认为是程序员职业生涯的分水岭&#xff0c;许多程序员开始担忧自己的职业发展是否会受到年龄的限制。有人担心随着年龄的增长&#xff0c;技术更新换代的速度会使得资深程序员难以跟上&#xff1b;而另一些人则认为&#xff0c;丰富的经…...

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存储引擎逻辑结构如图所示&#xff1a; Tablespace&#xff1a;表空间&#xff0c;一个数据库可以对应多个表空间。数据库中的每张表都有一个表空间&#xff0c;用来存放表记录、索引等数据。 Segment&#xff1a;段&#xff0c;表空间中有多个段&#xff0c…...

小白如何兼职赚得第一桶金?六大网络赚钱方式助你轻松开启副业之旅

小白如何兼职赚得第一桶金&#xff1f;六大网络赚钱方式助你轻松开启副业之旅 无需担忧&#xff0c;以下为你精心挑选的六大线上兼职方式&#xff0c;将助你轻松开启副业赚钱之旅。 1&#xff0c;参与网络调查&#xff1a;市场调研公司及品牌商为洞察消费者需求&#xff0c;常…...

富格林:出金不顺谨防虚假受害

富格林悉知&#xff0c;做投资有盈有亏是正常的&#xff0c;投资者需要做的是尽可能降低亏损的风险&#xff0c;警惕虚假出金陷阱&#xff0c;避免造成不必要的亏损。在进入黄金投资市场之前&#xff0c;投资者需学习一定的投资技巧&#xff0c;并且需要采取正规的策略来打击和…...

Saltstack 最大打开文件数问题之奇怪的 8192

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

Appium Inspector 展示设备当前页面

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

Spring Boot 2 中 default-autowire 的使用

Spring Boot 2 中 default-autowire 的使用 在 Spring Boot 2 中&#xff0c;default-autowire 这个来自传统 XML 配置的概念仍然存在&#xff0c;但它的使用已经大大减少&#xff0c;因为现代 Spring Boot 应用主要使用注解驱动的配置方式。 default-autowire 在 Spring Boo…...

什么是高考?高考的意义是啥?

能见到这个文章的群体&#xff0c;应该都经历过高考&#xff0c;突然想起“什么是高考&#xff1f;意义何在&#xff1f;” 一、高考的定义与核心功能 **高考&#xff08;普通高等学校招生全国统一考试&#xff09;**是中国教育体系的核心选拔性考试&#xff0c;旨在为高校选拔…...

【数据结构】顺序表和链表详解(下)

前言&#xff1a;上期我们从顺序表开始讲到了单链表的概念&#xff0c;分类&#xff0c;和实现&#xff0c;而这期我们来将相较于单链表没那么常用的双向链表。 文章目录 一、双向链表二&#xff0c;双向链表的实现一&#xff0c;增1&#xff0c;头插2&#xff0c;尾插3&#x…...

pgsql batch insert optimization (reWriteBatchedInserts )

reWriteBatchedInserts 是 PostgreSQL JDBC 驱动 提供的一个优化选项&#xff0c;它可以 重写批量插入语句&#xff0c;从而提高插入性能。 作用 当 reWriteBatchedInsertstrue 时&#xff0c;PostgreSQL JDBC 驱动会将 多个单独的 INSERT 语句 转换为 一个多行 INSERT 语句&a…...

ngx_stream_geo_module在传输层实现高性能 IP Region 路由

一、模块定位与核心价值 层次&#xff1a;工作在 Stream (TCP/UDP) 层&#xff0c;和 ngx_http_geo_module 的 L7 语义互补。作用&#xff1a;基于客户端 IP 前缀 / 范围生成一个 Nginx 变量&#xff0c;可在后续 proxy_pass、map、limit_conn、access 等指令中使用&#xff0…...

EMC VNXe 存储系统日志收集方法

写在前面 有朋友找来看看VNXe的故障&#xff0c;这种问题总是要收集日志&#xff0c;顺便这里也分享给大家。 注意&#xff0c;VNXe和VNX 属于完全不同的产品&#xff0c;不要看名字很类似&#xff0c;操作系统已经完全重构了&#xff0c;如果说是否有联系&#xff0c;大概就…...

从“人找政策”到“政策找人”:智能退税ERP数字化重构外贸生态

离境退税新政核心内容与外贸企业影响 &#xff08;一&#xff09;政策核心变化解析 退税商店网络扩容 新政明确鼓励在大型商圈、旅游景区、交通枢纽等境外旅客聚集地增设退税商店&#xff0c;并放宽备案条件至纳税信用M级企业。以上海为例&#xff0c;静安区计划新增1000家退…...

【设计模式-5】设计模式的总结

说明&#xff1a;介绍完所有的设计模式&#xff0c;本文做一下总结 设计模式介绍 博主写的设计模式博客如下&#xff1a; 【设计模式-1】UML和设计原则 【设计模式-2.1】创建型——单例模式 【设计模式-2.2】创建型——简单工厂和工厂模式 【设计模式-2.3】创建型——原型…...

【业务框架】3C-相机-Cinemachine

概述 插件&#xff0c;做相机需求&#xff0c;等于相机老师傅多年经验总结的工具 Feature Transform&#xff1a;略Control Camera&#xff1a;控制相机参数Noise&#xff1a;增加随机性Blend&#xff1a;CameraBrain的混合列表指定一个虚拟相机到另一个相机的过渡&#xff…...

[Java 基础]Java 中的关键字

在 Java 编程语言中&#xff0c;关键字 (Keywords) 是预定义的、具有特殊含义的标识符 (identifiers)。它们是 Java 语言语法的一部分&#xff0c;被 Java 编译器赋予了特定的功能和用途。因此&#xff0c;你不能将关键字用作变量名、类名、方法名或其他用户自定义的标识符。 …...