开源的定义_共享与自由与公共:开源的真正定义
开源的定义
当您听到“开源”一词时,您认为这与诸如共享软件,免费软件或公共领域之类的术语同义吗? 如果是这样,你并不是孤独的。 在技术行业内外的许多人都认为这些术语是相同的。 本文说明了这些术语的不同之处以及开源是一种变革性的许可和开发模型。 探索差异的最好方法可能是与我在上述一种模型下提供的软件分享我的经验。
共享软件和免费软件
早在1982年,当我开始在Apple II Plus上用BASIC编写代码时,我就开始从事计算机程序员的工作。我回想起去家乡的本地计算机商店,并在装有软件游戏和实用程序的塑料袋中找到软盘,看似什么。高昂的价格。 请记住,这是从中学生的角度来看的。
但是,有一些软件可以免费或以最低价格获得。 根据确切的许可模式,这被称为共享软件或免费软件。 在共享软件模型下,您只能在一定时间内使用该软件,和/或如果发现有用,则要求您将支票发送给该软件的作者。
回顾过去,我现在意识到,如果软件是按照开放源代码许可条款而不是共享软件条款提供的,那么作为一名新兴的程序员,我本可以在成长中学到很多,并且可以取得更多成就。 这是因为共享软件几乎从未提供源代码(即,人类可读的软件形式)。 共享软件还包含许可限制,禁止接收者尝试泄露源代码。 如果无法访问源代码,则很难了解该软件的实际工作方式,从而很难扩展或更改其功能。 这使得最终用户完全依赖原始共享软件作者进行任何更改或改进。
使用共享软件模型,几乎不可能使任何开发人员社区都可以利用和进一步围绕代码进行创新。 再分配和商业使用方面也可能存在进一步的限制。 尽管共享软件可能在价格方面是免费的(至少在最初是免费的 ), 但它在自由方面并不是免费的,并且不允许您通过探索代码的内部原理进行学习和创新。
这就引出了一个大问题: 这与开源软件有何不同?
开源许可的基础
首先,我们需要了解“开源”是指许可和软件开发模型 ,它们与共享软件有很大不同。 在一种称为非copyleft开源许可的开源形式下,向用户提供了关键自由,例如对访问源代码没有限制; 出于任何目的出售,使用或赠送该软件; 或修改软件。
这种形式的许可证也不需要支付任何费用或使用费。 这种许可模式的一个惊人结果是它具有独特的能力,因为许可是高度允许的,不需要谈判就可以使无数软件开发人员就代码的新的,有用的更改和创新进行协作。 尽管从技术上讲,不需要在这种许可下提供源代码,但几乎所有人都可以使用它来查看,学习,修改和分发给他人。
非copyleft开源许可的另一方面是,此类软件的任何接收者都可以添加其他许可限制。 这意味着以这种许可形式对代码进行许可的最初作者不能保证接收者可能不会根据限制性更强的条款进一步许可他人。 例如:
让我们假设作者Noah编写了一些软件,并根据非copyleft开源许可将其分发给了收件人Aviva。 然后,Aviva修改并改进了Noah的软件,她有权根据非Copyleft开源许可条款使用该软件。 然后,Aviva可以决定对可能限制其使用的软件的任何接收者添加进一步的限制,例如在何处或如何使用该软件(例如,Aviva可以增加一项限制,规定该软件只能在以下地区使用:加利福尼亚,并且从未在任何核电厂中)。 即使Aviva可以访问源代码,也可以选择永远不将修改后的源代码发布给他人。
不幸的是,有无数的专有软件公司以上述方式使用非copyleft开源许可软件。 实际上,共享软件程序可以通过添加共享软件类型限制(例如,无法访问源代码或排除商业用途)来使用非copyleft开源许可软件,从而将非copyleft开源许可代码转换为共享软件许可模型。
幸运的是,许多使用非copyleft开源许可软件的专有公司都看到了发布源代码的好处。 这些组织通常通过诸如GitHub之类的软件存储库向接收者或更广泛的开源社区提供其修改后的源代码,从而继续保持开源模型的持久性,从而实现创新的良性循环。 这并非完全出于慈善目的(或者至少通常不是这样):这些公司希望鼓励社区创新和进一步的增强,从而使他们进一步受益。
同时,许多专有公司不选择这样做,这完全符合非copyleft开源许可证的条款。
Copyleft许可的开源软件
1989年,开发了一个新的开源许可证,称为GNU通用公共许可证,也称为GPL许可证,其目的是确保软件固有地是自由的(如言论自由),并且这些自由必须始终存在,这与非copyleft开源许可软件有时会发生的情况不同。 在版权法的独特适用中,GPL使用版权法来确保永久性的软件自由,只要遵守这些规则(稍后会再介绍)。 这种独特的使用版权的被称为拷贝走了 。
与非copyleft开源软件一样,此许可证允许收件人不受限制地使用该软件,检查源代码,更改软件,以及将原始或经修改的软件进一步分发给其他收件人。 与非copyleft开源许可证不同,copyleft开源许可证绝对要求所有接收者也具有这些相同的自由。 除非不遵守规则,否则绝不能将它们带走。
使Copyleft开源许可证可强制执行并促使人们遵守法规的原因是版权法的适用。 如果copyleft代码的接收者之一不遵守许可条款(例如,通过对软件使用添加任何其他限制或不提供源代码),则其许可将终止,并且由于他们不再具有使用该软件的法律许可。 这样,可以为该copyleft软件的任何下游接收者确保软件自由。
超越基础:其他软件许可模型
我在前面提到了公共领域,尽管它通常与开放源代码混为一谈,但该模型有所不同。 公共领域是指已采取步骤以查看与该软件没有任何适用的版权,这通常发生在软件版权到期或被作者拒绝时。 (在许多国家/地区,版权保护机制尚不明确,这就是为什么某些公共领域软件可以提供一种选择来获得开放源代码型许可证作为后备的原因。)使用公共领域软件不需要许可证; 是否使它成为“开放源代码”是很多争论的主题,尽管如果源代码可用,许多人会认为公共领域是开放源代码的一种形式。
有趣的是,有许多开源项目利用公共领域软件的小模块来实现某些功能。 甚至还有声称是在公共领域中的整个程序,例如SQLite,它实现了SQL数据库引擎并在许多应用程序和设备中使用。 看到没有许可条款的软件也是很常见的。
许多人错误地认为这种未经许可的软件是公共领域的开源软件,或者不受限制地免费使用。 在大多数国家(包括美国),软件的版权在创建时就已存在。 这意味着未经许可,不得以许可证的形式使用它,除非以某种方式放弃版权,并将其呈现在公共领域。 此一般规则存在一些例外情况,例如默示许可或合理使用的法律,但是在如何将它们应用于特定情况时,这些例外情况非常复杂。 我不建议在没有开源许可条款的情况下提供没有许可条款的软件,因为这会导致混乱和潜在的滥用。
开源软件的好处
就像我之前说的那样,开放源代码可以实现高效的软件开发模型,并具有巨大的创新能力。 但这到底是什么意思?
开源许可模式的好处之一是大大减少了创新方面的摩擦,尤其是原始用户以外的其他用户所进行的创新。 这种摩擦是有限的,因为使用开放源代码通常不需要协商许可条款,从而大大简化和降低了使用成本。 反过来,这创建了一种开源生态系统,鼓励快速修改和组合现有技术以形成新的事物。 通常将这些更改提供回此开源生态系统中,从而创建创新周期。
有无数种软件程序可以运行从您的烤面包机到火星飞行器的所有程序,这是这种轻松地将各种程序组合在一起的能力的直接结果……所有这些程序都由开源开发模型支持。
翻译自: https://opensource.com/article/19/10/shareware-vs-open-source
开源的定义
开源的定义_共享与自由与公共:开源的真正定义相关推荐
- 开源 区块链_区块链将如何影响开源
开源 区块链 中本聪(Satoshi Nakamoto)十年前以比特币起家的时候,已经找到了很多追随者,并成为去中心化运动. 对于某些人来说,区块链技术是一种宗教,它将对人类产生与互联网相同的影响. ...
- abs int 宏定义_【C语言】15-预处理指令1-宏定义
说明:这个C语言专题,是学习iOS开发的前奏.也为了让有面向对象语言开发经验的程序员,能够快速上手C语言.如果你还没有编程经验,或者对C语言.iOS开发不感兴趣,请忽略 预处理指令简介 1.C语言在对 ...
- 开源贡献 计算_公司如何帮助员工为开源做出贡献
开源贡献 计算 我是Drupal社区的一员,该社区在全球拥有100,000多名积极贡献者. 在他们当中,有越来越多的雇员受到雇主的鼓励,为开源做出了贡献. 如今,很少找到经验丰富的开发人员,其简历或简 ...
- 开源邮件客户端_排名前6位的开源桌面电子邮件客户端
开源邮件客户端 本文最初于2015年10月8日发布,并进行了更新以反映新信息和项目更改. 移动和Web技术仍然没有使桌面过时,尽管有一些常规的说法相反,但桌面客户端似乎并不会很快消失. 并且有充分的理 ...
- 查看so库中是否有某个定义_论Linux ELF中动态库符号重定义利用 属性/Linker 做隐藏的手法...
假如libgetthree.so libgetseven.so , 同时这两个so内部都用了internal_do_calculation()函数,并且各自定义了自己的internal_do_calc ...
- 开源贡献 计算_通过Hacktoberfest的镜头看开源贡献的状态
开源贡献 计算 在2019年,DigitalOcean和开放源代码社区庆祝了第六届年度Hacktoberfest ,这是一个包容性社区活动,激发了开放源代码的参与和维护. 激动人心的一年,世界范围内的 ...
- aect17定义_美AECT日前发布新的教育技术定义
在美国教育传播与技术协会(he Association for Educational Communications and Technology,AECT)官方网站(www.aect.org)首页, ...
- 天籁obd接口针脚定义_常见汽车诊断头位置(OBD针脚定义).pdf
您所在位置:网站首页 > 海量文档  > 汽车/机械/制造 > 汽车试验与故障诊断 常见汽车诊断头位置(OBD针脚定义 ...
- java源程序是由类定义_无论Java源程序包含几个类的定义,若该源程序文件以A.java命名,编译后生成的都只有一个名为A的字节码文件...
无论Java源程序包含几个类的定义,若该源程序文件以A.java命名,编译后生成的都只有一个名为A的字节码文件 答:× 小儿头皮静脉输液时如误注入动脉,局部表现为: 答:呈树枝状苍白 人民群众既是历史 ...
最新文章
- 宝宝都能看懂的机器学习世界
- leetcode之回溯backtracing专题1
- 认识 java JVM虚拟机选项 Xms Xmx PermSize MaxPermSize 区别
- 在vscode中怎样debug调试go程序
- linux搭建redis
- logback日志框架的简单使用
- Typora优化,Typora结合PicGo,让工作更轻松【图文教程】
- Waves V13全新更新 Waves V13全套音频插件 Mac版
- maven的package与install命令区别
- 基于matlab人脸识别论文,基于MATLAB的人脸识别系统的设计
- linux 解压war到root_解压war包的解压软件 war包可以用解压工具解开吗
- linux 查看 文件夹代销,速达常见问题集
- 51单片机矩阵键盘控制数码管
- 机器学习之信用卡欺诈检测
- 数值算法之adjacent_difference
- STM32实战(1):搭建模板工程
- java技术栈xmind,zookeeper面试
- Saturn Executor部署过程
- [转]研究生能力自我培养手册
- 【1月比赛合集】41场可报名的数据挖掘奖金赛,任君挑选!
热门文章
- 列表和元组元素的增加
- Linux环境里实现FLink项目的Zookeeper与Kafka启动
- mysql安装在centos7报错ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
- LTE参考信号CRS、DRS、SRS、DMRS
- 【自顶向下模块化编程】C语言实现伙伴系统
- 亲密接触ASP.Net(2)
- 卷积神经网络算法详解
- 真小白入门:python的安装(一)
- 经验:那些年,我在大学接过的外包项目
- 360手机进 android什么,360手机f4的手机系统是什么