什么是 GNU?
内容将混合着“什么是 GNU 项目”——历史、动机、各个部分的状态,换句话说就是一般性的东西,以及更深入地了解 GNU 软件的各个“主要”部分,例如关于 gawk、GNU make、Emacs 等的专栏。 如果可能,我将征求各个程序主要作者的文章,在这种情况下,我将更多地担任编辑的角色。 偶尔,我会专门用一个专栏来介绍一些可能不属于 GNU 项目的其他自由软件,但这些软件很可能引起Linux Journal读者的兴趣。 许多这些程序都以与 GNU 程序相同的条款分发。
虽然我总是努力提供准确、最新的信息,但本专栏绝不代表自由软件基金会的官方声明和/或政策。
这里有一些问题以及对应的答案。
问:什么是 GNU 项目?
答:GNU 项目是自由软件基金会 (FSF) 正在进行的努力,旨在创建一个完整的、可用的、可自由重新分发的软件开发环境,包括操作系统和实用程序。 特别是,FSF 选择创建一个 Unix 克隆。 GNU 源代码受版权保护,使用一种许可证,该许可证要求您在分发二进制文件时分发或提供源代码。
截至撰写本文时,除了内核之外,基本上所有内容都已完成。 未来的专栏将列出已完成的所有工作; 希望另一个未来的专栏将讨论 GNU 内核(称为“Hurd”)的状态。
顺便说一句,GNU 代表“GNU's Not Unix”(GNU 不是 Unix)。 `G' 发音,它不是静音的。
问:什么是 FSF?
答:自由软件基金会是一家非营利公司,其目标是推广自由软件的使用。 为了帮助实现这一目标,它启动了上述 GNU 项目。
FSF 由 Richard Stallman 和其他几个人于 1983 年左右创立。 它有一些全职员工,还有大量志愿者致力于 GNU 项目。 向 FSF 捐款在美国可以免税。
可以通过以下方式联系 FSF:
Free Software Foundation675 Massachusetts AvenueCambridge, MA 02139-3309USAVoice: +1-617-876-3296Fax: +1-617-492-9057Email, general info: gnu@prep.ai.mit.edu Email, to order doc and/or media: fsf-order@gnu.ai.mit.edu
在日本订购软件和/或文档:japan-fsf-orders@prep.ai.mit.edu FAX (in Japan):0031-13-2473 (KDD)0066-3382-0158 (IDC)
问:“自由”一词的含义是什么?
答:按照 Richard Stallman 和 FSF 的用法,“自由”一词意味着软件的源代码可以自由获取。 它不意味着“没有金钱成本”。 这常常让不熟悉 FSF 及其目标的人感到困惑。
FSF 通过 GNU 通用公共许可证或 GPL 来许可其源代码,从而确保其源代码可用。 FSF 源代码不是公共领域。 它受版权保护,并以允许您修改代码的许可证分发。 如果您分发 FSF 程序的修改版本(例如,以二进制形式),则 GPL 要求您以与原始源代码相同的条款分发您对代码的修改。 如果您从不分发您的修改,那么也没有任何东西要求您分发您的源代码。
GPL 希望成为未来专栏的主题。 与此同时,如果您有 Linux 系统,您无疑会在某个地方拥有 GPL 的副本,可能在一个或多个名为 COPYING 的文件中。
问:为什么 GNU 与 Linux 相关?
答:公平地说,如果没有 GNU 项目,您的 Linux 系统就不会像今天这样成为一个可用、相当完整的环境。 基本上所有的实用程序都来自 GNU 项目——C 编译器、make、awk、shell、编辑器,几乎所有的实用程序都是 GNU 版本。
随着 GNU 开发人员更新程序,您应该有兴趣获取并安装这些新版本,因为它们很可能包含错误修复、性能增强和/或新功能。
问:Arnold Robbins 是谁?他为什么有资格撰写这个专栏?
答:我是一名专业程序员,自 1981 年以来一直使用各种 Unix 系统。 自 1988 年以来,我一直作为志愿者参与 GNU 项目。 我主要使用的程序是 gawk——GNU Awk。 我既是该程序的合著者,又是随附手册的主要作者,该手册记录了 Awk 语言和 gawk 实现。 我还在 Shell Utilities 包中编写了一些较小的杂项程序。
我也是许多主要 GNU 程序(例如 C 和 C++ 编译器 ([ all of these in cw ], gcc, g++)、调试器 gdb 以及 grep 和 diff 套件)的用户(和调试器)。
作为开发人员和用户,我与许多其他 GNU 工具开发人员互动,总的来说,我试图“密切关注”GNU 项目的脉搏。
但是,由于我既不是 FSF 的受薪员工也不是官员,因此我在本专栏中撰写的任何内容都是我对事物的个人解释。 如果您对某事有疑问,请务必直接联系 FSF; 切勿只听我的话。
问:GNU 项目的历史是什么?
答:Richard Stallman 于 1983 年启动了 GNU 项目。发布的第一个程序是 Emacs 和 gdb,即调试器。 从那时起,该项目不断发展壮大。 截至撰写本文时,除了内核的中间三分之一之外,基本上所有内容都已存在并且相当稳定。 还需要编写大量文档,并且内核的工作正在进行中。 联系 gnu@prep.ai.mit.edu 获取仍需启动的任务列表。
问:Richard Stallman 为什么启动 GNU 项目?
答:让我们让 RMS(他为人所知)自己回答这个问题。 下面包含一份名为“GNU 宣言”的文档。 它最后一次修改是在 1985 年。此版本来自 Emacs 19.22 发行版。
GNU,代表 Gnu's Not Unix,是我正在编写的完整 Unix 兼容软件系统的名称,以便我可以将其免费赠送给所有可以使用它的人。 其他几位志愿者正在帮助我。 非常需要时间、金钱、程序和设备的贡献。
到目前为止,我们有一个 Emacs 文本编辑器,带有用于编写编辑器命令的 Lisp、一个源代码级调试器、一个与 yacc 兼容的解析器生成器、一个链接器和大约 35 个实用程序。 一个 shell(命令解释器)即将完成。 一个新的可移植优化 C 编译器已经编译了自己,并且可能会在今年发布。 一个初始内核已经存在,但还需要更多功能来模拟 Unix。 当内核和编译器完成后,就可以分发适合程序开发的 GNU 系统。 我们将使用 TeX 作为我们的文本格式化程序,但正在开发 nroff。 我们还将使用免费的、可移植的 X 窗口系统。 在此之后,我们将添加一个可移植的 Common Lisp、一个 Empire 游戏、一个电子表格和数百个其他东西,以及在线文档。 我们希望最终提供通常与 Unix 系统一起提供的所有有用的东西,以及更多。
GNU 将能够运行 Unix 程序,但不会与 Unix 相同。 我们将根据我们在其他操作系统上的经验进行所有方便的改进。 特别是,我们计划拥有更长的文件名、文件版本号、防崩溃文件系统、文件名完成(可能)、终端无关的显示支持,以及最终可能通过 Lisp 的窗口系统,通过该系统,几个 Lisp 程序和普通的 Unix 程序可以共享一个屏幕。 C 和 Lisp 都将可用作系统编程语言。 我们将尝试支持 UUCP、MIT Chaosnet 和 Internet 协议进行通信。
GNU 最初针对具有虚拟内存的 68000/16000 类机器,因为它们是最容易在其上运行的机器。 使它在较小机器上运行的额外努力将留给想要在其上使用它的人。
为避免可怕的混乱,请在 `GNU' 这个词中发音 `G',当它指的是这个项目的名称时。
我是谁?
我是 Richard Stallman,原始的、被广泛模仿的 EMACS 编辑器的发明者,以前在 MIT 的人工智能实验室工作。 我在编译器、编辑器、调试器、命令解释器、不兼容分时系统和 Lisp 机器操作系统方面进行了广泛的工作。 我在 ITS 中率先实现了终端无关的显示支持。 从那时起,我为 Lisp 机器实现了一个防崩溃文件系统和两个窗口系统,并设计了第三个窗口系统,现在正在实现; 这一个将被移植到许多系统,包括在 GNU 中使用。[历史记录:窗口系统项目未完成; GNU 现在计划使用 X 窗口系统。]
我认为黄金法则是,如果我喜欢一个程序,我必须与喜欢它的其他人分享它。 软件销售商希望分割用户并征服他们,让每个用户都同意不与他人分享。 我拒绝以这种方式破坏与其他用户的团结。 我不能问心无愧地签署保密协议或软件许可协议。 多年来,我一直在人工智能实验室工作,以抵制这种倾向和其他不友好行为,但最终它们走得太远了:我无法留在一个为我违背我的意愿做这些事情的机构中。
为了我可以继续使用计算机而不蒙受耻辱,我决定将足够的自由软件放在一起,以便我能够摆脱任何不自由的软件。 我已从 AI 实验室辞职,以拒绝 MIT 任何阻止我赠送 GNU 的法律借口。
Unix 不是我理想的系统,但它还不错。 Unix 的基本功能似乎很好,我认为我可以填补 Unix 所缺乏的东西而不会破坏它们。 并且与 Unix 兼容的系统对于许多其他人采用来说将是方便的。
我发现许多其他程序员对 GNU 感到兴奋并希望提供帮助。
许多程序员对系统软件的商业化感到不满。商业化可能会让他们赚更多的钱,但同时也让他们觉得与程序员群体之间存在冲突,而不是同志情谊。程序员之间友谊的根本行为是程序共享;而现在常用的营销方式实际上禁止程序员们像对待朋友一样对待他人。软件购买者必须在友谊和遵守法律之间做出选择。自然,许多人认为友谊更重要。但那些相信法律的人往往对这两种选择都感到不安。他们变得愤世嫉俗,认为编程只是赚钱的一种方式。
通过开发和使用 GNU 而不是专有程序,我们可以热情地对待每个人,并遵守法律。此外,GNU 还可以作为一个榜样来激励他人,一面旗帜来团结他人加入我们共享的行列。这可以给我们一种和谐的感觉,如果使用非自由软件,这种感觉是不可能存在的。对于大约一半与我交谈过的程序员来说,这是一种金钱无法替代的重要幸福感。
我正在向计算机制造商寻求机器和资金的捐赠。我正在向个人寻求程序和工作的捐赠。
如果您捐赠机器,您可以期待的一个结果是 GNU 将很快在这些机器上运行。这些机器应该是完整的、随时可用的系统,经批准可在住宅区使用,并且不需要复杂的冷却或电源。
我发现很多程序员都渴望为 GNU 贡献兼职工作。对于大多数项目来说,这种兼职的分布式工作很难协调;独立编写的部分可能无法协同工作。但对于替换 Unix 的这个特定任务来说,这个问题并不存在。一个完整的 Unix 系统包含数百个实用程序,每个实用程序都有单独的文档。大多数接口规范都由 Unix 兼容性固定。如果每个贡献者都可以编写一个与 Unix 实用程序兼容的替代品,并使其在 Unix 系统上代替原始实用程序正常工作,那么这些实用程序放在一起时就会正常工作。即使考虑到墨菲定律可能会造成一些意想不到的问题,组装这些组件也是一项可行的任务。(内核需要更紧密的沟通,并将由一个小型、紧密的团队进行开发。)
如果我收到捐款,我或许能够雇用一些全职或兼职人员。按照程序员的标准,工资不会很高,但我正在寻找那些认为建立社区精神与赚钱同样重要的人。我认为这是一种让专注的人能够全力投入到 GNU 开发工作中的方式,从而免去他们以其他方式谋生的需要。
一旦 GNU 完成,每个人都可以免费获得良好的系统软件,就像空气一样。
这意味着不仅仅是节省了每个人的 Unix 许可费用。这意味着可以避免大量浪费的系统编程工作重复。这些精力可以转而用于推动技术发展。
完整的系统源代码将提供给每个人。因此,需要更改系统的用户将始终可以自由地自己进行更改,或者雇用任何可用的程序员或公司来为他进行更改。用户将不再受拥有源代码并处于唯一更改位置的程序员或公司的摆布。
学校将能够通过鼓励所有学生学习和改进系统代码来提供更具教育意义的环境。哈佛大学的计算机实验室过去有一项政策,即如果程序的源代码未公开展示,则不允许将其安装在系统上,并且通过实际拒绝安装某些程序来维护该政策。我对此深受启发。
最后,关于谁拥有系统软件以及人们有权或无权对其做什么的考虑的负担将会解除。
让人们为使用程序付费的安排,包括复制许可,总是会给社会带来巨大的成本,因为需要通过繁琐的机制来确定一个人必须支付多少费用(即哪些程序)。而且只有警察国家才能强迫每个人遵守这些规则。想象一下一个太空站,空气必须以巨大的成本制造:按每升空气向每个呼吸者收费可能是公平的,但整天整夜戴着计量气体面罩是不可容忍的,即使每个人都能负担得起空气费。而且到处都是电视摄像头,看看你是否摘下面罩,这太离谱了。最好用人头税来支持空气工厂,然后扔掉面罩。
复制程序的全部或部分对程序员来说就像呼吸一样自然,而且同样富有成效。它应该像呼吸一样自由。
“如果是免费的,就不会有人使用它,因为这意味着他们无法依赖任何支持。”
“你必须为程序收费才能支付提供支持的费用。”
如果人们宁愿为 GNU 加上服务付费,也不愿免费获得没有服务的 GNU,那么一家专门为免费获得 GNU 的人提供服务的公司应该是盈利的。
我们必须区分真正的编程工作形式的支持和仅仅的扶持。前者是人们无法从软件供应商那里依赖的东西。如果你的问题没有足够多的人遇到,供应商会让你滚蛋。
如果你的业务需要能够依赖支持,唯一的办法就是拥有所有必要的源代码和工具。然后你可以雇用任何可用的人来解决你的问题;你不会受任何个人的摆布。对于 Unix 来说,源代码的价格让大多数企业都无法考虑这一点。对于 GNU 来说,这将很容易。仍然有可能没有可用的合格人员,但这个问题不能归咎于分发安排。GNU 并不能消除世界上所有的问题,只能消除其中一些。
同时,对计算机一无所知的用户需要扶持:为他们做他们自己可以轻松完成但不知道如何做的事情。
此类服务可以由仅销售扶持和维修服务的公司提供。如果用户确实宁愿花钱购买带有服务的产品,他们也愿意在免费获得产品后购买服务。服务公司将在质量和价格上展开竞争;用户不会被束缚在任何特定公司。同时,我们这些不需要服务的人应该能够使用该程序而不必为服务付费。
“如果不做广告,你就无法接触到很多人,你必须为程序收费才能支持广告。”
“为人们可以免费获得的程序做广告是没有用的。”
有各种形式的免费或非常廉价的宣传,可以用来告知大量计算机用户关于像 GNU 这样的东西。但可能确实可以通过广告来接触到更多的微型计算机用户。如果真是这样,一家为 GNU 提供复制和邮寄服务的公司应该足够成功,能够支付广告费用以及更多。这样,只有从广告中受益的用户才会为广告付费。
另一方面,如果很多人从朋友那里得到 GNU,而这些公司没有成功,这将表明广告实际上不是传播 GNU 所必需的。为什么自由市场倡导者不想让自由市场来决定这一点呢?
“我的公司需要一个专有操作系统才能获得竞争优势。”
GNU 将使操作系统软件脱离竞争领域。你将无法在这个领域获得优势,但你的竞争对手也无法超越你。你和他们将在其他领域展开竞争,同时在这个领域互惠互利。如果你的业务是销售操作系统,你不会喜欢 GNU,但这对你来说很糟糕。如果你的业务是其他业务,GNU 可以让你免于被推入销售操作系统的昂贵业务。
我希望看到 GNU 的开发得到许多制造商和用户的捐赠支持,从而降低每个人的成本。
“程序员难道不应该为他们的创造力得到奖励吗?”
如果有什么值得奖励的,那就是社会贡献。创造力可以是一种社会贡献,但前提是社会可以自由地使用结果。如果程序员应该因为创造创新程序而得到奖励,那么同样,如果他们限制使用这些程序,他们也应该受到惩罚。
“程序员不应该能够要求对他的创造力进行奖励吗?”
渴望为工作获得报酬,或寻求最大化自己的收入,只要不使用具有破坏性的手段,就没有什么不对。但是,今天软件领域中常用的手段是基于破坏的。
通过限制用户对程序的使用来从他们那里榨取金钱是具有破坏性的,因为这些限制减少了程序可以使用的数量和方式。这减少了人类从该程序中获得的财富。当有意选择进行限制时,有害后果是有意的破坏。
一个好公民不使用这种破坏性手段来变得更富有的原因是,如果每个人都这样做,我们都会因相互破坏而变得更穷。这就是康德伦理学;或者,黄金法则。因为我不喜欢如果每个人都囤积信息所造成的后果,所以我认为一个人这样做是错误的。具体来说,渴望因自己的创造力而获得奖励并不能证明剥夺整个世界的所有或部分创造力是正当的。
“程序员难道不会饿死吗?”
我可以回答说,没有人被迫成为一名程序员。我们大多数人都无法通过站在街上做鬼脸来获得任何报酬。但因此,我们并没有被判处终生站在街上做鬼脸并饿死的命运。我们做其他事情。
但这并不是正确的答案,因为它接受了提问者隐含的假设:如果没有软件的所有权,程序员不可能得到一分钱报酬。据说这是全部或全无。
程序员不会饿死的真正原因是,他们仍然可以因为编程而获得报酬;只是没有现在那么多。
限制复制并不是软件业务的唯一基础。它是最常见的基础,因为它带来了最多的钱。如果它被禁止或被客户拒绝,软件业务将转向其他现在较少使用的组织基础。总是存在多种组织任何类型业务的方式。
在新基础上,编程可能不会像现在这样有利可图。但这并不是反对变革的理由。销售员现在挣的工资并不被认为是不公正的。如果程序员挣同样的钱,那也不是不公正的。(实际上,他们仍然会挣得更多。)
“人们难道没有权利控制他们的创造力如何被使用吗?”
“控制自己想法的使用”实际上构成了对他人生活的控制;它通常被用来使他们的生活更加困难。
仔细研究过知识产权问题的人(例如律师)说,没有知识产权的内在权利。政府承认的所谓的知识产权是由特定的立法行为为特定目的而创建的。
例如,建立专利制度是为了鼓励发明家公开其发明的细节。其目的是帮助社会而不是帮助发明家。当时,17 年的专利有效期与技术发展速度相比很短。由于专利只是制造商之间的问题,对他们来说,许可协议的成本和精力与建立生产线相比很小,因此专利通常不会造成太大的损害。它们不会阻碍大多数使用专利产品的人。
在古代,版权的概念并不存在。当时,作者经常在非小说作品中大量抄袭其他作者。这种做法很有用,而且是许多作者的作品得以部分保存的唯一途径。版权制度的创立明确地是为了鼓励创作。在其发明的领域——书籍,只能通过印刷机经济地复制——它几乎没有造成伤害,也没有阻碍大多数阅读书籍的人。
所有的知识产权都只是社会授予的许可,因为人们(正确或错误地)认为,社会作为一个整体将从授予这些许可中受益。但在任何特定情况下,我们都必须问:授予这种许可真的让我们变得更好吗?我们正在许可某人做什么样的行为?
今天程序的情况与一百年前的书籍截然不同。复制程序最简单的方式是从一个邻居到另一个邻居,程序既有源代码又有不同的目标代码,以及程序是被使用而不是被阅读和欣赏,这些因素结合在一起,造成了这样一种局面:执行版权的人在物质和精神上都损害了整个社会;在这种情况下,无论法律是否允许,一个人都不应该这样做。
“竞争使事情做得更好。”
竞争的范例是一场赛跑:通过奖励获胜者,我们鼓励每个人跑得更快。当资本主义真正以这种方式运作时,它做得很好;但是它的捍卫者错误地认为它总是以这种方式运作。如果赛跑者忘记了奖励的目的,而只想着不惜一切代价获胜,他们可能会找到其他策略——例如,攻击其他赛跑者。如果赛跑者打起来,他们都会迟到。
专有和秘密软件在道德上相当于拳脚相加的赛跑者。可悲的是,我们唯一的裁判似乎并不反对打架;他只是规范它们(“每跑十码,你可以踢一脚。”)。他真的应该阻止他们,并惩罚那些甚至试图打架的赛跑者。
“如果没有金钱激励,难道每个人都会停止编程吗?”
事实上,许多人会完全没有金钱激励地进行编程。编程对某些人来说具有不可抗拒的吸引力,通常是那些最擅长编程的人。有很多专业的音乐家,即使他们没有希望以此为生,也会继续从事音乐事业。
但实际上,这个问题虽然经常被问到,但不适合这种情况。程序员的报酬不会消失,只会减少。所以正确的问题是,是否会有人以减少的金钱激励来编程?我的经验表明他们会的。
十多年来,世界上许多最优秀的程序员在人工智能实验室工作,薪水远低于他们在其他任何地方可以获得的薪水。他们得到了许多非金钱上的回报:例如,名誉和赞赏。而且创造力也很有趣,本身就是一种回报。
然后,当他们有机会以更高的薪水做同样有趣的工作时,他们中的大多数人离开了。
事实表明,人们会出于金钱以外的原因进行编程;但是,如果同时有机会赚很多钱,他们就会开始期望并要求它。低薪机构在与高薪机构的竞争中表现不佳,但如果禁止高薪机构,它们就不必表现糟糕。
“我们非常需要程序员。如果他们要求我们停止帮助我们的邻居,我们必须服从。”
你永远不会如此绝望,以至于必须服从这种要求。
记住:国防上百万,但一分钱也不给贡品!
“程序员需要以某种方式谋生。”
在短期内,这是事实。然而,程序员有很多方法可以在不出售使用程序的权利的情况下谋生。这种方式现在很常见,因为它给程序员和商人带来了最多的钱,而不是因为它是唯一的谋生方式。如果你想找到其他方法,很容易找到。以下是一些例子。
一家推出新电脑的制造商将支付将操作系统移植到新硬件上的费用。
销售教学、辅助服务和维护服务也可以雇用程序员。
有新想法的人可以将程序作为免费软件分发,要求满意的用户捐款,或者销售辅助服务。我已经见过一些人以这种方式成功工作。
有相关需求的用户可以组成用户组,并支付会费。一个小组将与编程公司签订合同,编写该组会员希望使用的程序。
各种开发都可以通过软件税来资助。
假设每个购买计算机的人都必须支付价格的 x% 作为软件税。政府将这笔钱交给像 NSF 这样的机构,用于软件开发。
但是,如果计算机购买者自己向软件开发捐款,他可以抵免税款。他可以捐赠给他自己选择的项目——通常是选择是因为他希望在完成后使用结果。他可以抵免任何金额的捐款,直到他必须支付的总税款。
总税率可以由纳税人投票决定,权重根据他们将被征税的金额而定。
后果
计算机用户社区支持软件开发。
这个社区决定需要什么级别的支持。
关心他们的份额用于哪些项目的用户可以自己选择。
尾注
作者要感谢 GNU 项目的 Len Tower 对本专栏的评论。
关于本专栏的问题和/或评论可以通过邮寄至 C/O Linux Journal 或通过电子邮件至 arnold@gnu.ai.mit.edu 发送给作者。