💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# 历史 软件分享自从软件诞生的那一天起就出现了。在计算机工业的早期,厂商认为竞争的优势在于对硬件的创新,因此并不太认真把软件当成商业资产看待。这些早期机器用户许多都是科学家或是技术人员,他们有能力自己修改和扩展随机附送的软件。有时用户不仅将补丁反馈给厂商,而且分发给相似机器的其他用户。厂商经常允许甚至鼓励这么做:在他们眼里,无论是哪一种渠道,对软件的改进都使得机器对其他的潜在消费者更有吸引力。 虽然今天的自由软件文化在很多方面都和早期相似,但是有两点重要的不同。首先,当时几乎没有硬件的标准—那是一个计算机设计创新的黄金时代,但是繁多的计算机架构也意味着所有的事情都无法同其他的兼通。因此,为一台机器编写的软件一般无法在另一台上工作。在一种特定的架构或是架构族上程序员需要专门的知识(今天程序员更多的是学习一种编程语言或是语言类型的专门知识,他们对他们的专业知识能移植任何一台遇到的机器上非常自信)。因为个人的专门知识总是针对一种特定类型的计算机,这些专门知识的积累能让计算机对他们以及同事变得越来越有趣。这就是为什么厂商对让特定机器的代码和知识尽可能广的得到传播感兴趣的原因。 其次,当时没有互联网。虽然当时对分享的法律约束比今天少,但却有更多的技术约束:也就是说,和说话相比,把数据从一个地方移到另一个地方是笨重不便的。在一些公司和实验室里员工之间,可以通过一些不错的小型的局域网共享信息。但当一个人想同不限地点的所有人分享时,问题依然存在。克服这些问题的途径*有*很多。有时独立的团体之间会互相联系,通过邮局寄送磁盘或是磁带,有时厂商扮演了补丁的中心情报交换所的角色。厂商还会帮助在大学里的早期计算机开发者,那里的气氛是鼓励知识传播的。但是数据传输所必须的物理媒体意味着分享总会遇到阻力,和(实际上的或是组织上的)距离成正比的阻力。现在这种广泛的,几乎没有阻力的分享,在那时还是不可能的。 ### 私有软件和自由软件的兴起 随着工业的成熟,接连发生了一系列相关的变化。众多硬件设计中的赢家逐渐清晰起来—有技术优势的赢家,有行销优势的赢家,或是两者结合的赢家。与此同时,被称为“高级”语言的编程语言的发展意味着一个用某种语言写成的程序能够转移到(“编译”)另一种类型的计算机上运行。硬件厂商不会忽视这其中的含义:现在客户无须再把自己捆绑在一种特定的计算机架构上就可以开展一个大型的软件工程项目。随着各类计算机的性能差异日益变小,以及低效率设计的消失,硬件成了厂商为未来利润率下降的唯一指望。原始的计算能力成了一种可替代的产品,而软件成为差异化优势。销售软件或至少将它视为硬件销售不可分割的一部分,看起来是一种不错的策略。 这意味着厂商必须开始更严格地在他们的代码上强制执行版权。如果用户之间继续简单地分享和修改代码,他们可能会独立完成一些改进,现在被供应商当成“附加价值”用来销售。更糟的是,分享代码可以落入竞争对手的手里。讽刺的是,这一切都发生在互联网即将破壳而出之时。就在无障碍的软件分享在技术是终于成为可能时,计算机行业内发生的变化则使它在经济上无法受到欢迎,至少计算机公司的观点是如此。供应商手段强硬,要么拒绝客户访问自己机器上的源代码,要么是通过保密协议使方便的共享成为不可能。 ### 有意识的反抗 虽然无障碍代码分享的世界正在慢慢凋零,但至少有一名程序员的心中保持着清醒。理查德·斯塔尓曼(Richard Stallman)在70年代和80年代早期一直为麻省理工学院的人工智能实验室工作,那里是代码分享黄金时代的黄金圣地。人工智能实验室有很强的“黑客精神”,[[3](#)]那里的人对分享为系统做出的任何改进有狂热的爱好。正如斯塔尓曼后来写到的: > *我们没有把我们的软件称为“自由软件”,因为那时这个术语还不存在,但它确实是。无论外面的大学或是公司来的人来索要程序,我们都很高兴这么做。如果你看到在用的一个少见还有趣的程序,你总可以要求看源代码,所以你能读它,修改它,或者用拆取部分写一个新程序。 * > (来自**[http://www.gnu.org/gnu/thegnuproject.html](http://www.gnu.org/gnu/thegnuproject.html)**) 1980年之后不久工业界发生的变化最终影响到了人工智能实验室,斯塔尓曼周围伊甸园式的社区坍塌了。一家创业公司挖走了很多实验室的程序员去开发一个操作系统,这个系统同实验室正在开发的非常相似,但使用了独占许可证。与此同时,人工智能实验室购买了带有私有操作系统的新设备。 斯塔尓曼见一叶落而知秋: > *那个时代的现代化计算机,比如VAX或68020都有自己的操作系统,但都不是自由软件:为了得到一份能运行的拷贝,你甚至得签署一份保密协议。* > *这就是说使用一台计算机的第一步是承诺不帮你的邻居。一个互助的社区是被禁止的。私有软件的拥有者定下了规矩,“如果你和你的邻居分享了,你就是强盗。如果你想要改变,来祈求我们做吧。”* 此时,他性格中的怪僻萌动了,他决定反抗这种趋势。他既不想继续留在人去楼空的人工智能实验室,也不想在一家新公司里写代码,因为他写出的代码会被锁在保密箱里,最终他从实验室辞职,随后创建了GNU项目和自由软件基金会(FSF)。GNU[[4](#)]的目标是开发一个完全自由和开放的操作系统和配套的应用软件,它们的用户永远不会阻止去破解或是分享它们的修改。本质上他是要重建人工实验室内被摧毁的那些东西,但是这一次是在全世界的规模上,并且还要避免导致人工实验室的文化被动摇破裂的那些弱点。 除了新操作系统的工作,斯塔尓曼还设计了一套确保他的代码无限自由的版权许可证。GNU通用公共许可证(GPL)是法律博弈中的奇招:它声明允许无限制地复制和修改代码,同时拷贝和派生产物(即修改版本)必须在原始版本的相同许可证下发布,不得附加限制。实际上,它用版权法去达到一个同传统版权法相反的目的:取消对软件分发的限制,它阻止*任何人*,甚至是作者本人对此的限制。对斯塔尓曼来说,这要比简单地把他的代码分发到公共领域好得多。因为在公共领域,一份实际的拷贝有可能被包含在一个私有程序中(这样的事情我们在使用宽松的版权许可证的代码中听到很多了)。虽然这种包含不会在任何方面减弱原始代码的持续可用性,但它意味着斯塔尓曼的努力可能会帮助敌人—私有软件。GPL为自由软件提供了一套保护机制,因为它阻止了非自由软件利用GPL许可证下代码的优势。GPL同其他自由软件许可证关系的详细讨论在[Chapter 9, *许可证,版权和专利*](# "Chapter 9. 许可证,版权和专利")。 在很多程序员的帮助下──其中有些是认同斯塔尓曼的思想体系,有些只是为了能看到自由软件的代码──GNU项目开始发布操作系统中最重要组成部分的自由替代品。因为计算机硬件和软件已经高度的标准化了,使用GNU替代其他的非自由操作系统成为可能,许多人也这么做了。GNU文字编辑器(Emacs)和C编译器(GCC)特别的成功,它们获得大量忠实的拥护者,这不是因为其理想主义的基础,而是因为其技术价值。约在1990年GNU已经生产了一个自由操作系统的大部分,除了内核—实际负责引导计算机、管理内存、磁盘和系统其他资源的部分。 不幸的是,GNU项目选择的内核设计要比预想的更难实现。随后的延期使得自由软件基金会没能及时地发布一个彻底的自由操作系统。这缺失的部分最终由一个芬兰的计算机科学系的大学生Linus Torvalds补完,在遍布全世界的志愿者的帮助下他用更加保守的设计完成了一个自由内核。他将其命名为Linux,当把内核同GNU项目的现存软件组合在一起,结果就是一个完全自由的操作系统诞生了。第一次,你不再需要任何的私有软件来启动和使用你的计算机。[[5](#)] 这个操作系统上的很多软件都不是GNU项目的产物。实际上,GNU不是唯一的开发自由操作系统的团体(例如,当时最终发展为NetBSD和FreeBSD的代码已经开始编写)。重要的不仅仅是自由软件基金会产出的代码,而且是它们的政治修辞。把自由软件当成一个目标而并非一种手段讨论,让那些对此并*没有*政治意识的程序员们很为难。即使那些并不认同自由软件基金会的程序员也不得不面对这些问题,只要他们处于不同的位置。自由软件基金会通过在他们的代码上附带有关GPL和其他文字的信息,成功地扮演了鼓动家的角色。随着他们的代码广泛地被分发,思想也随之流传。 ### 意外的反抗 在自由软件运动的早期还发生了很多其他事情,其中很少有如斯塔尓曼的GNU项目般清晰的思想体系。其中一个最重要的是*伯克利软件发行版*(Berkeley Software Distribution,*BSD*)一个Unix操作系统的重新实现—这个项目可以一直追溯到1970年代晚期AT&T公司内由加州大学伯克利分校负责的一个松散的私有研究项目。BSD并没有什么要程序员们联合起来并且共同认可的政治信条,他们通过高度分散地开发方式从零开始重写了Unix命令行工具和代码库,最终是操作系统内核本身,这一切的大部分都是由志愿者完成的,用天才和热情*实践*了这个信念。BSD项目成了非意识形态的自由软件开发的主要例子,并且他们为那些在开源世界继续保持活动的开发者提供了训练场地。 另一个合作开发的重镇是*X Window System*,一个由MIT联合其他有兴趣为客户提供窗口系统的硬件厂商在80年代中期开发的自由的网络透明的图形计算环境。和私有软件恰恰相反,X许可证故意允许在自由核心之上建立私有扩展—每一个成员都需要机会加强默认的X发布,这样就会获得了超越其他成员的竞争优势。X Windows[[6](#)]自身是自由软件,但其主要目的是为了平衡商业利益竞争中的差距,对终结私有软件的统治没有丝毫的诉求。还有一个早于GNU项目很多年的例子是TeX,Donald Knuth的自由排版系统。他使用的许可证允许任何人修改和分发代码,但如果未能通过一个非常严格的兼容性测试,则不允许冠以"TeX"的名称(这是自由许可证的“商标保护”的一个例子,更多的讨论在[Chapter 9, *许可证,版权和专利*](# "Chapter 9. 许可证,版权和专利"))。Knuth并非对软件应该是自由还是私有的问题有什么意见或是其他诸如此类的目的,他需要一个更好的排版系统是为了完成他*真正的*目标—一本计算机编程的书—当书完成了,没有理由不把他的系统公之于众。 虽然没有列出每一个项目和每种许可证,但还是可以确信,在1980年代末,出现了许多基于各类许可证的项目。许可证的多样性反映了动机的多样性。即使是一些选择GNU GPL的程序员也没有和GNU项目同样强烈的意识形态动机。尽管他们很享受为自由软件工作,但是许多开发者并不把私有软件视作社会恶魔。确实有些人是受到道德冲动的驱使要去消灭“囤积软件”(斯塔尓曼对非自由软件的称呼)的世界,但其他人更多的是出于对技术的狂热,或对能和志同道合者合作感到愉悦,甚至简单地出于人类对荣耀的渴望。大体上说,这些不同的动机并没有造成冲突。部分原因是和其他的创造性活动如散文和视觉艺术不同,软件必须通过半客观测试才能成功:它必须能运行,去除绝大部分的bug。这自动地给了一个项目的全部参与者一个共同的背景,一个理由,一个无需为除了技术以外的问题担心的协同工作的框架。 开发者们还有另一个团结互助的原因:自由软件世界生产了很多质量非常高的代码。要么是令最接近的非自由对手都望尘莫及,要么是可以匹敌,或至少价廉物美。虽然也许会有一些人是出于严格的意识形态的背景才使用自由软件,但绝大部分人是因为它更出色才使用自由软件的。在这些人中,总有一定比例的人乐意将自己的时间和技术贡献出来帮助维护和改进软件。 这种产出优秀代码的趋势并非是普遍的,但在全球的自由软件项目出现的频率越来越高。这引起高度依赖软件质量的商业公司的关注。其中的许多发觉他们其实早已经在日常的操作中使用自由软件,只是并没有意识到(管理层并不总是能意识到IT部门做的每件事)。公司开始在自由软件项目中扮演越来活跃和公开的角色,他们向自由软件的发展捐助时间和设备,有时甚至是直接的资助。在最好的情形下,这些投资能获得数倍的回报。这些赞助商只需要为少数全职投入的专家级程序员支付工资,获得的回报却包括了无偿的志愿者和领取其他公司薪水的程序员的*全部*工作成果。 ### “自由”还是“开源” 随着商业世界越来越多的关注自由软件,程序员们面临新出现的问题。首先是单词“自由”本身。第一次听说“自由软件”(free software,在英语中free既有自由的意思,也有免费的意思)这个词的时候,许多人都错把它理解成“免费软件”。确实大部分的自由软件都是免费的,[[7](#)]但不是所有的免费软件都是自由的。例如在1990年代的浏览器大战中,为了抢占市场份额,网景和微软都无偿地发布他们的网络浏览器。这些浏览器都不是“自由软件”。你无法得到源代码,即使得到了也没有权利修改和再发布。[[8](#)]你唯一能做的是下载一个运行文件,然后运行。这些浏览器的自由不会比从商店里购买的盒装软件更多;它们只是有较低的价格。 围绕自由一词发生的混乱,很不幸地完全是由于英语本身的多义性造成的。大部分的其他语种对“免费”和“自由”明确地区别对待(例如在罗曼斯语中*gratis*和*libre*的差别对听众而言是一清二楚的)。但英语是互联网事实上的桥梁语言,所以一个英语的问题在某种程度上来说即是每个人的问题。围绕自由一词的误解是如此之广,以至于最终自由软件程序员们发明了一个公式来应对:“It's *free* as in*freedom*—think *freespeech*, not *free beer*。”但一遍又一遍的解释还是让人厌倦。许多程序员认为,即使加以解释,对自由的岐义正在阻碍公众对这种软件的理解。 但实际的问题更复杂。free一词承载了一个无可避免的道德内涵:如果自由是它自身的最终目标,它同自由软件是否被更多人接受,是否能从商业中赚取更多的利益无关。这个动机唯一的光明面从根本上说既不是技术也不是商业,而是道义。此外,“free as in freedom”的定位也迫使那些既想在生意的某一方面支持实用的自由程序,而另一方面又继续推销私有软件的公司陷入前后矛盾的境地。 本已陷入身份危机的社区又迎来了这些困境。如果说自由软件运动有一个总体目标的话,那些实际上写自由软件的程序员们并不都为了同一个目标而工作。甚至于从一个极端走向另外一个极端的观点会引起误解,因为我们会错误地以为只有两种极端的观点,而实际上存在着多层次的看法。然而,如果我们忽略其间的细微差别,他们都可以被归入两类信念。一个团体追随斯塔尓曼的观点,认为共享和修改的自由是最要的事,因此如果你不再谈论自由,你就忽略了核心问题。另一些人认为软件本身才是最重要的因素,并且对公开地宣布私有软件本质上是坏的而感到不舒服。部分的,但非全部自由软件程序员相信作者(或是雇主,如果是有偿工作)*应该*有权利控制分发的条款,选择何种条款不应该受到道德的审问。 在很长时间里这些分歧并不需要认真对待,但自由软件在商业世界里的快速成功使得这些问题无法再回避。1998年一群程序员结成一个团体,也就是后来的开源促进会(Open Source Initiative,OSI)[[9](#)]创造了开源一词来替代“自由”。OSI认为“自由软件”不仅有潜在的岐义,而且“自由”一词本身就是一系列问题的根源。运动本身需要一个在商业世界里的营销程序,而谈论道德和社会公益在公司董事会里是不受欢迎的。用他们自己的话说: > *开源宣言是自由软件的一个营销程序。用务实的基础推动自由软件远比慷慨激昂大谈理想有用得多。成功的本质没有变,失败的象征和看法已经变了。 ...* > *需要告知大多数技术人的不是开源的概念,而是名字。为什么我们不再像从前那样称之为“自由软件”呢?* > *一个直接的原因是“自由软件”一词容易以一种导致冲突的方式被误解。 ...* > *但真正更名的原因是营销上的。我们现在想打入商业世界。我们有成功的产品,但在过去我们的定位是可怕的。自由软件一词被商人们误解了,他们把这种描述理解成反商业主义,甚至更糟,贼。* > *主流公司的CEO和CTO们绝不会买"自由软件"。但如果我们保持非常相似的传统,人还是那些,相同的自由软件许可证,只是换了一个“开源”标签的话?他们会买。* > *一些黑客觉得这很难相信,但那是因为他们的技术化思维已经僵化,被条款所束缚,不能理解当你推销某样东西时形象有多重要。* > *做营销时,外表是很现实的问题。我们打算用什么样的形象来消除同公司打交道的障碍,和我们的行为,我们的信念,我们的软件同样重要。* > (来自**[http://opensource.feratech.com/advocacy/faq.php](http://opensource.feratech.com/advocacy/faq.php)**和**[http://opensource.feratech.com/advocacy/case_for_hackers.php#marketing](http://opensource.feratech.com/advocacy/case_for_hackers.php#marketing)**) 通过上面的文字我们可以一窥争论的冰山一角。它提到了“我们的信念”,但是巧妙地回避了这些信念到底是什么。对有些人呢,这种信念也许是认为开放的开发过程将产出更好的代码,对其他人也许是认为所有的信息都应该共享。他们用到了“贼”一词(据推测是)影射非法的复制—许多人反对这一点,认为如果原持有人随后仍然保留原件就不能视作贼。这里有一个明显的暗示说自由软件运动被错误地划入了反商业主义,但它小心翼翼地回避了这种归类是否有现实依据的问题。 其中没有一条可以说明OSI的网站是自相矛盾或是误导的。确实没有。相反,这个例子表明了OSI所主张的,正是自由软件运动所缺少的,也就是好的营销,此处的“好”指的是“能在商业世界生存”。开源宣言给许多人带来他们一直寻找的—一套将自由软件作为开发的方法论和商业策略而不是道德圣战的语汇。 开源促进会的出现改变了自由软件的面貌。它将长久存在的矛盾摆上了桌面,迫使运动承认与外部一样,其自身内部同样有派系斗争。由于大部分的项目都包括了来自两个阵营的程序员,加上一些很难明确归类的参与者,如今二者都已经找到了共同的基础。这不意味着人们从不谈论道德动机—例如,有时人们会讨论传统的“黑客精神”的流失的问题。但是很少有自由软件/开源开发者在一个项目中公开地质疑他人的基本动机。作出贡献远比贡献者本身重要。如果有人代码写的不错,你不会问他们到底是出于道德原因还是因为雇主付给他们工资或是为了在推荐信上添加砝码,或其他什么原因。你从技术角度评估贡献,从技术角度反馈。甚至Debian这样毫不讳言政治的组织(他们的目标是提供一个100%自由的操作环境),也已经不再那么严格的对待集成非自由代码和同目标不一致的程序员共事了。 [[2](#)] SourceForge.net,一个著名的代码存放站点,截至到2004年4月中旬,总共有79225个项目注册。虽然这只是选择使用SourceForge的项目数量,但已经非常接近互联网上全部自由软件项目的数量了。 [[3](#)] 斯塔尓曼的“黑客”指的是“喜欢程序并且喜欢用它炫耀聪明的人”,不是近些年来的新含义“非法进入计算机的人。” [[4](#)] “GNU's Not Unix”的缩写,扩展后短语中的GNU其实是同一意思。 [[5](#)] 从技术上来说Linux不是第一个。在Linux之前不久已经有了一个能在IBM兼容机上运行的自由操作系统,386BSD。然而386BSD的启动和运行还不太稳定。Linux的飞速发展不仅因为它是自由软件,而是因为安装之后你有更大的几率能启动计算机 。 [[6](#)] 正式的称呼是“X Windows System”,但实际中人们通常称之为“X Windows”,因为三个单词太繁琐了。 [[7](#)] 发放自由软件的人可以收取一定的拷贝费用,但是由于他无法阻止受领者去免费地再发放,价格还是会很快接近于零。 [[8](#)] 网景Navigator浏览器的源代码最终*在*1998年在一个开源许可证下发布,成为后来的Mozilla网络浏览器的基础。参见[http://www.mozilla.org/](http://www.mozilla.org/)。 [[9](#)] OSI的主页[http://www.opensource.org/](http://www.opensource.org/)。