自由软件 技术专题简介-编程知识网

简介

  提示:此条目的主题不是免费软件。 GNU计划的自由软件之标志。 自由软件心智图自由软件(英语:free software),根据自由软件基金会对其的定义,是一类可以不受限制地自由使用、复制、研究、修改和分发的,尊重用户自由的软件。这方面的不受限制正是自由软件最重要的本质,与自由软件相对的是专有软件(英语:proprietary software,一些人也会将其翻译为私有软件、封闭软件),后者的定义与是否收取费用无关,事实上,自由软件不一定是免费软件,同时自由软件本身也并不抵制商业化。自由软件受到选定的“自由软件许可协议协议”保护而发布(或是放置在公有领域),其发布以源代码为主,二进制文件可有可无。

用户

自由软件对全世界的商业发展特别是硬件有巨大的贡献,多数嵌入式设备系统厂商鉴于自身无需支付许可费用和实用性方面的原因考虑也会在自由软件的基础上开发操作系统。世界上绝大多数操作系统多少都会包含有自由软件组件(例如BSD的TCP/IP协议栈广泛被包括MacOS,Windows在内的专有商业操作系统使用)。随着越来越多的自由软件支持 Microsoft Windows 平台,还有得益于 Android 平台的普及,目前有上亿的用户在日常生活或工作中使用自由软件。

自由软件直接用户往往是计算机方面的专业人士,或者有能力理解和改变源代码的人。随着Ubuntu,Manjaro 等对普通用户更友好的 GNU/Linux 操作系统的普及,普通用户也能在缺少相关知识的情况下开箱即用。

自由软件许可证

主条目:自由软件许可协议条款

大多数自由软件都使用类似的自由软件许可证,使用最多的自由软件许可如下

The MIT License

The GNU General Public License v2

The Apache License

The GNU General Public License v3

The BSD License

The GNU Lesser General Public License(LGPL)

The Mozilla Public License (MPL)

The Eclipse Public License

意义与历史

自由软件的英文为“free software”。在英文里“free”一词有“自由”、“免费”的双重含意,对于如何区分自由软件(拉丁语:libre)和免费软件(拉丁语:gratis),自由软件运动社区的创始人——理查德·斯托曼做出了以下的定义:“自由软件的重点在于自由权,而非价格。要了解其所代表的概念,你应该将“free”想成是“言论自由”(英语:free speech)一词中的含义,而不是“免费啤酒”(英语:free beer)一词中的含义。”自由软件代表用户可以自由地运行、拷贝、分发、学习、修改并改进该软件。自由软件的定义可以追溯至GNU宣言。

大部分自由软件都在互联网上自由发布,往往不收取任何费用。一些或是以离线实体的方式发行,有时会酌情收取的费用(例如:工本费和运输费),而人们可用任何价格来贩售这些软件。所以,自由软件也可以是商业软件:因为自由软件许可证并不限制贩卖软件或者提供商业服务,这些并没有违反例如GPL等自由软件许可证。因此,“自由软件”是关乎自由的问题,与价格无关,软件如何定价并不影响它是否被归类为自由软件。

自由软件的定义

自由软件基金会(FSF)对自由软件的定义首次于1989年发表。这份定义后来被布鲁斯·裴伦斯(Bruce Perens)改写为《Debian自由软件指导方针》。

根据斯托曼和自由软件基金会(FSF)的定义,自由软件赋予用户四种自由:

自由之零:不论目的为何,有使用该软件的自由。

自由之一:有研究该软件如何运作的自由,并且得以修改该软件来符合用户自身的需求。获取该软件之源码为达成此目的之前提。

自由之二:有重新散布该软件的自由,所以每个人都可以借由散布自由软件来敦亲睦邻。

自由之三:有改善再利用该软件的自由,并且可以发表修订后的版本供公众使用,如此一来,整个社群都可以受惠。如前项,获取该软件之源码为达成此目的之前提。

如果一软件的用户具有上述四种权利,则该软件得以被称之为“自由软件”。也就是说,用户必须能够自由地、以不收费或是收取合理的散布费用的方式、在任何时间再散布该软件的原版或是改写版,在任何地方给任何人使用。如果用户不必问任何人或是支付任何的许可费用从事这些行为,就表示其拥有自由软件所赋予的自由权利。

自由软件不是没有着作权

主条目:copyleft

大部分的自由软件可以无需费用自由获取,并且它的源代码可以自由修改并散布,但它并不是没有着作权。着作权是当某项作品完成时就自然产生了,不需申请或注册,而其内涵通常包括署名、发表(公开)、授予他人使用等权利。如合法享有着作权者无条件放弃所有着作权,则该作品就被“释入公有领域”。需要注意的是,被释入公有领域后,原着作权持有者就无法再对其他人如何使用该作品施加任何法律上的限制。因此科技巨头可以合法地使用该等作品进行二次创作(例如制作新软件),而该等二次创作品则在法律上享有完整的着作权,不受原着作权持有者的支配。

这并不符合自由软件的定义。自由软件必须能将“自由”无限传承下去。因此自由软件并未“释入公有领域”,而是将“传承自由属性”作为一项允许他人使用自由软件的条件。如任何人使用了自由软件二次开发的软件未向他人开放源代码,则其对该自由软件的二次开发,即属违反着作权法。因此,自由软件在法律上并未放弃着作权,而是订明了若干“自由”的定义,并要求用户如欲行使这些自由,必须对派生作品维持相同许可。

相反的例子是非自由软件(封闭软件)。如果,当用户付费购买或者免费获得某套软件时,所得到的只是“使用权”,用户必须接受该软件的软件许可证才能使用这个软件;而许可证列明软件的原作者则仍然保有修改权,未经原作者同意进行修改属违反许可证之行为,则该等软件属于封闭软件。请注意,自由软件也有许可证,常见的如GNU通用公共许可证,但这些许可证不会限制你获取源代码或者限制你修改软件,唯一的要求是你对修改后的软件必须应用同样的或更宽松的许可证。即你修改后形成的新软件,其他人也可以获取其源代码并修改,你不得限制他们这样做,否则你当初的修改行为就因不符合GNU通用公共许可证而构成侵犯(之前参与编写这个软件的人所享有的)着作权。

自由软件不使用封闭格式

封闭软件通常会使用专属的封闭格式,并且不允许用户分发,这极大地限制了用户的自由。而自由软件则完全不同,由于自由软件的源代码是公开的,所以它所使用的任何格式都是透明的。自由软件永远不会只发布专属的封闭格式软件来限制用户修改的自由。

自由软件的精神领袖

自由软件的精神领袖是理查德·马修·斯托曼。他被人称为“最后的真正黑客”,他认为一个好的软件,应该自由自在地让人取用。软件不应该拿来做为相互倾轧、剥削的工具。所以他起草GNU通用公共许可证来保障自由软件的自由,并创办了自由软件基金会来贯彻他的理念。领袖们有时被称作终身仁慈独裁者。

自由软件与开源软件

最早的开放源代码定义是在1998年创建,来自Debian自由软件指导方针。虽然大多数的开放源代码软件同时也是自由软件,但是,GNU项目认为“开源”这个词并没有抓住自由软件的真正涵义,容易让人过于着重软件的质量、流行与成功而忽视或抛弃自由软件精神的道德观和社会价值,力主自由软件是一个道德底线。

FreeBSD、OpenBSD以及NetBSD的社群人员往往认为“Copyleft”是一种对自由的过度限制,是一种自由的侵害,因此他们倾向于使用较为宽松的BSD、MIT类似的协议,然而这类协议因为缺少相关的说明并不能避免其成果被专利流氓利用。一些公司/群体为了避免专利流氓的侵害而且也不想使用例如GPLv3、MPL2.0等Copyleft协议的情况下会选择使用Apache2.0协议。

对于BSD、MIT这类较为宽松的自由软件协议,GNU项目认为这是对专有软件的松懈(英语:lax)和宽容式(英语:permissive),因为这些协议不能避免其派生作品成为限制用户自由的专有软件,一旦你允许他们这么做,那么你就无法捍卫其他人的自由了。,例如FreeBSD在PlayStation 4系统软件的使用以及BSD的TCP/IP协议栈在专有软件的使用等。

形式上的差异

开源软件与自由软件是两个不同的概念,只要符合开源软件定义的软件就能被称为开源软件。而自由软件有比开源软件更严格的概念,因此所有自由软件都是开放源代码的,但不是所有的开源软件都能被称为“自由”。但一般,绝大多数开源软件也都符合自由软件的定义。

两者内涵的差异

开放源代码作用是,使用开放的开发方式,尽可能的使软件优化,而自由软件则将尊重用户自由作为道德标准。

如果说“自由软件”会引起误解,(因为英文“Free”一词有“自由”、“免费”的双重含意),那么“开放源代码”的名字则会引起的误解则更多。“开源”很容易让人认为是只要把源代码“公开”出来就算是开源了,即“你可以看到源代码”。但是如果用户的自由仍然得不到尊重,那么即使公开源代码也没有意义。有的软件公司只是为了想找用户帮它调试、吸收社区贡献的功能,这样子会破坏了自由软件的原意。一个例子是Tivo公司生产的机顶盒。虽然它基于GNU/Linux,TiVo公司也按照许可证发布了源代码,但是却禁止用户在机顶盒上运行自己的程序,或重新安装系统。

自由软件的原意就是要给予用户运用软件的自由,这个‘自由’就是自由软件的精神所在。但是一些商业化开放的源代码却故意忽略了这个最重要的精神,反而无法让用户体认到‘自由’的真意,那么开源这一个替代自由软件的辞句反而把自由的原意除去了。

自由软件的精神领袖理查德·马修·斯托曼很反对人们把开放源代码和自由软件混为一谈。。

自由软件与免费软件

主条目:免费软件

自由及开放源代码软件列表

参见:反996许可证、en:Hacktivismo Enhanced-Source Software License Agreement和en:Source-available_software

免费软件(英语:freeware)是一种不须付费就可获取的软件,但是通常有其他的限制,用户并没有使用、复制、研究、修改和分发的自由。该软件的源代码不一定会公开,有些免费软件即使所谓开源但是因为有会限制用户软件自由如限制用户修改重分发或者限定/限制特定人群使用等行为的限制性条款存在并不是自由软件。

Tivo化

主条目:Tivo化参见:GPLv3和en:Vendor_lock-in

Tivo化(英语:Tivoization) 是一种限制软件自由的行为,即通过检测可执行文件签名,禁止用户安装或运行修改后的可执行文件,这种行为被 Richard Stallman 称为“专制暴君”(英语:tyrants)。这个名字源自于Tivo公司在其数字视频录像机的产品中使用了GNU和Linux内核的源码但是其从设计上限制了用户的软件自由,用户不能在其产品上自由运行和使用修改后的系统。因此自由软件基金会出版了GPLv3,GNU项目软件的授权协议也随之升级,然而因为各种因素很多Linux内核开发者对升级表示反对。

数字限制管理

主条目:设计式缺陷

数字限制管理(英语:Digital Restrictions Management)或数字限制机制(英语:Digital Restrictions Mechanisms)是自由软件社群对数字版权管理的一种讽刺性说法,因为这种行为限制了用户的软件自由权利。自由软件基金会针对此种从设计上就限制用户软件自由的行为发起了Defective By Design运动。

JavaScript陷阱

参见:NoScript

JavaScript陷阱(英语:The JavaScript Trap)指用户在浏览器中使用专有软件却毫不知情的现象,RMS在GNU项目网站上给出了具体的定义。

为了解决这个问题,GNU项目创造了提供探测并拦截用户访问的网页上非自由、非平凡的JavaScript功能的GNU LibreJS(英语:GNU LibreJS)给重视软件自由的用户使用。一些自由软件社群,为了解决此类问题也作出了一些努力,例如由自由软件基金会支持的LibrePlanet(英语:LibrePlanet)为此专门成立了行动小组。