【CSDN 编者按】在开源吞噬世界的趋势之后,更早发展起来的自由软件也再次进入大众视野,然而自由软件和开源软件究竟有什么区别?

近日,软件架构师 Robert M. Lefkowitz  发长文在回顾自由软件发展之际,也提出了自己对自由软件的独特看法,其认为自由软件思想正濒临破灭,一方面自由软件基金会未能培养出新一代的领导者;另一方面,自由软件自身的定位存在一定的争议,对此,你怎么看?

作者 | Robert M. Lefkowitz

译者 | 弯月         责编 | 苏宓

出品 | CSDN(ID:CSDNnews)

自由软件的诞生

大约在 40  年前,即 1985 年,“自由软件”的概念诞生了。但这并不意味着那时就出现了与同事共享软件并公开源代码的行为。在 GNU 宣言和自由软件基金会成立 10 年前,我曾在一家云服务公司工作(只不过当时我们称其为“分时共享”),目的是鼓励人们使用我们的产品,并花钱租用计算机时间、磁盘空间和网络带宽,我们策划了一系列可供客户自由使用的软件库。我们称之为公共库,而这些软件就是公共软件。公共软件的意思就是任何人都可以免费使用的软件。1985 年诞生的这个新概念是说,创建软件是一种政治行为。如果一个软件的创建是出于政治原因,那么就应当称其为自由软件,以区别出于其他原因而创建的软件。

当第一次参加  O'Reilly  开源大会时,我观看了 Miguel de Icaza 与 Richard Stallman 的辩论,他们讨论的问题是“自由软件”和“开源软件”之间是否有区别。结论是,从软件、许可证或产出的角度来看,二者之间并没有明显的区别。不同之处在于程序员的意图。如果意图是出于政治目的(即注重自由),那么结果就是自由软件;如果意图是出于工业目的,那么结果就是开源软件。我使用“工业”这个术语是因为开源人士的动机是使用他们心目中生产软件的高级方法。

在我看来,是自由软件还是开源软件,不在于动机出自政治还是工业。我关注的是教育层面。也就是说,开源软件提供了学习编程的机会。因此,自由软件和开源软件的精神是相同的,所以,我觉得可以通过自由软件来指代具有教育意义的软件。

我更倾向于从意图出发考虑软件的分类,因为我们可以借此反思实现意图的有效策略。举个例子,如果事实证明,在其他所有条件都相同的情况下,提供各个库的源代码可能会导致软件的质量下降,那么抱有生产工业级软件意图的人可能会选择不公开源代码。对于自由软件来说,开源代码当然是非常宝贵的,而且有些情况下即使是工业软件也需要访问源代码。但是这方面的讨论又是另一个话题了。

自由软件基金会面临的问题

今天的话题是从政治角度讨论软件。我认为,很明显自由软件基金会未能解决软件的政治问题。我们之中有些人关心的是软件的自由、道德与社会正义的问题,他们必须寻找其他策略来实现这些目标。自由软件基金会的策略(坚持保留版权和软件专利权)的效果越来越差了。自 1985 年以来,软件世界已经发生了变化,我们需要抛开过去,建立更美好的未来。

表明自由软件思想破灭的第一个迹象是,自由软件基金会未能培养出新一代的领导者。自由社会通常都不会赞同“独裁者”的做法。每过十年培养一批新的领导层,这才是健康的信号。这才是发展和创新的标志。然而过去了十年又十年,还是同一批人在追求同一个失败的策略,这就表明这种做法未能得到广泛的接受。

我不禁想起杜鲁门总统的一句话:

“不计较个人得失,才能大有作为。”

自由软件基金会一直坚持认为,Linux 的成功有它的一份功劳。患得患失又怎能取得成功呢?这与他们紧握权利不肯放手,扼杀下一代成长的行为如出一辙。也许 Linux 的成功正是 GNU 失败之处。

“Free Software”一词有很大的歧义

“自由软件”(Free Software)这个词语带有很大的歧义。在我看来,你不能使用自由来形容没有生命的物体。人有自由,但是比如茶壶就没有自由。如果非要说自由(free)的茶壶,那么人们必然会以为这个茶壶是免费的。当有人说“自由印刷”(free press),他们的意思不是说印刷机的金属和木材享有自由。这个短语中的“印刷”(press)是一种借喻,它指的是新闻工作者。“印刷自由”(Freedom of the press)指的是赋予记者的自由。大家都知道“press”指的是新闻工作者这个群体。因此,当人们说“自由软件”或“软件自由”时,我们知道这里的自由指的不是可执行文件。这种表达形式指的是“软件”的自由(就像press 代指记者一样)。那么“软件”又包括哪些人呢?

“软件”所涉及的人群主要包含两大类:软件用户与软件创建者。而“自由软件”的拥护者为了赋予软件用户一定程度的自由,剥夺了软件创建者的权利。许多程序员都以为“软件自由”是为了增加软件创建者的自由。

实则完全相反。GNU 宣言和自由软件基金会再三解释说,他们的意图是增加计算机用户的自由(但代价是牺牲软件创建者的自由)。这里的“软件”指的就是软件用户。

问题在于,自由软件基金会坚持给予软件用户的自由是大多数用户都不需要的,同时他们强加给软件创建者的限制却是大多数软件创建者都希望保留的权利。如果迷信自由软件的人能够知道“软件”(即软件用户)想要的究竟是什么,那么他们可能会取得更大进展。然而,他们的大部分努力都在试图说服“软件”他们应该拥有哪些自由。按照这个思路,软件是否为“自由软件”应当由程序员的意图决定,而不是用户的意图。如果用户出于政治目的使用软件,但未获得自由软件基金会批准的许可方式,那么“该软件(即用户)”可以行使自由权吗?

在 1983 年之前(即自由软件基金会成立的前两年),IBM 出售的所有计算机都附带了操作系统的源代码,就像 Linux 一样(尽管如今一般你必须单独下载源代码)。每个公司都有一个“数据处理”人员,在需要时对源代码进行修改(修复问题,添加功能等)。但是,许多公司规模不够大,也不够成熟,所以没有这种的员工。他们希望将操作系统软件的维护工作外包给供应商(IBM)。但是,IBM 不愿接这样的工作,因为每个人都有源代码,而且可能进行了修改。IBM无从得知他们进行了哪些修改,因此也无法无法准确预估工时。最终,由于客户不断提这样的需求,他们提出了 OCO(Object Code Only,仅包含目标代码)程序——无需源代码即可获得软件。IBM 可以针对这种情况为软件提供服务合约,因为他们无需再担心客户单独修改源代码的问题。可见,计算机用户想要的自由是摆脱源代码,而不是自由使用源代码来修改其操作系统。

两年后,自由软件基金会成立了,却将源代码强加给了不想要的人。

你可能会反驳说:“上述只是 20 世纪 80 年代的情况,从那以后软件的性质已经发生了变化,因此情况也不同了。”虽然我赞同你的看法,但最大的自由软件公司红帽一直采用了“摆脱源代码”的商业模式。企业向红帽付费以获得授权,其授权方式与其他专有商业操作系统没有任何区别,作为交换,红帽保证他们无需自己处理源代码。

自由软件是为了防范不法分子?

关于自由软件的讨论始于麻省理工 AI 实验室需要修改打印机软件源代码的传说。然而,他们遇到的问题是,无法在网络打印机阻塞时收到通知,这远远达不到侵犯人权的程度。在讨论“软件自由”究竟有什么用时,他们一般都会给出富有争议性的答复:担心“不法分子”。

他们认为,如果你无法查看源代码,那么不法分子就有可能植入一些病毒,而且你还不知道;如果你能查看源代码的话,不法分子就没法做手脚了。我认为这种说法只不过是三人成虎,而且是在胡说八道。

自由软件的基本前提是正确的:这是一个政治问题。但保护自己免受不法分子的侵扰不是我的工作,是公安部门的工作。

自由软件主义者喜欢使用啤酒的隐喻(比如免费的啤酒)。但在我看来,如果一个人担心不法分子的话,他们就不会喝外面卖的啤酒(或者免费的啤酒)。如果担心坏人在啤酒中下毒的话,他们会自己酿造啤酒。而且他们还会自己种植啤酒花,因为担心坏人在啤酒花中下毒。那么水怎么办呢?坏人可能会在自来水中下毒。那只能自己挖井了(当然,除非坏人污染地下水源)。这样下去就没完了。

当然,另一种方式就是相信你购买的啤酒很安全,因为确保你的安全是政府的工作。政府会检查啤酒厂。销售有毒的啤酒是犯法行为,公安与司法部门会追究到底。尽管如此,可能偶尔还是会发生啤酒中毒的悲剧事件,但是通过政府机构来确保啤酒供应的安全,远比让每个家庭对他们购买的啤酒进行测试更为有效。“不法分子”阴谋论者相信,许多商业行为都是邪恶的,而所有政府行为都是无效的。尽管我相信偶尔也有丧尽天良的企业家和无能的官僚,但总的来说,我们不能因噎废食,杞人忧天。飞机不会从天上掉下来,餐馆不会提供有毒的食物,汽车不会爆炸,我们驶过的桥也不会坍塌。因此,软件供应商一般也不会在产品中植入间谍软件。

自由软件的“免责声明”

在遇到坏人行不法之事的情况下,与其让每个人仔细审查每一行源代码,还不如通过法律的途径为他们定罪。在这方面,自由软件就是不法分子之一。GPLv3 的第15条和第16条分别是“免责声明”和“有限责任”。公平地说,专有软件许可中也有相同的条款,但是自由软件商不能因此而站在道德制高点。这些许可声明,如果软件造成任何损失,编写该软件的人概不负责(有限责任);而且作者也不能保证软件能够正常运行(免责声明)。除非法律另有规定。自由软件主义者狡辩说,既然软件创建者并没有向你收费,所以即便他们犯错,你也不能起诉他们。当然,他们还会争辩,程序员可以通过为编写、打包和分发软件而付出的劳动收费,但不是通过许可收费。总而言之,自由软件基金会宣称,你可以通过编写自由软件来赚钱,但即便你的软件造成的任何损失,你也无需承担责任,因为你无法通过编写自由软件来赚钱(自相矛盾吧)。

当然,后面还有几个大字:除非法律另有规定。看起来 GPL 的意图是允许自由软件创建者(无意地)行不法之事,但只有在存在相关法律时才会受到制裁。这当然是自由。照这个说法,其他(非自由)软件创建者也可以无意地行不法之事。我很赞成通过立法,要求软件创建者对其造成的损失承担责任。而且还可以通过一些法律要求他们保证软件的质量。我希望看到一些具体的法规,要求我提供软件的人员对程序质量承担某些风险。但现有的免费软件许可明确规定:“无论在任何情况下,任何一方因使用我的程序蒙受损失都不应要求我负责。”然而,在司法管辖区内,免责声明本身就是无效的,你不能通过免责声明来逃避责任。我希望自由软件都向 D J Bernstein 学习,他于 1997 年发表声明,任何人在他的软件qmail中发现安全漏洞都可以获得500美元的奖励(https://cr.yp.to/qmail/guarantee.html)。

“软件自由”的概念已不合时宜

作为软件用户,也就是“软件”的成员,我们都享有“软件自由”的权利,但我想要的自由是如果软件对我造成伤害,那我可以寻求补偿。我觉得软件保险胜于“软件自由”。当编写 GPL 的时候,当创造“自由软件”这个词语的时候,软件大多用于会计、文本编辑器和打印机。如今,软件广泛用于运行 MRI 机器、放射治疗机、外科手术机器人和核电站,还有驾驶汽车和飞机等。

在编写 GPL 的时候,如果软件出现故障,那么顶多是打印机卡纸,但我没有收到通知而已。但如今,如果软件出现故障,那么就意味着我会受到致命的辐射。通过查看源代码来确认打印机,也许我还可以接受,但如今我想要的自由不是查看放射治疗机源代码,而是不用担心受到致命辐射。编写辐射治疗软件的程序员需要特别小心,他们知道如果自己犯错就会受到严厉的惩罚,这样才会让我更有安全感。而不是虽然我可以查看源代码,但编写软件的程序员知道即使我出现什么意外,他们也无需承担任何后果。我渴望的自由不是审查我所使用的每一个软件系统的每一行代码。也许在 20 世纪70年代还可以这样做,但如今根本不可能。

自由软件主义者可能会说,如果无法接触源代码,就发现不了不法分子的邪恶意图。

下面我来简单地介绍一下我的职业生涯中的一段往事。当时,我在一家大型投资银行工作,他们请求(并收到)了微软 Windows 源代码的副本。然后,银行修改了源代码,并编译出了自定义版本的微软 Windows,然后将其分发给成千上万的员工。此外,我们还在此自定义版本的 Windows 之上,编写了自定义的应用程序。你永远也猜不到接下来事情的走向。微软推出了新版本的Windows!由于新版本不包含我们的自定义修改,因此我们的应用程序无法在此版本上运行。不幸的是,任何新版本的微软应用程序(比如微软 Office),或由软件供应商编写的任何应用程序都无法在我们自定义的 Windows 版本上运行,我们该怎么办?当然,我们可以选择在几年内不升级任何软件。但在坚持了一段时间以后,微软又发布了一个新版本。很多商业应用程序都需要新版本。因此,我们购买了成千上万个 VMWare 许可,让每个员工运行两台虚拟机:一台运行我们自定义版本的微软 Windows,另一台运行公开版本。据我所知,这种做法一直延续至今。

关键在于,大公司和政府机构始终能够拿到商业软件的源代码,并根据需要对其进行修改。如果理由充分,他们肯定会这么做。但通常他们都不希望这么做。GPL(或其他此类许可)希望凭借个人的力量负责监管网络空间和防止网络犯罪。然而,政府以及大公司审核专有软件不需要特殊的版权许可。他们有很多现有的机制可以做到这一点。

既然讨论到了防止不法分子通过软件损害我们的利益的话题,我想起最近读到的一篇文章说,美国网络犯罪造成的损失甚至超过了所有自然灾害造成的损失。这种情况确实很令人担忧。你知道如何扭转这场战争的局势吗?无处不在的代码签名!自由软件基金会是否会加入对抗不法分子的斗争行列呢?不,他们不会!因为他们相信无障碍地获取源代码和运行软件更为重要,因为这样可以减少不法分子入侵你的计算机的威胁。

版权大于专利权?

另一个关键点是,软件版权提供的自由怎么可能超过软件专利呢?美国宪法规定,科学与艺术方面的发明者必须提供发明的详细说明,以换取有限期间内的专属权利。然而,版权的“有效期”是作者死后 70 年,而专利的“有效期”是20年。

在我看来,版权的有效期应该比专利权更短才对。如果我们能够消灭软件版权,那么就能让更多软件更快地进入公共领域。这样应该能增加自由。软件专利的期限甚至可以更短。软件专利可以要求源代码作为专利申请的一部分(这样就能与 GPL 一样提供针对“不法分子”的保护)。然后由政府保证所有人都可以获取源代码,而不是像今天这样,将提供源代码的责任交给微软(GitHub)。如果软件有政治维度,那么保证自由的机制应当由政府出面料理,而不是由跨国公司。然而,自由软件基金会并没有兴趣通过立法来增加“软件”的权利,他们单纯依靠违反常理的版权法。

在所谓的“自由软件”出现之前,曾经出现过“公有软件”。我们可以回到公有软件的时代。就像书籍有公共图书馆一样,软件也可以有公有软件库。但你不可擅自拿走公共图书馆的图书,你可以从图书馆借书,读完之后再还回去,这样其他人就可以继续借阅了。公共图书馆的资金由政府提供。软件完全可以模仿这种形式。不一定必须是“自由软件”,也可以是授权的商业软件,由政府提供资金,人们可以借出授权一段时间,使用完毕之后再归还,供他人使用。这样就能提高软件的使用效率,进而提高自由度。

新的自由软件世界

自由媒体指的是出版不受他人干预的自由。但是,“自由媒体”的存在并不意味着我可以复制某个记者的文章,并出版自己的拷贝(不论我是否修改了文章)。特别是,即使不允许拷贝或修改已出版的作品,自由媒体也可以健康地发展。显然,针对拷贝的限制并没有侵害媒体的自由。类似地,我认为“软件”的自由也不应该要求拷贝软件或修改软件的权利。如果我们使用“自由媒体”的比喻来理解“自由软件”,那么属于“自由软件”的程序可以禁止他人拷贝或修改,而不会侵害他人的自由。更加直白地说,我认为完全可以构造一个不存在 GPL 的世界,同时通过政策、规章和立法来提供比我们今天的“自由软件”更加自由的世界。

这些人太过于执迷不悟,完全无视了当今的软件世界。我们需要承认,所有这些所谓自由软件运动的理论,实际上没有给软件带来任何实质性的政治进步。我坚信,我们需要政府的积极参与,来促使软件对社会造成正面的影响。规制、立法、政府管理和非政府机构需要跟上软件发展的步伐。我也坚信,所谓的“自由软件”正是这一切真正进步的最大阻碍。“自由软件”扎根于过去,导致了八十年代无休止的软件口水战。自由软件的领导早已破灭,自由软件组织也已破产。所谓的“运动”也早已不复存在。

那个时代已经过去了,就让它过去吧。我们应该立足于现在,通过合理的手段管理软件。我希望能够成立一个这样的公共软件基金会。

我希望将来提及“自由软件”这个词时,我们讨论的是免费软件。否则,我会说“数字自动化”,或开源软件,或“自由的软件”,或像许多出版物说的那样,“自由授权的软件”。而这里“自由”一词源自拉丁文“Libre”,也许是拉丁文“liber”(“书籍”之意,比喻教育)。

原文链接:https://r0ml.medium.com/free-software-an-idea-whose-time-has-passed-6570c1d8218a

声明:本文由CSDN翻译。转载请说明理由。

60+专家,13个技术领域,CSDN 《IT 人才成长路线图》重磅来袭!

直接扫码或微信搜索「CSDN」公众号,后台回复关键词「路线图」,即可获取完整路线图!

“自由软件”已过时?相关推荐

  1. IDEA中提示:Warning:java: 源值1.5已过时, 将在未来所有发行版中删除

    问题描述: 运行Java Web项目时,IDEA中提示:Warning:java: 源值1.5已过时, 将在未来所有发行版中删除 解决方法: 1. 打开[File]-[Project Structur ...

  2. C# “Thread类Suspend()与Resume()已过时” 解决方法(利用ManualResetEvent类)

    C# "Thread类Suspend()与Resume()已过时" 解决方法(利用ManualResetEvent类) 参考文章: (1)C# "Thread类Suspe ...

  3. 仍在警告:配置“编译”已过时,并已由“实现”代替

    本文翻译自:Still getting warning : Configuration 'compile' is obsolete and has been replaced with 'implem ...

  4. Spring Security——org.springframework.security.oauth:spring-security-oauth2项目已过时解决方案

    问题描述 Maven <!--Spring Security--><dependency><groupId>org.springframework.boot< ...

  5. Spring Boot——AbstractWebSocketMessageBrokerConfigurer已过时解决方案

    问题描述 Spring Boot2.0及以上版本,编译器显示AbstractWebSocketMessageBrokerConfigurer已过时. 官方文档 https://docs.spring. ...

  6. Spring Boot——WebMvcConfigurerAdapter已过时解决方案

    问题描述 Spring Boot2.0及以上版本,编译器显示WebMvcConfigurerAdapter已过时. 问题分析 暂无. 解决方案 实现WebMvcConfigurer接口 @Config ...

  7. System.Configuration.ConfigurationSettings.GetConfig(string)”已过时 问题的解决方法

    在VS 2005中,经常会使用到ConfigurationSettings类来读取应用程序配置文件的信息,以获取数据库连接的字符串,但是,经常会出现如下的错误: 警告"System.Conf ...

  8. IntelliJ IDEA 源值1.5已过时,将在未来所有版本中删除

    转载自  IntelliJ IDEA 源值1.5已过时,将在未来所有版本中删除 原因: IDEA默认把项目的源代码版本设置为jdk1.5,目标代码设置为jdk1.5 解决方案: 1修改Maven的Se ...

  9. Java 8 Friday:大多数内部DSL已过时

    在Data Geekery ,我们喜欢Java. 而且,由于我们真的很喜欢jOOQ的流畅的API和查询DSL ,我们对Java 8将为我们的生态系统带来什么感到非常兴奋. Java 8星期五 每个星期 ...

  10. “此网站使用的安全性配置已过时,这可能会导致您的信息(例如密码、消息或信用卡卡号)”

    浏览器报错内容和截图: 您的连接存在安全隐患: 此网站使用的安全性配置已过时,这可能会导致您的信息(例如密码.消息或信用卡卡号) . 解决办法: 是将网站的TLS升级为安全的1.2

最新文章

  1. 2022-2028年中国B2C电子商务市场投资分析及前景预测报告
  2. Android开发中libs包下面的mips、armeabi、armeabi-v7a和x86
  3. oracle vm virtualbox安装centos并配置Java环境
  4. iOS开发 - OC - block的详解 - 基础篇
  5. docker 镜像_Docker镜像分层
  6. mysql 控制台全是_Mysql控制台命令大全
  7. ibatis的isequal_isequal ibatis
  8. 智慧交通day03-车道线检测实现07:车道曲率和中心点偏离距离计算+代码实现
  9. 设置环境变量的三种方法【转载】
  10. Leetcode 118 杨辉三角
  11. Linux基础命令---查找进程id
  12. itertools chain
  13. Android Material Design按钮样式设计
  14. java date sethours,如何替换不推荐使用的方法Date.setHours(int)?
  15. 6.Code First 数据注解(实体属性注解)
  16. 【HUST】网安|计算机网络安全实验|实验一 TCP协议漏洞及利用
  17. 数字图像处理(16): 图像颜色空间转换 和 OpenCV图像灰度化处理
  18. python的秘密_Shamir秘密共享方案 (Python)
  19. uniapp API 第三方服务
  20. 2020 第三届江西省高校网络安全技能大赛 线上赛Writeup

热门文章

  1. sql2012下载,安装,激活
  2. 手把手教做无人驾驶算法(二十六)--基于终端约束的MPC 控制
  3. vrp问题的java_VRP(车辆路径问题)的两种简单算法
  4. Java开发的学生考勤系统多人脸识别签到二维码签到
  5. 孙玄达叔:年薪75万的真实技术面试实践攻略(篇章二)
  6. 十大经典算法及其优化
  7. 用matlab化简三角函数方程组,matlab化简三角函数 matlab怎么样化简三角函数?
  8. ioccc代码分析(1)
  9. 谐波分析matlab仿真,教程:利用GUI对Simulink模型进行谐波分析
  10. vim打开bin文件