开源软件简介

一、开源运动的发起

        近几十年,软件已经称为战略性的社会资源。各大软件供应商传统的对外封锁源代码的运营模式虽说有积极的一面,比如可以维护开发商的利益,使其可以持续地维护进一步开发的能力,以及可以保护软件商及客户的私密信息等等,但凡事都有两面,其局限性也越发明显,比如付费软件供应商可能因缺乏价格竞争而提高产品、服务的价格,而用户则可能没有选择的余地;而且用户可能对单一软件供应商或解决方案产生依赖性,尤其对于大型机构或者国家,这种依赖性隐藏着巨大的风险。

        “自由软件(Free Software,也叫“Open Source(开源)”或“Libre Software(自由软件)")”的出现极大地改变了软件开发和应用领域的经济学。

        1984年开始,自由软件基金会(FSF, Free Software Foundation)通过其下的GNU项目生产可供自由使用的软件。其创始人Richard Stallman认为自由软件应该允许用户获得其源代码,并且可以对其进行研究、修改以及重新分发而不用支付任何费用。与之相关的商业活动不是去隐藏代码,而是附加补充的软件(按客户的需求定制软件)以及提供附加的服务,比如维护和用户培训,可以通过书籍、培训材料、培训课程等形式。

        另一方面,1991年8月,一位名叫Linus Torvalds的芬兰学生宣布他开发了一个新的操作系统,并且已经提供给开发者社区供测试和完善。这就是Linux最初的系统内核。

        Richard Stallman和Linus Torvalds都领导着各自的开发者社群,Richard Stallman领导FSF的GNU社群,Linus Torvalds领导Linux社群,这是开源领域中最重要的两个社群。

        这两个社群对开源和自由软件的理解不尽相同。Richard Stallman强调用户要能够免费地获得软件及源代码,”free”的两个含义“免费的”和“自由的”都是Richard Stallman追求的目标,但他却回答不了从事开源事业的人和企业要如何获利这个基本问题。当Linus Torvalds领导的Linux社区实现了一个带有可用源代码的免费操作系统时,这个问题仿佛得到了解答。GNU社群决定将自由软件运功中的各种活动统一在“开源软件”这一名称下。

        “开源软件”被注册为一个认证品牌,符合其规范的产品可以被称作开源软件。

二、开源软件的规范

        开源软件并不是简单地将源代码与程序一起发布,而是有一套准入规范。

        1997年6月,Debian项目(GNU/Linux的一个发布版本,只使用自由软件)的领导者Bruce Perens起草了开源软件定义,随后开源倡议组织(OSI, Open Source Initiative Organization)对其进行了修订,其中包含以下要点:

        1)软件可以被免费拷贝;

        2)软件必须包含源代码,可以与编译后的可执行版本共同发布,或以某种可靠形式由用户自行获取源代码,比如从网络下载。

        3)软件的使用许可必须允许用户对源代码进行修改以及由此衍生出的后续工作,并允许这些后续工作的成果以原许可中相同的条款进行发布;

        4)可能需要确保原作者代码的完整性。后续的改动可以作为原始代码的补丁形式呈现,或者需要有一个与原始代码不同的名称或版本号,这样可以明确每次改动的作者。具体做法取决于软件许可的具体规定。

        5)软件使用许可不得对某个人或某群体有歧视性规定,不可以限制对软件的访问。如果国家法律或政策有这方面的规定,应在许可中说明。

        6)不可以对软件的应用领域有限制性规定,即使该软件最初不是针对该领域设计的。比如,开源软件是允许商用的,开源软件的许可不能阻止软件用于商业目的。

        7)软件使用许可适用于每个获得该软件的用户。

        8)如果开源软件被用作某更大型产品的一部分,必须保留其原始使用许可。如果该产品是付费软件,应在其使用许可中说明哪一部分是引用的哪款开源软件。

        9)开源软件许可不可以在该软件被并入其他软件或与其他软件共同发布时形成障碍;

        10)开源软件的许可必须是技术中立的,即不局限于某些设备或操作系统,不允许提及独家的分发方式,比如强制使用CD、FTP等方式进行分发。

        OSI专门管理开源软件的定义和许可证,审查软件是否具备成为开源软件的资格。开源许可证有很多种,

        1) GPL(通用公共许可证):这是最著名、应用最广的许可证,它要求任何修改后的代码或基于GPL代码开发的衍生作品也必须以GPL许可证发布,防止开源软件被集成到付费软件中。

        2) MIT许可证:这是一种非常宽松的许可证,允许用户自由地使用、修改和分发软件,甚至可以用于专有软件中。

        3) Apache许可证:与MIT类似,但它提供了额外的保护措施,如专利条款。

        4) BSD许可证:它也是一个非常宽松的许可证,但与MIT许可证相比,它提供了更明确的免责声明。

        5) LGPL(较宽松的通用公共许可证):这是一种更宽松的GPL,适用于库文件,允许将库链接到专有软件中,而不需要将整个程序开源。一个经典的例子就是Linux C库,如果它使用GPL许可,它只能被用来开发开源软件,而它可使用LGPL许可就可被用来开发付费软件。

        这些许可证旨在保护作者的版权,同时鼓励软件的共享和合作开发。在选择许可证时,项目作者会根据自己的需求和对社区的贡献来做出决定。

三、开源软件的优势

        开源软件可以被免费使用、研究、拷贝、修改及分发。它使得软件科学的教学、学习都可以不依赖于特定的技术提供商,这对于可持续发展和建立一个包容性信息社会尤为重要。

        开源软件,意味着用户可以获得其源代码,并在该软件许可范围内适当地进行修改及分发。开源软件具有以下优势:

        1)可以对源代码进行研究、用于教学,或对其进行修改、纠正错误,甚至对其增加新功能。

        2)可以免费使用(或支付较少地费用,比如支付软件的包装、分发费用)。

        3)可以制定防止单一软件提供商形成垄断的规则。

        4)形成基于共享知识的发展模式,类似于科学社区,让每个决定都基于广泛的共识,从而使发展质量更高。

四、商业模式

        对于软件公司来说,开源同样具有吸引力,提供了各种吸引人的好处。

        1) 对于软件开发公司来说,如何通过开源软件赚取利润没有一个简单的答案,并不是所有类型的软件都可以做到这一点,回报取决于能够产生利润的软件类型。通常,软件公司会进行调研,以确定如果开发为开源软件,应用程序是否会盈利(大多数会),社区会帮助降低开发成本以及维护或错误修复的成本,并考虑到开源将为我们提供的用户数量,以及他们对我们的支持或文档服务的需求。如果这个平衡是积极的,那么不依赖软件销售收入也是可行的。

        2) 增加用户数量。

        3) 获得更大的开发灵活性,参与的人越多,能发现错误的人就越多。

        4) 收入主要来自支持、用户培训和维护。

        5) 机构用户在选择管理任务的软件时,需要考虑许多因素,例如性能、可靠性、安全性、可扩展性和财务成本。开源软件不仅在成本方面具有优势,而且能够在任何其他因素与付费软件竞争。

        6) 对于私人用户来说,它提供了大量适应常见用途的软件,开源软件最重要的目标之一就是吸引家庭用户。因为许多家庭用户使用付费软件的盗版版本,尽管可能没有被起诉,但他们确实需要支付费用。开源软件则为家庭用户解决了这一问题。

        7) 最后,作为特例,国家可以从开源软件中获得重要的好处,因为它提供了与专有软件昂贵许可费用相比微不足道的价格的高质量软件。此外,开源软件可以轻松集成文化方面的需求,例如有些小国家有自己的语言,而软件提供商却不愿意对此提供支持,或要求这些小国家为此付费,这种情况开源软件的优势就非常明显。

五、开源运动的推动

        开源软件得到国际组织的大力支持和推动。欧盟委员会(European Commission)的终生学习项目(LLP,Lifelong Learning Programme)与自由知识机构(Free Knowledge Institue)以及三所知名大学(这三所大学分别是荷兰开放大学(Open Universiteit Nederland)、西班牙加泰罗尼亚帕伯拉大学(Universitar Oberra de Caralunya)以及挪威阿格德尔大学(University of Agder)。)合作,于2008年创办了自由技术学院(FTA,Free Technology Academy)。

        FTA致力于自由软件技术的教学,使人们可以不受限制地基于现有知识去研究和创造。FTA提供线上课程传播自由软件技术。主要面向IT专业人员、教育从业者、学生以及各种决策者。FTA所使用的以及自行开发的学习材料都是开放教育资源(Open Education Resources),这些教育资源具有非营利性的免费使用许可,FTA可以在许可授权范围内自由地使用、修改以及分发这些材料。同样,FTA所使用的在线虚拟校园也是基于开放标准架构的自由软件。

        开源运动已经使GNU/Linux获得长足发展,已经可以与现有的封闭式付费系统相媲美,在某些方面甚至已经超越了付费系统。在这个过程中,许多大公司起了重要作用,比如HP、IBM、当时的SUN(2010年被Oracle收购)等。

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

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

相关文章

Qt 学习第十一天:QTableWidget 的使用

一、创建QTableWidget对象,设置大小,在窗口的位置 //创建tablewidgetQTableWidget *table new QTableWidget(this);table->resize(550, 300);table->move(100, 100); //移动 二、设置表头 //设置表头QStringList headerList; //定义headerList…

web开发(1)-基础

这是对b站课程的总结,后续可能会继续更 01 前后端分离介绍_哔哩哔哩_bilibili01 前后端分离介绍是Web应用开发-后端基础-基于Springboot框架的第1集视频,该合集共计29集,视频收藏或关注UP主,及时了解更多相关视频内容。https://w…

GPG error golang 1.19

1. 问题描述及原因分析 在飞腾2000的服务器,OS为Kylin Linux Advanced Server release V10环境下,docker版本为18.09.0(docker-engine-18.09.0-101.ky10.aarch64),基于容器镜像golang:1.19编译新的容器镜像&#xff0…

【C++篇】启航——初识C++(上篇)

下篇:【C篇】启航——初识C(下篇) 目录 引言 一、C的起源和发展史 1.起源 2.C版本更新 二、C在⼯作领域中的应⽤ 三、C入门建议 1.参考文档 2.推荐书籍 四、C的第一个程序 1.C语言写法 2.C写法 五、命名空间 1.为什么要有命名空…

AI 对话工具汇总

🐣个人主页 可惜已不在 🐤这篇在这个专栏AI_可惜已不在的博客-CSDN博客 🐥有用的话就留下一个三连吧😼 目录 前言: 正文: 前言: 在科技飞速发展的时代,AI 对话正逐渐成为我们获取信息、交流思想的新方式。它以强…

若无向图G(V,E)中含7个顶点,为保证图G在任何情况下都是连通的,则需要的边数最少是多少?

这乍一看是不是可抽象(迷糊)了,butttt待我小翻译一下。 先举少一点的例子,假如我们有三个点,我给你两条边,那是不是不管咋连都一定一定是连通的。 那我们再进一步,假如四个点呢?我给…

RabbitMQ 界面管理说明

1.RabbitMQ界面访问端口和后端代码连接端口不一样 界面端口是15672 http://localhost:15672/ 后端端口是 5672 默认账户密码登录 guest 2.总览图 3.RabbitMq数据存储位置 4.队列 4.客户端消费者连接状态 5.队列运行状态 6.整体运行状态

在Linux中将设备驱动的地址映射到用户空间

本期主题: MMU的简单介绍,以及如何实现设备地址映射到用户空间 往期链接: Linux内核链表零长度数组的使用inline的作用嵌入式C基础——ARRAY_SIZE使用以及踩坑分析Linux下如何操作寄存器(用户空间、内核空间方法讲解)…

Redis篇(最佳实践)(持续更新迭代)

介绍一:键值设计 一、优雅的key结构 Redis 的 Key 虽然可以自定义,但最好遵循下面的几个最佳实践约定: 遵循基本格式:[业务名称]:[数据名]:[id]长度不超过 44 字节不包含特殊字符 例如: 我们的登录业务&#xff0…

『功能项目』宠物的攻击巨型化【80】

本章项目成果展示 我们打开上一篇79宠物的召唤跟随的项目, 本章要做的事情是实现在战斗中有几率触发宠物巨型化攻击将怪物击飞的效果 首先在主角预制体中增加隐藏的宠物巨型化 制作巨型化宠物的攻击效果 将该动画控制器放置在隐藏的巨型化宠物的动画控制器上 首先查…

Linux下的基本指令/命令(一)

目录 基本命令 1. Is命令/指令: 罗列当前目录下指定的文件或者目录. 2. pwd命令: 查看当前工作的路径 3. cd命令: 切换到指定路径下。 只能切换到目录中 4. tree命令: 树状显式目录 使用前要输入命令 yum install -y tree ,用来安装一个…

基于Hive和Hadoop的哔哩哔哩网站分析系统

本项目是一个基于大数据技术的哔哩哔哩平台分析系统,旨在为用户提供全面的哔哩哔哩视频数据和深入的用户行为分析。系统采用 Hadoop 平台进行大规模数据存储和处理,利用 MapReduce 进行数据分析和处理,通过 Sqoop 实现数据的导入导出&#xf…

数据流处理技术与Flink框架

一数据流 数据流定义: 数据流(Data Stream)是指数据以连续不断的方式到达和处理的序列。在现实世界中,许多数据来源都是以流的形式存在,比如: 1. 用户行为:用户在网站上的点击流、移动应用中…

【Linux】几种常见配置文件介绍

配置文件目录 linux 系统中有很多配置文件目录/etc/systemd/system、/lib/systemd/system 以及/usr/lib/systemd/system 等,这三者有什么样的关系呢? 以下是网络上找的资料汇总,并加了一些操作验证。方便后期使用 介绍 目录/lib/systemd/s…

使用C#,MSSQL开发的钢结构加工系统

很久以前的项目,上位机使用C#开发。数据库使用mssql。控制系统选用了三菱PLC,上位机和PLC之间走ModbusTCP通讯协议。 主要功能:读取加工文件(csv格式),导入到数据库,并根据机床刀具规则&#x…

Python编码系列—Python命令模式:将请求封装为对象

🌟🌟 欢迎来到我的技术小筑,一个专为技术探索者打造的交流空间。在这里,我们不仅分享代码的智慧,还探讨技术的深度与广度。无论您是资深开发者还是技术新手,这里都有一片属于您的天空。让我们在知识的海洋中…

【软件测试】详解软件测试中的测试级别

目录 一、测试级别二、组件测试三、开发者测试3.1测试与调试3.2 组件测试目标3.3 测试功能 四、稳健性测试4.1 效率的测试4.2 测试可维护性4.3 测试策略4.4 白盒测试 一、测试级别 软件系统通常是由许多子系统组成的,而这些子系统又是由多个组件组成的,…

VMware Aria Operations for Logs 8.18 发布,新增功能概览

VMware Aria Operations for Logs 8.18 - 集中式日志管理 请访问原文链接:https://sysin.org/blog/vmware-aria-operations-for-logs/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org 集中式日志管理 VMware Aria …

C#测试调用FreeSpire.PDFViewer浏览PDF文件

Free Spire.PDFViewer是商业版Spire.PDFViewer的社区版本,支持以控件形式打开并查看PDf文件,但由于是免费版本,存在使用限制,打开的PDF文档只显示前10页内容。如果日常操作的pdf文件都不超过10页,可以考虑使用Free Spi…

Redis: Sorted Set 底层算法的简单分析

概述 我们先看下 Shorted Set 有序集合的内部数据结构所谓有序集合,比如有个容器,容器里边都已经排好序了,那无非就是快速的查找和插入不管你是查找还是插入,肯定要确定那个位置最简单的办法就是从最开头开始,挨个比较…