浅谈 开源许可证

news2025/2/27 7:52:45

目录

  • 浅谈 开源许可证
    • 一、什么是开源许可证
      • 1.1 什么是开源
      • 1.2 什么是开源许可证
        • Copyleft 许可证(Copyleft 许可证)
        • 宽松许可证(permissive 许可证)
    • 二、为什么要有开源许可证
      • 2.1、No License:没有开源许可证意味着什么
      • 2.2、在面对没有 No License 的项目时我们应该怎么做?
    • 三、常见的开源许可证
      • 3.1 基本术语
      • 3.2 常见的开源协议
        • Apache-2.0(最受商业软件喜爱)
        • BSD 系列
        • GPL 系列
        • MIT
      • 3.3 如何选择开源许可证
      • 3.4 许可证之间的兼容性
        • 合并/修改代码的许可
        • 使用库的兼容性列表
    • 四、参考资料

浅谈 开源许可证

最近帮开源社区打杂,有个任务涉及到使用其他开源仓库来开发。留意了一下开源许可证,发现帮忙开发的项目使用的 Apache 2.0 开源许可证,可能使用的其他开源仓库有以下几种开源许可证类型

  • BSD-License
  • BSD-2-Clause license
  • BSD-3-Clause license
  • MIT license
  • GPL license

突然意识到自己仓库大多使用的是 MIT license 对于其他的一些开源许可证还不曾了解他们之间的区别,所以写一篇博客记录一下学习过程。

参考了一些不错的资料,如果觉得这篇博客写得比较零散可以直接跳到参考文献中查看详细情况。

一、什么是开源许可证

1.1 什么是开源

开源 != 免费

开源是指公开源代码,但这并不代表就是免费的,具体要看其采用的许可证或协议。

有时候,开源也可以作为一种商业模式存在

  • 提供订阅服务
  • 高级功能付费
  • 提供云服务
  • 生态价值
  • 捐赠打赏

开源 != 放弃版权

开源软件并不意味着完全放弃版权,通过开源许可证可以允许其他使用者或者开发者拥有部分权利(例如专利权、是否允许修改源代码等)

1.2 什么是开源许可证

本节参考引用 阮一峰 开源许可证教程

阮一峰 开源许可证教程
开源许可证是一种法律许可。通过它,版权拥有人明确允许,用户可以免费地使用、修改、共享版权软件。
版权法默认禁止共享,也就是说,没有许可证的软件,就等同于保留版权,虽然开源了,用户只能看看源码,不能用,一用就会侵犯版权。所以软件开源的话,必须明确地授予用户开源许可证。

一般有两种主流的开源许可证

  • Copyleft 许可证
  • 宽松许可证

Copyleft 许可证(Copyleft 许可证)

Copyleft 与 Copyright 是反义词,Copyleft 运动是典型的反版权运动在软件领域的表现,也是开源软件的主要思想。

一般有下面几个条件

  • 如果分发二进制格式,必须提供源码
  • 修改后的源码,必须与修改前保持许可证一致
  • 不得在原始许可证以外,附加其他限制

上面三个条件的核心就是:修改后的 Copyleft 代码不得闭源。

常见的 Copyleft 许可证有以下几种

  • AGPL(在 GPL 基础上还对云服务做出要求)
  • GPL(项目级别传染性)
  • LGPL(库级别传染性)
  • MPL(文件级别传染性)

宽松许可证(permissive 许可证)

宽松许可证基本对用户没有限制,用户开源修改代码后闭源

一般有下面几个特点

  • 基本没有使用限制,可以用代码做任何事
  • 没有担保,不保证代码质量,用户自己承担风险
  • 披露要求,用户必须披露原始作者。

常见的 宽松许可证有以下几种

  • Apache-2
  • MIT
  • BSD 系列
    • BSD 2-Clause “Simplified” Licens
    • BSD 3-Clause Clear License
    • BSD 3-Clause “New” or “Revised” License
    • BSD 4-Clause “Original” or “Old” License

二、为什么要有开源许可证

2.1、No License:没有开源许可证意味着什么

  • 在进行创造性的工作(写作、设计、编程等)时,作品默认受专有版权保护。未经许可,他人无法复制、分发或修改作品。
  • 如果作者没有应用开源许可协议,那么对项目做出贡献的人也将成为此项目的专属版权(copyright)所有者。这意味着没有人(也包括初始作者)可以使用、复制、分发后者修改他们的贡献

对于开源项目而言,一般会希望有其他人一起参与到项目的贡献当中或是将开源项目分享出去,因此最好在显眼处明确特定的开源许可证,说明关于项目的权限许可情况。

2.2、在面对没有 No License 的项目时我们应该怎么做?

对于用户

如果您发现没有许可证的软件,这通常意味着您没有获得软件创建者的许可来使用、修改或共享该软件。尽管 GitHub 等代码主机可能允许您查看和分叉代码,但这并不意味着您可以出于任何目的使用、修改或共享软件。

  • 请维护者添加许可证。除非软件包含相反的强烈指示,否则缺少许可证可能是一种疏忽。如果软件托管在 GitHub 等站点上,请打开请求许可证的问题并包含指向此站点的链接。如果您大胆并且很明显哪个许可证最合适,请打开拉取请求以添加许可证 - 请参阅此站点上每个许可证(例如,MIT)页面侧栏中的“建议此许可证”。
  • 请勿使用该软件。查找或创建开源许可证下的替代方案。
  • 协商私人许可证。带上你的律师。

三、常见的开源许可证

3.1 基本术语

在 https://choosealicense.com/appendix/ 你可以看到常见开源协议的许可、条件和限制情况
在这里插入图片描述

如果你在创建 GitHub 仓库时选择了特定的开源许可证,你可以在 LICENSE 的详细页看到下面这幅图

它指明了 Apache License 2.0 许可证的以下三点

  • Permissions
  • Limitations
  • Conditions
    在这里插入图片描述

下面介绍一下图表中涉及到的一些术语概念

许可 permissions

术语中文含义
Commercial use商业用途许可材料和衍生品可用于商业目的
Distribution分配(分发)许可材料可以分发
Modification修改许可材料可以修改
Patent use专利用途该许可证提供来自贡献者的专利权的明确授予
Private use私人使用许可材料可以私下使用和修改

条件 conditions

术语中文含义
Disclose source披露来源分发许可材料时,必须提供源代码
License and copyright notice许可和版权声明许可材料中必须包含许可和版权声明的副本
License and copyright notice for source源代码的许可和版权声明许可和版权声明的副本必须以源形式包含在许可材料中,但二进制文件不需要
Network use is distribution网络使用就是分布通过网络与许可材料交互的用户有权接收源代码的副本
Same license相同的许可证分发许可材料时,必须在同一许可下发布修改。在某些情况下,可以使用类似或相关的许可证
Same license (file)相同的许可证(文件)分发许可材料时,必须在同一许可证下发布对现有文件的修改。在某些情况下,可以使用类似或相关的许可证
Same license (library)相同的许可证(库)分发许可材料时,必须在同一许可下发布修改。在某些情况下,可以使用类似或相关的许可,或者此条件可能不适用于将许可材料用作库的作品
State changes状态更改对许可材料所做的更改必须记录在案

限制 limitations

术语中文含义
Liability责任本许可包括责任限制
Trademark use商标使用该许可证明确声明它不授予商标权,即使没有此类声明的许可证可能不会授予任何隐含的商标权
Warranty保证本许可证明确声明它不提供任何保证

3.2 常见的开源协议

Apache-2.0(最受商业软件喜爱)

https://choosealicense.com/licenses/apache-2.0/

一种宽松的许可证,其主要条件要求保存版权和许可声明。贡献者提供专利权的明确授予。许可作品、修改和大型作品可以按照不同的条款分发,并且没有源代码。

在这里插入图片描述

BSD 系列

主要有以下几种

  • BSD 2-Clause “Simplified” Licens
  • BSD 3-Clause Clear License
  • BSD 3-Clause “New” or “Revised” License
  • BSD 4-Clause “Original” or “Old” License

BSD 3-Clause “New” or “Revised” License

https://choosealicense.com/licenses/bsd-3-clause/

修改后的 BSD 许可证

一种类似于 BSD 2 条款许可证的宽松许可证,但第 3 条禁止他人在未经书面同意的情况下使用版权所有者或其贡献者的名义来推广衍生产品。

  • 允许商业发布和销售
  • 使用者可以自由的使用,修改源代码,也可以将修改后的代码作为开源或者专有软件再发布
  • 主要条件是要求尊重代码作者的著作权,即包含原始版权和免责声明(二进制形式分发必须分发文档中包含版权申明及免责声明)
  • 未经事先特别书面许可,不可以用开源代码的“作者/机构的名字”或“原来产品的名字”做市场推广

在这里插入图片描述

BSD 2-Clause “Simplified” License

https://choosealicense.com/licenses/bsd-2-clause/

一种宽松的许可证,有两种变体,BSD 2 条款和 BSD 3 条款。两者都与 MIT 许可证有非常细微的差异。

比 BSD 3-Clause “New” or “Revised” License 少一个条目,去掉了“不可以用开源代码的“作者/机构的名字”或“原来产品的名字”做市场推广。”.
在这里插入图片描述

BSD 3-Clause Clear License

https://choosealicense.com/licenses/bsd-3-clause-clear/

BSD 3-Clause “New” or “Revised” License 条款许可证的变体,明确不授予任何专利权。

在这里插入图片描述

BSD 4-Clause “Original” or “Old” License

https://choosealicense.com/licenses/bsd-4-clause

类似于 BSD 3 条款许可证的宽松许可证,但带有“广告条款”,要求在所有广告材料中确认原始来源。
在这里插入图片描述

GPL 系列

主要有以下几种

  • GNU General Public License v2.0(GNU GPLv2)
  • GNU General Public License v3.0(GNU GPLv3)
  • GNU Lesser General Public License v2.1(GNU LGPLv2.1)
  • GNU Lesser General Public License v3.0(GNU LGPLv3)
  • GNU Affero General Public License v3.0(GNU AGPLv3)

GNU General Public License v2.0

https://choosealicense.com/licenses/gpl-2.0/

GNU GPLv2
GNU GPL 是使用最广泛的自由软件许可证,并且有很强的 copyleft 要求。在分发衍生作品时,作品的源代码必须在同一许可下提供。GNU GPL 有多种变体,每种变体都有不同的要求。
在这里插入图片描述

GNU General Public License v3.0

https://choosealicense.com/licenses/gpl-3.0/

GNU GPLv3
这种强大的 copyleft 许可证的许可条件是在同一许可证下提供许可作品和修改的完整源代码,其中包括使用许可作品的大型作品。必须保留版权和许可声明。贡献者提供专利权的明确授予。

在这里插入图片描述

GPLv2 和 GPLv3的差异:

  • GPLv3包含了明确的专利许可
  • GPLv3对类似TiVo这种硬件做了一些要求(TiVo是一种数字录像设备,它能帮助人们非常方便地录下电视节目并跳过广告)添加了对数字版权管理和加密签名的限制,不仅要求用户公开源码,还要求公布相关硬件及必要的安装信息
  • 使用者可以按照要求加一些补充条款

GNU Lesser General Public License v2.1

GNU LGPLv2.1

https://choosealicense.com/licenses/lgpl-2.1/
GNU LGPL 主要用于软件库,要求派生作品在同一许可证下进行许可,但仅链接到它的作品不受此限制。GNU LGPL 有两个常用版本。
在这里插入图片描述

GNU Lesser General Public License v3.0

GNU LGPLv3

此 copyleft 许可证的许可条件是在同一许可证或 GNU GPLv3 下提供许可作品和修改的完整源代码。 必须保留版权和许可声明。贡献者提供专利权的明确授予。但是,通过许可作品提供的接口使用许可作品的较大作品可能会以不同的条款分发,并且没有较大作品的源代码。

在这里插入图片描述

GNU Affero General Public License v3.0

https://choosealicense.com/licenses/agpl-3.0/

GNU AGPLv3

这个最强大的 copyleft 许可证的许可条件是在同一许可证下提供许可作品和修改的完整源代码,其中包括使用许可作品的大型作品。必须保留版权和许可声明。贡献者提供专利权的明确授予。当修改后的版本用于通过网络提供服务时,必须提供修改版本的完整源代码。
在这里插入图片描述

传染性

GPL 系列的开源许可证通常具有传染性,为了促进分享,只要使用了 GPL 的代码,那么整个项目都必须以 GPL 的方式开源,也就是上面 Conditions 中的 Same license。

不同的类 GPL 开源许可有着不同强度的传染性

  • GPL 是工程级别的强传染
  • LGPL 是库级别的弱传染:如果只是子系统/模块用了,那么只需要子系统/模块开源,整个工程不用开源;如果是以动态链接调用LGPL许可证的库,那么项目也不用开源
  • AGPL 明确了GPL 2.0/3.0关于提供网络服务也属于分发限制的说明:使用GPL的自由软件,但是并不发布与网络之中,则可以自由的使用GPL协议确不开源自己私有的解决方案。AGPL则增加了对此做法的约束。比如使用了AGPL代码的软件是一个网络应用,那么这个软件的所有源码和修改代码也必须开源

参考 ABC 时代 GPL 许可证传染性问题探讨

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

MIT

https://choosealicense.com/licenses/mit/

一个简短而简单的许可,条件只要求保护版权和许可声明。许可作品、修改和大型作品可以按照不同的条款分发,并且没有源代码。

在这里插入图片描述

3.3 如何选择开源许可证

可以参考这个网站 Choose an open source license

或是参考下面这份经典网图
在这里插入图片描述

3.4 许可证之间的兼容性

在 开源许可证兼容性指南 中可以查询到常见开源许可证之间的兼容性

​ 开源许可证兼容性列表的使用场景是针对开源项目选择许可证,假定有一个开源软件使用了一个许可证,而你想把它的代码组合到你要发布的开源项目中。

许可证的兼容性列表可以分为以下两种情况:

  • 合并/修改代码:从要组合的代码中取出整体/部分代码,修改或不修改都可以,然后把它添加到你的代码中构成一个作品。
  • 使用库:没有直接复制代码,在编译或运行时通过链接、导入或其他典型的机制(例如静态与动态链接)把要组合的开源代码绑定在一起。

备注:(下方内容可以对应到兼容性列表中有【1】【2】【3】的项)

【1】LGPLv2.1 允许你把代码重新按照 GPLv2 以后的 GPL 许可证发布。所以如果你可以把 LGPL 的代码按照合适的 GPL 版本发布,那么你就可以组合两方代码。

【2】MPL的代码和GPL系列的代码组合的结果是,MPL协议的代码遵循MPL协议,GPL系列的代码遵循GPL系列协议,所以原来按照 MPL 发布的那些文件还是可以使用 MPL 条款的,组合而成的作品整体上可以按照GPL系列的许可证发布。

【3】查看双方的许可证协议中是否包含一个条款允许你将协议升级到稍后的版本。例如,LGPLv2.1和GPLv3是不兼容的,但如果两方的许可证协议中都包含“可以升级到更高版本”的条款,那么LGPLv2.1就可以升级到LGPLv3,LGPLv3和GPLv3、AGPLv3是兼容的。

  • LGPL+与GPL+代表许可证授予用户将许可证升级到未来版本的权利,例如LGPLv2.1+意味着用户可以把许可证升级到LGPL v2.1之后的版本。
  • 下方的表格第一行展示了你的项目要使用的许可证,左边第一列是你要组合的软件带有的开源许可证,他们之间的交叉处显示了你是否可以组合他们。

合并/修改代码的许可

证兼容性列表

交叉处显示两方代码是否可以组合MITBSD 2-ClauseBSD 3-ClauseApache 2.0MPL 2.0LGPLv2.1LGPLv2.1+LGPLv3GPLv2GPLv2+GPLv3AGPLv3
MIT可以可以可以可以可以可以可以可以可以可以可以可以
BSD 2-Clause可以可以可以可以可以可以可以可以可以可以可以可以
BSD 3-Clause可以可以可以可以可以可以可以可以可以可以可以可以
Apache 2.0可以,组合遵循Apache 2.0可以,组合遵循Apache2.0可以,组合遵循Apache2.0可以可以可以,组合遵循GPLv3 [1]可以,组合遵循GPLv3 [1]可以不可以可以,组合遵循GPLv3 [3]可以可以
MPL 2.0可以,组合遵循MPL2.0可以,组合遵循MPL2.0可以,组合遵循MPL2.0可以,组合遵循MPL2.0可以可以 [2]可以 [2]可以[2]可以[2]可以[2]可以[2]可以[2]
LGPLv2.1可以,组合遵循LGPLv2.1可以,组合遵循LGPLv2.1可以,组合遵循LGPLv2.1可以,组合遵循LGPLv2.1可以[2]可以可以,组合遵循LGPLv2.1可以,组合遵循GPLv3 [1] [3]可以可以可以可以
LGPLv2.1+可以,组合遵循LGPLv2.1+可以,组合遵循LGPLv2.1+可以,组合遵循LGPLv2.1+可以,组合遵循LGPLv2.1+可以[2]可以可以可以可以可以可以可以
LGPLv3可以,组合遵循LGPLv3可以,组合遵循LGPLv3可以,组合遵循LGPLv3可以,组合遵循LGPLv3可以[2]可以,组合遵循GPLv3 [1] [3]可以,组合遵循LGPLv3可以不可以可以,组合遵循GPLv3 [3]可以可以
GPLv2可以,组合遵循GPLv2可以,组合遵循GPLv2可以,组合遵循GPLv2可以,组合遵循GPLv2可以[2]可以,组合遵循GPLv2 [1]可以,组合遵循GPLv2 [1]不可以可以可以,组合遵循GPLv2不可以不可以
GPLv2+可以,组合遵循GPLv2+可以,组合遵循GPLv2+可以,组合遵循GPLv2+可以,组合遵循GPLv2+可以[2]可以,组合遵循GPLv2+ [1]可以,组合遵循GPLv2+ [1]可以,组合遵循GPLv3 [1] [3]可以可以可以可以
GPLv3可以,组合遵循GPLv3可以,组合遵循GPLv3可以,组合遵循GPLv3可以,组合遵循GPLv3可以[2]可以,组合遵循GPLv3 [1]可以,组合遵循GPLv3 [1]可以,组合遵循GPLv3 [1] [3]不可以可以,组合遵循GPLv3 [3]可以可以
AGPLv3可以,组合遵循AGPLv3可以,组合遵循AGPLv3可以,组合遵循AGPLv3可以,组合遵循AGPLv3可以可以,组合遵循AGPLv3 [1] [3]可以,组合遵循AGPLv3 [1] [3]可以,组合遵循AGPLv3 [1] [3]不可以可以,组合遵循AGPLv3 [3]可以,组合遵循AGPLv3可以

使用库的兼容性列表

交叉处显示两方代码是否可以组合MITBSD 2-ClauseBSD 3-ClauseApache 2.0MPL 2.0LGPLv2.1LGPLv2.1+LGPLv3GPLv2GPLv2+GPLv3AGPLv3
MIT可以可以可以可以可以可以可以可以可以可以可以可以
BSD 2-Clause可以可以可以可以可以可以可以可以可以可以可以可以
BSD 3-Clause可以可以可以可以可以可以可以可以可以可以可以可以
Apache 2.0可以可以可以可以可以可以可以可以不可以可以,组合遵循GPLv3 [3]可以可以
MPL 2.0可以可以可以可以可以可以 [2]可以 [2]可以[2]可以[2]可以[2]可以[2]可以[2]
LGPLv2.1可以可以可以可以可以[2]可以可以可以可以可以可以可以
LGPLv2.1+可以可以可以可以可以[2]可以可以可以可以可以可以可以
LGPLv3可以可以可以可以可以[2]可以可以可以不可以可以,组合遵循GPLv3 [3]可以可以
GPLv2可以,组合遵循GPLv2可以,组合遵循GPLv2可以,组合遵循GPLv2可以,组合遵循GPLv2可以[2]可以,组合遵循GPLv2 [1]可以,组合遵循GPLv2 [1]不可以可以可以,组合遵循GPLv2不可以不可以
GPLv2+可以,组合遵循GPLv2+可以,组合遵循GPLv2+可以,组合遵循GPLv2+可以,组合遵循GPLv2+可以[2]可以,组合遵循GPLv2+ [1]可以,组合遵循GPLv2+ [1]可以,组合遵循GPLv3 [1] [3]可以可以可以可以
GPLv3可以,组合遵循GPLv3可以,组合遵循GPLv3可以,组合遵循GPLv3可以,组合遵循GPLv3可以[2]可以,组合遵循GPLv3 [1]可以,组合遵循GPLv3 [1]可以,组合遵循GPLv3 [1] [3]不可以可以,组合遵循GPLv3 [3]可以可以
AGPLv3可以,组合遵循AGPLv3可以,组合遵循AGPLv3可以,组合遵循AGPLv3可以,组合遵循AGPLv3可以可以,组合遵循AGPLv3 [1] [3]可以,组合遵循AGPLv3 [1] [3]可以,组合遵循AGPLv3 [1] [3]不可以可以,组合遵循AGPLv3 [3]可以,组合遵循AGPLv3可以

四、参考资料

  • 阮一峰 开源许可证教程
  • 康月牙 一篇简洁的“开源许可证” 要点说明~
  • Choose an open source license
  • 开源的法律保护
  • wikipedia 自由及开放源代码软件许可证比较
  • 常见开源协议都有哪些?开源约束是什么?
  • 一文看懂开源许可证,能不能商用再也不抓瞎
  • 律师视点|没有无义务的权利:从开源软件侵权谈GPL开源合规
  • ABC 时代 GPL 许可证传染性问题探讨
  • 开源许可证兼容性指南
  • 深入理解开源许可证(Apache,MIT,GPL,BSD,CC)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

38.Isaac教程--AprilTags

AprilTags ISAAC教程合集地址文章目录AprilTags源码Isaac Codelet运行示例应用程序在主机系统上运行示例应用程序在 Jetson 上运行应用程序在 Websight 中查看应用程序的输出AprilTags 是一种流行的基准标记形式。 它在机器人技术中有广泛的应用,包括对象跟踪、视觉…

数据挖掘领域十大经典算法

一、什么是数据挖掘?数据挖掘是人工智能和数据库领域研究的热点问题,所谓数据挖掘是指从数据库的大量数据中揭示出隐含的、先前未知的并有潜在价值的信息的非平凡过程。数据挖掘是一种决策支持过程,它主要基于人工智能、机器学习、模式识别、…

蓝桥杯STM32G431RBT6学习——USART

蓝桥杯STM32G431RBT6学习——USART 前言 串口在蓝桥杯近几届中考频也相对较高(十三、十二届均考),因此必然也要学习一下。 作为后来之秀的开源项目DAP Link不仅支持SWD调试下载,同时还支持串口调试功能,国信长天开…

软件课设(Ⅲ)——padavan-ng编译以及内核模块修改

我记得今年的很多笔试面试都遇到了linux相关的操作,答题状况都挺……昂。算是补课吧,正好大四的毕业实习、软3还有研0的项目都需要linux的环境进行推进,记录一下,聊作纪念。 实验要求 编译系统,下载并提交,…

大数据技术之Hadoop(Yarn)

第1章 Yarn资源调度器 我们先来思考下面几个问题: 1)如何管理集群资源? 2)如何给任务合理分配资源? Yarn是一个资源调度平台,负责为运算程序提供服务器运算资源,相当于一个分布式的操作系统平…

图形编辑器:修改图形 x、y、width、height、rotation

大家好,我是前端西瓜哥。图形编辑器的一个需求,就是可以通过属性面板的输入框设置选中元素的属性值。 项目地址,欢迎 star: https://github.com/F-star/suika 线上体验: https://blog.fstars.wang/app/suika/ 最终效果…

Express框架连接MongoDB数据库操作

在上一篇中已经在Node.js中引入使用了mongoose进行MongoDB数据库的基本操作,在本篇当中在Express框架中来连接数据库以及操作数据库; Express 项目环境 这里是通过全局安装Express框架生产的项目环境,也可以通过局部安装的方式,安…

【MySQL】第十一部分 SELECT的执行过程

【MySQL】第十一部分 SELECT的执行过程 文章目录【MySQL】第十一部分 SELECT的执行过程11. SELECT的执行过程11.1 SQL92语法的结构11.2 SQL92语法的结构11.3 语句执行顺序11.4 解释之前遗留问题总结11. SELECT的执行过程 11.1 SQL92语法的结构 SELECT ... FROM TABLE WHERE 多…

STM32G431—ADC+E2PROM读写实验

目录 1.ADC介绍 配置cubemx 代码 2.IIC 通信 原理图 AT24C02 代码 i2C.c 主函数 1.ADC介绍 ADC 有多达 18 个转换通道,其中通道 0~通道 15 是外部通道,使用的 GPIO 引脚如表 所示。 ADC引脚GPIO引脚GPIO配置ADC引脚GPIO引脚GPIO配置IN0PA0模拟输…

Aspose.PDF for .NET提取矢量图像的支持

Aspose.PDF for .NET提取矢量图像的支持 增加了对提取矢量图像的支持。 改进了PDF到Microsoft Excel的转换。 添加了对创建“PrinterMark”批注的支持。 增加了检测PDF文件是否包含矢量图形的功能。 Aspose.PDF for.NET是一个高级PDF处理和解析API,用于在跨平台应用…

Linux常用命令——setsid命令

在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) setsid 在新的会话中运行程序。 补充说明 setsid命令子进程从父进程继承了:SessionID、进程组ID和打开的终端。子进程如果要脱离这些,代码中可通过调用setsid来实现。,而命令…

C#中的基本概念(类_对象_属性_方法)

C#中的基本概念(类_对象_属性_方法) 对象的概念: 任何存在的实体都是对象,对象是真实存在的, 它包括“静态特征”和“动态特征” 对象包含2个方面: 静态特征:表示对象的属性,用来存储对象本身的数据 动态特征(行为):表示对象的方法,用来说明对象能做什么 例如: 一…

云服务器部署Node.js前后端分离项目

云服务器部署Node.js 前后端分离项目 准备工作 1.拥有一台服务器 自行选择阿里云,腾讯云… 2.重装系统 以腾讯云为例,安装centos 7.6系统 重置一下密码 3.使用远程管理工具 以宝塔工具为例,添加连接 4.安装宝塔面板 宝塔面板 - 简单好用的Linux…

基于ImageAI的图像识别

博主简介 博主是一名大二学生,主攻人工智能研究。感谢让我们在CSDN相遇,博主致力于在这里分享关于人工智能,c,Python,爬虫等方面知识的分享。 如果有需要的小伙伴可以关注博主,博主会继续更新的&#xff0c…

每日学术速递1.25

CV - 计算机视觉 今天带来的是北航IRIP实验室被国际计算机视觉与模式识别会议CVPR 2022接收的6篇论文。 CVPR是由IEEE主办的计算机视觉、模式识别及人工智能等领域最具影响力和最重要的国际顶级会议。CVPR官网显示,此次会议有超过8161篇的大会论文投稿,…

测试篇(三):测试用例的万能公式、对水杯和登录页面设计测试用例、测试用例的设计方法

目录一、测试用例的万能公式二、对登录页面设计测试用例三、测试用例的设计方法3.1 基于需求的设计方法3.2 等价类3.3 边界值3.4 判定表3.5 正交排列3.6 场景设计法3.7 错误猜测法四、面试真题一、测试用例的万能公式 首先,为"水杯"设计一个测试用例&…

计算机网络基础(二)

文章目录1. 应用层1.1 定制应用层协议1.2 网络版计算器实现1.3 应用层细分1.4 HTTP协议1.4.1 认识网址(URL)1.4.2 HTTP协议简易了解1.4.3 简易版HTTP服务器1.4.4 HTTP请求报文详解1.4.5 响应报文1.4.6 HTTP的一些安全问题1.5 HTTPS协议1.5.1 HTTPS和SSL/TLS1.5.2 短链接和长链接…

【Java|golang】1802. 有界数组中指定下标处的最大值---双指针

给你三个正整数 n、index 和 maxSum 。你需要构造一个同时满足下述所有条件的数组 nums&#xff08;下标 从 0 开始 计数&#xff09;&#xff1a; nums.length n nums[i] 是 正整数 &#xff0c;其中 0 < i < n abs(nums[i] - nums[i1]) < 1 &#xff0c;其中 0 &l…

2023年最新Python常见编程面试题(1)精选30个题目附答案

2023年最新Python面试题&#xff08;1&#xff09;之基础篇精选1.统计字符串中字符出现的次数2.获取字典key值键中小写字母对应键值对3.将字典中key变小写4.更改字典value值5.将cookies变成字典形式6.有如下字符串username把它转换成为UserName7.分别求出奇数和偶数把奇数偶数存…

NLP | 打造一个‘OpenAI智能’机器人,只需要五分钟

借用openai api,做一个聊天机器人&#xff0c;别去openai主页啦~Step 1.登录OpenAI账号网站&#xff1a;Overview - OpenAI APIStep 2.生成API key点击右上角的个人个人账户-> 点击 View API keys点击生成一个秘钥&#xff08;Create new secret key&#xff09;,并且复制St…