# MindSpore 软件包依赖管理规范(试行稿)

## 关于本文档

### 目标

为满足网络安全、合法合规、可追溯性要求，特拟定本规范，指导MindSpore社区正确使用开源软件。本规范的中**必须**，**必须不能**，**应该**，**应该不能**的含义参考[RFC2119](https://tools.ietf.org/html/rfc2119)。

### 范围

 本文档定义了MindSpore社区新增、升级、降级、删除开源软件包所需要遵从的策略要求。所有提交到MindSpore社区的开源软件包需要满足本文档中定义的技术要求。

### 本文的改进和修订说明

- 本文档由[MindSpore技术委员会](https://gitee.com/mindspore/community/tree/master/tsc)（ Technical Steering Committee, TSC）主导起草和维护。本文档的最新版本可以在 [这里](https://gitee.com/mindspore/community/tree/master/security/software-management_zh_cn.md) 找到。
- 任何对于本文中涉及的规则的增加，修改，删除都**必须**被追踪，[请进入该追踪系统](https://gitee.com/mindspore/community/issues) 。
- 最终规则经过社区充分的讨论后，由技术委员会定稿。

## 开源软件选型原则

### 目的

制定本原则是为了确保MindSpore社区使用的开源软件质量可靠、安全稳定。

### 软件选型要求

#### 总体要求

1. 为了确保开源及第三方软件的质量，从社区引入某开源软件/版本，或者从第三方供应商处引入某第三方软件/版本，需要进行选型评估活动。
2. 软件选型要求保证开源软件基本信息正确。软件基本信息包括软件名称、软件版本号、编程语言、官网地址、license、官方发布时间、源码包下载地址、二进制包下载地址、copyright等。
3. 必须满足选型评估标注四个维度（合法合规、网络安全、技术生态、生命周期）的底线原则要求，不满足时，则需要采用其他软件替换或者自研。
4. 原则上一款开源软件只在MindSpore社区中引入一次。

#### 合法合规

1. 禁止选用无许可证、许可证要求无法履行、有知识产权问题的开源软件。
2. 优先选择有官方数字签名校验的软件包。

#### 网络安全

1. 禁止选用含非误报病毒告警的软件。
2. 选用的开源软件必须有问题反馈与修复跟踪管理机制，优先选择有漏洞披露源的开源软件。
3. 优先选择漏洞较少的版本。

#### 技术生态

1. 选用版本必须是正式发布的版本。未正式发布的版本（如：Beta版本，rc（Released candidate）版本）禁止引入。
2. 优先选择主流的供应商/社区或社区项目。
3. 优先选择版本稳定性高的软件，无已知的未解决的致命Bug。
4. 优先选择代码质量高的软件。如代码结构规范、代码调试功能可关闭、有自动化构建能力、自动化测试充分等。

#### 生命周期

1. 选用成熟期或成长期的软件，禁止选用处于衰退期的软件。成长期软件：发布频繁。成熟期软件：定期发布版本。衰退期软件：社区更新少，已经不再发布新版本。

## 开源软件变更原则

开源软件的变更，包括在MindSpore社区中引入其他开源软件（项目）、升级或者降级已引入的开源软件、删除已引入的开软软件等动作。

其中引入、升级、降级开源软件必须满足**开源软件选型原则**。升级、降级开源软件必须考虑MindSpore社区所提供功能的稳定性与兼容性。

整个变更的过程都**必须**可被追踪。目前 [https://gitee.com/mindspore/community/issues](https://gitee.com/mindspore/community/issues) 是这个过程的追踪系统。

TSC通过对变更申请(Pull Request)的评审，管理软件变更。
