常用开源协议介绍以及开源软件规范列表_开源软件 开发规范-程序员宅基地

技术标签: 开源软件规范  软件开发  

1. 开源协议介绍

  • GPLGeneral Public License,开源项目最常用的许可证,衍生代码的分发需开源并且也要遵守此协议。该协议也有很多变种,不同变种要求会略微不同。
  • MPLMPL 协议允许免费重发布、免费修改,但要求修改后的代码版权归软件的发起者,这种授权维护了商业软件的利益,它要求基于这种软件的修改无偿贡献版权给该软件。
  • LGPLLesser General Public Licence,是 GPL 的一个为主要为类库使用设计的开源协议。LGPL 允许商业软件通过类库引用的方式使用 LGPL 类库而不需要开源商业软件的代码。但是如果修改 LGPL 协议的代码或者衍生,则所有修改的代码,涉及修改部分的额外代码和衍生的代码都必须采用 LGPL 协议。
  • ApacheApache 协议是 Apache 软件基金会发布的一个自由软件许可证,Apache 2.0 协议除了为用户提供版权许可之外,还有专利许可,非常适合涉及专利内容的项目。
  • BSDBSD(Berkeley Software Distribution,伯克利软件发行版)。BSD 协议在软件分发方面,除需要包含一份版权提示和免责声明之外,没有任何限制,该协议还禁止用开源代码的作者/机构名字和原来产品的名字做市场推广。
  • MIT: 协议的主要内容为:该软件及其相关文档对所有人免费,可以任意处置,包括使用,复制,修改,合并,发表,分发,再授权,或者销售。唯一的限制是,软件中必须包含上述版权和许可提示。MIT 协议是所有开源许可中最宽松的一个,除了必须包含许可声明外,再无任何限制。

那具体如何选择适合自己的开源协议呢?你可以参考乌克兰程序员 Paul Bagwell 画的这张图:

opensource

2. 开源规范详细列表

  • 项目结构:一个开源项目应该有一个合理、专业的、符合语言特色的项目结构。
  • 严格遵循代码规范:开源的代码,面向的人群是所有的开发者,一个不规范的代码,可读性差,不利于其他开发者阅读和贡献代码。
  • 代码质量:开源的代码,一定要保证代码的质量,一个低质量的代码,不仅隐藏了很多性能和功能缺陷,而且还会影响开源项目的品牌,进而影响开源效果。
  • 单元测试覆盖率:一个开源的 Go 项目,要保证整个项目的单元测试覆盖率,这样一方面可以保证代码的质量,另一方面可以使开源项目更专业,也能让你更加安心的发布版本。
  • 版本发布规范:开源项目要遵循既定的版本规范,整个项目的更新迭代,要有版本号,目前用的比较多的是语义化的版本规范。
  • 向下兼容:代码要做到向下兼容,这样可以尽可能减少发布变更的影响,遵循语义化的版本规范,可以在一定程度上保证代码的向下兼容能力。
  • 详细的文档说明:要保证代码能够被其他开发者很容易的阅读和贡献代码,所以不仅要保证文档的质量和数量,还要确保有某些需要的文档:
  • LICENSE(如果是开源项目,LICENSE 是必选的):软件协议,声明该开源项目遵循什么软件协议。
  • README.mdREADME 文件,放在项目的根目录下,包含项目的描述、依赖项、安装方法、使用方法、贡献方法、作者和遵循的软件协议等。
  • CHANGELOG:目录,用来存放版本的变更历史,方便其他开发者了解新版本或旧版本的变更内容。
  • Makefile:对于一个复杂的项目,通常也会包含一个 Makefile 文件,用来对项目进行构建、测试、安装等操作。
  • CONTRIBUTING:用来说明如何给本项目贡献代码,包含贡献流程和流程中每个环节的详细操作。
  • docs:目录,用来存放本项目所有文档,例如:安装文档、使用文档、开发文档等。一些重要的文档,可以链接到项目根目录的 README文档中。这些文档要确保开发者能够轻松的理解、部署和使用该项目。
  • examples:存放一些示例代码。
  • 安全:开源的代码,要保证整个代码库和提交记录中,不能出现类似内部 IP、内部域名、密码、密钥这类信息。
  • 完善的 examples:完善的 examples,可以帮助用户快速学习和使用开源项目。
  • 好的 Commit Message 记录:开源项目在 commit 时,要遵循一定的规范,这样其他开发者才能够快速浏览和理解变更历史,减小学习成本,本项目遵循 Angular commit message 规范。
  • 发布可用的版本:要确保每一次发布都经过充分的测试,每一个发布的版本都是可用的。
  • 持续的更新:一个好的开源项目,应该能够持续的更新功能,修复 Bug。对于一些已经结项、不维护的开源项目,需要及时的对项目进行归档,并在项目描述中加以说明。
  • 及时的处理 pull request、issue、评论等:当项目被别的开发者提交 pull request、issue、评论时,要及时的处理,一方面可以确保项目不断被更新,另一方面也可以激发其他开发者贡献代码的积极性。
  • 建立讨论小组:如果条件允许,最好和贡献者建立讨论小组,每周或每月组织讨论,共同维护。
  • 做好推广:如果有条件,可以宣传运营开源项目,让更多的人知道,更多的人用,更多的人贡献代码。例如:在掘金、简书等平台发表文章,创建 QQ、微信交流群等。
  • Git 工作流:选择合适的 Git 工作流,并遵循 Git 工作流使用规范,例如 Gitflow 工作流。

参考:
https://time.geekbang.org/column/article/380033

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wohu1104/article/details/123162614

智能推荐

【Linux 服务器运维】定时任务 crontab 详解 | 文末送书_在线linux crontab-程序员宅基地

文章浏览阅读1.5w次,点赞70次,收藏141次。Crontab 是一个在 Unix 和 Linux 操作系统上用于定时执行任务的工具。它允许用户创建和管理计划任务,以便在特定的时间间隔或时间点自动运行命令或脚本。Crontab 是cron table的缩写,cron指的是 Unix 系统中的一个后台进程,它用于执行预定的任务。Crontab 文件包含一系列计划任务条目,每个条目都定义了一个任务的执行时间和要运行的命令或脚本。这些任务可以按照分钟、小时、日、月和星期等不同的时间单位进行安排。环境变量问题,例如crontab不能识别Java的环境变量。_在线linux crontab

【Matlab】如何把数组矩阵写入txt文件?并用逗号或空格隔开_matlab 矩阵添加逗号-程序员宅基地

文章浏览阅读1.7w次,点赞18次,收藏59次。Matlab 把数组写入txt,用逗号隔开,保留几位小数等等_matlab 矩阵添加逗号

AJAX发送POST请求_ajax post请求-程序员宅基地

文章浏览阅读7k次,点赞3次,收藏11次。AJAX发送POST请求需求:当鼠标移入到页面div当中,页面向服务端发送POST请求,服务端将响应结果作为显示体在div中显现出来前端代码<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport_ajax post请求

Mybatis框架笔记_动态sq1的执行原理?-程序员宅基地

文章浏览阅读2k次,点赞3次,收藏51次。MyBatis1、简介1.1 什么是MybatisMyBatis 是一款优秀的持久层框架;它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。1.2 持久化数据持久化持久化就是将程序的数据在持久状态和瞬时状态转化的过程内存:断电即失_动态sq1的执行原理?

解决windows自带远程桌面无法打开某些软件(模拟器等)_主机关闭屏幕 远程控制某些软件打不开-程序员宅基地

文章浏览阅读2.4w次,点赞12次,收藏19次。windows自带的远程连接(mstsc)无法启动某些应用,这里就用雷电模拟器举例通过远程桌面打开雷电模拟器会报错并卡50%进度条造成这个问题的原因是,windows自带的远程连接方式默认走的是当前输出识别的显示驱动远程桌面没有通过独显,如下图所示解决办法新建一个文本文档,名称随便起,扩展名改为cmd然后右键编辑,输入下面代码将代码中最后一行的路径改为自己本..._主机关闭屏幕 远程控制某些软件打不开

使用docker搭建XSS漏洞靶场_xshell靶场搭建命令-程序员宅基地

文章浏览阅读1.5k次。在docker中搭建xss漏洞靶场首先用Xshell连上自己的虚拟机# 安装docker-composepip install docker-compose# 下载vulstudy项目 如果失败了请往下看git clone https://github.com/c0ny1/vulstudy.git下图是红字是说python版本需要3.5以上,而本机的是2.7.5黄字警告是说pip版本低,但是还可以用,不管它就是了使用docker-compose部署容器安装镜像(快速版)因为GitH_xshell靶场搭建命令

随便推点

软件工程学习笔记_软件工程导论第六版电子版-程序员宅基地

文章浏览阅读4.2w次,点赞187次,收藏2k次。【专栏必读】王道考研408操作系统万字笔记(有了它不需要你再做笔记了):各章节内容概述导航和思维导图【专栏必读】王道考研408数据结构万字笔记(有了它不需要你再做笔记了):各章节内容概述导航和思维导图【专栏必读】王道考研408计算机组成原理万字笔记(从学生角度辅助大家理解):各章节导航及思维导图【README】Linux系统编程必读:本专栏内容提要以及系统调用接口总结C++学习【专栏必读】数据库系统概论第五版(王珊)专栏学习笔记目录导航注意:可看视频介绍:本专栏笔记全部纯手打,内容以._软件工程导论第六版电子版

如何使用Github搭建个人博客-程序员宅基地

文章浏览阅读3.7k次,点赞4次,收藏15次。在本文中,我将介绍如何使用GitHub搭建个人博客~_github搭建个人博客

Jupyter Notebook 快捷键速查表_jupyter notebook多个表怎么查单个-程序员宅基地

文章浏览阅读2.9k次,点赞4次,收藏15次。Jupyter Notebook 有两种键盘输入模式。编辑模式,允许你往单元中键入代码或文本;这时的单元框线是绿色的。命令模式,键盘输入运行程序命令;这时的单元框线是灰色。1. 命令模式 (按键 Esc 开启) 一定要同时按住ESC按键 Esc+对应按键 功能 Enter 转入编辑模式 Shift-Enter 运行本单元,选中下个单元_jupyter notebook多个表怎么查单个

element-ui快速使用(使用element-ui做一个表格)_elementui绘制基本信息表格-程序员宅基地

文章浏览阅读4.8k次,点赞3次,收藏4次。​element-ui 是饿了么前端出品的基于 Vue.js的 后台组件库,可以快速布局和构建页面官网:http://element-cn.eleme.io/#/zh-CN_elementui绘制基本信息表格

【程序员学习运筹学】什么是运筹学_运筹学介绍-程序员宅基地

文章浏览阅读2.7k次,点赞5次,收藏26次。运筹学一次最早起源于20世纪30年代。运筹学是“是用数学方法研究经济、民政和国防等部门在内外环境的约束条件下合理分配人力、物力、财力等资源,使世纪系统有效运行的技术科学,它可以用来预测发展趋势,制订行动规划和优选可行方案。”运筹学一词在英国称为,在美国称为,可以直译为“运用研究”或“作业研究”。由于运筹学涉及的主要领域是管理问题,研究的主要手动是建立数据模型,并比较多的运用各种数学工具。从这点触发,有人将运筹学称为“管理数学”。O.R...._运筹学介绍

手动安装k8s,但kubelet.service 启动失败_kubelet.service: failed with result 'exit-code'.-程序员宅基地

文章浏览阅读5w次。k8s的kubelet.service 启动失败#systemctl status kubelet.service● kubelet.service - Kubernetes API Server Loaded: loaded (/usr/lib/systemd/system/kubelet.service; enabled; vendor preset: disabled) ..._kubelet.service: failed with result 'exit-code'.

推荐文章

热门文章

相关标签