开源协议简介和选择

软件国产化已经提到日程上了,先来研究一下开源协议。

在这里插入图片描述

引言

在追求“自由”的开源软件领域的同时不能忽视程序员的权益。为了激发程序员的创造力,现今世界上有超过60种的开源许可协议被开源促进组织(Open Source Initiative)所认可,确保了开源工作者的权益。其中“木兰”协议作为中国的首个开源协议,尤为引人注目。
《一文深入浅出理解国产开源木兰许可系列协议》

开源协议的重要性

开源协议规定了使用开源软件时的权利与责任,为使用者设定了界限。虽然这些协议不具有法律效力,但在涉及软件版权纠纷时,它们是关键的证据。对于那些计划编写开源软件的人,了解并选择合适的开源协议是保护自己软件权益的关键。

主流的开源协议

《开源协议是什么?有哪些?如何选择?》

  1. GNU GPL(GNU通用公共许可证)
    遵循GPL的开源软件数量庞大,包括Linux系统在内的大多数开源软件都基于这个协议。GPL的主要特点包括复制自由、传播自由、收费传播和修改自由。但请注意,GPL不适合用于商业软件。
    《GPL开源软件能商用吗?》

  2. BSD(Berkeley Software Distribution)协议
    BSD给予用户极大的权利,允许他们使用、修改和重新发布遵循该许可的软件。如果再发布的软件中包含源代码,必须继续遵循BSD许可协议。BSD对商业友好,许多公司首选它作为开源许可。

  3. Apache许可证版本协议
    Apache协议类似于BSD,适用于商业软件。它为开发人员提供版权及专利许可,同时允许用户拥有修改代码及再发布的自由。Apache、Hadoop、MongoDB等项目都基于该许可协议研发。

  4. MIT(Massachusetts Institute of Technology)协议
    MIT是限制最少的开源许可协议之一。只要开发者在修改后的源代码中保留原作者的许可信息即可。许多商业软件使用MIT作为其开源许可。

  5. GUN LGPL(GNU宽通用公共许可证)
    LGPL是GPL的一个衍生版本,专为类库设计。它允许商业软件通过类库引用使用LGPL类库,而不必开源其自身的代码。然而,如果修改LGPL代码或其衍生品,所有涉及修改的额外代码和衍生品都必须采用LGPL协议。

如何选择合适的开源协议

面对众多的开源协议,如何选择成为关键。开发者应根据软件的目的和预期用途来选择合适的协议。例如,GPL不适合商用软件;而BSD、Apache和MIT则更适合商业环境。同时,也要确保所选的协议与项目的目标和愿景相一致。

乌克兰程序员 Paul Bagwell 画了一张分析图,说明应该怎么选择开源协议。
在这里插入图片描述

结语

开源软件的繁荣离不开合适的许可协议来保障各方权益。通过了解并选择合适的协议,我们可以促进开源社区的健康与繁荣,激发更多的创新与合作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/323594.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算化学顶刊封面!玻色量子联合上海交大张健课题组发表量子计算重要成果

​2023年12月13日,北京玻色量子科技有限公司(以下简称“玻色量子”)联合上海交通大学在中科院分区1区、计算化学领域Top刊物JCTC(Journal of Chemical Theory and Computation)内刊的封面上发表了以“Encoding Molecul…

仓库管理软件有哪些比较好用?

“仓库管理软件有哪些比较好用?” “好用,却不一定适合。” 有时候,不是某个仓库管理软件不好用,而是它不适合你们企业。 制造业企业的仓库管理场景,随着制造业企业规模的扩大,逐步精细化,企…

ruoyi-ai 基于ruoyi-plus实现AI聊天和绘画功能-后端

基于ruoyi-plus实现AI聊天和绘画功能-后端 本项目完全开源免费! 后台管理界面使用elementUI服务端使用Java17SpringBoot3.X ruoyi-ai: 基于ruoyi-plus实现AI聊天和绘画功能-后端 实现功能 集成OpenAi API (gpt-4-vision-preview dall-e-3)接入文生图模型&#xf…

HTTP3/QUIC 性能测试与配套组件

背景 最近一年很多关于QUIC的文章层出,但是发现一个问题,这些文章都是在介绍QUIC或HTTP3是怎样的一个东西,以及它的优点和机制,将它夸的近乎上天了。然而有心的人估计会亲手做一些测试,就会发现这个被捧上天的东西性能…

JavaScript高级程序设计读书记录(四):基本引用类型Date,RegExp,原始值包装类型,Global对象 eval(),Math

引用值(或者对象)是某个特定引用类型的实例。在 ECMAScript 中,引用类型是把数据和功能组织到一起的结构,经常被人错误地称作“类”。虽然从技术上讲 JavaScript 是一门面向对象语言,但ECMAScript 缺少传统的面向对象编…

【揭秘】单例模式DCL导致无法访问对象?

前两天,在审查团队成员的代码时,我发现了一个错误的单例模式写法。 在Java中,单例模式是一种非常常见的设计模式,用于确保一个类只有一个实例,并提供一个全局访问点来获取该实例,但是,如果不正…

「小明赠书活动」2024第二期《实战AI大模型》

⭐️ 赠书 - 《实战AI大模型》 从基本概念到实践技巧的,全方位解读AI大模型,手把手教你训练和部署BERT、GPT-3、ChatGPT! 人工智能领域资深专家尤洋老师倾力打造,获得了 李开复、周鸿祎、颜水成 三位大咖鼎力推荐,一经…

园区网典型组网架构

知识改变命运,技术就是要分享,有问题随时联系,免费答疑,欢迎联系! 当您在校园学习,单位工作,商场购物时,您可能会注意到,这些场所都被网络覆盖。通过网络,您可…

为什么我的flink upsert-kafka 没有数据输出

我写了测试数据到kafka 为什么upsert-kafka 没有数据打印? 测试代码 package com.yy.state.OperatorStateTTLimport org.apache.flink.configuration.{Configuration, RestOptions} import org.apache.flink.runtime.state.filesystem.FsStateBackend import org.apache.flin…

芯课堂 | LVGL基础知识(三)

概述 LVGL进度条对象上有一个背景和一个指示器。指示器的宽度根据进度条的当前值进行设置。 如果对象的宽度小于其高度,则可以创建垂直进度条。 不仅可以设置进度条的结束值,还可以设置进度条的起始值,从而改变指示器的起始位置。 LVGL进度…

【论文阅读笔记】Stable View Synthesis 和 Enhanced Stable View Synthesis

目录 Stable View Synthesis摘要引言 Enhanced Stable View Synthesis 从Mip-NeRF360的对比实验中找到的两篇文献,使用了卷积神经网络进行渲染和新视角合成,特此记录一下 ToDo Stable View Synthesis paper:https://readpaper.com/pdf-ann…

每周一算法:倍增法求最近公共祖先(LCA)

最近公共祖先 最近公共祖先简称 LCA(Lowest Common Ancestor)。两个节点的最近公共祖先,就是这两个点的公共祖先里面,离根最远的那个。 题目链接 祖孙询问 题目描述 给定一棵包含 n n n 个节点的有根无向树,节点…