作者 | 周荔人       责编 | 欧阳姝黎

1998年1月23日,美国网景公司做了一个决定,宣布将会开放下一代网景通讯家套件的所有源代码。网景通讯家套件后面就是 Mozilia 项目,下文均使用 Mozilla 指代该开源项目。

平地起惊雷。

网景公司为什么开源 Mozilla ?

开源软件运动是什么?

开源软件运动和自由软件的区别是什么?

相信看完本篇文章,你就会明白。

另起炉灶

受网景开放浏览器源代码的启发。1998年2月3日,在加利福尼亚帕洛阿尔托召开的战略会议上。布鲁斯·斐伦斯、埃里克·雷蒙德、蒂姆·奥莱利、拉里·奥古斯丁在内的自由软件运动的成员,还有刚刚宣布开源的网景公司,在讨论如何让自由软件运动更受商业欢迎,希望能够扩大自由软件的覆盖范围,动员更多的人员加入。

布鲁斯·斐伦斯及埃里克·雷蒙德这两位“天降猛男”可是不得了。

布鲁斯·斐伦斯定义了开源软件是什么,开源软件定义就是他写的。

埃里克·雷蒙德的《大教堂与集市》是开源软件宣言,网景公司就是受到了这本书的影响,在网景宣布开源 Mozilla 之后,他经常出入网景公司,希望 Mozilla 能够顺利的开源。稍后会详细介绍他。

两位“天降猛男”成立了 Open Source Initiative ,中文为开放源码促进会,简写为 OSI 。

他们认为自由软件运动缺乏市场营销活动,自由软件运动的目的不仅仅是为了市场份额,更重要的目的是宣传自由软件思想,这是开源运动兴起的第一个原因。

第二个原因是自由软件这个词教育成本很高。在雷蒙德的个人博客中,他对于自由软件的缺点有了很详细的记录:

“它有两个问题。首先,这令人困惑;‘自由’一词非常模糊,自由软件基金会必须不断努力的宣传。‘免费’是‘不收钱’的意思吗?还是说‘任何人都可以自由修改’,还是其他什么?其次,这个词让许多公司类型感到紧张。”

这点对于初期寻找投资的红帽公司的影响尤为显著,当跟投资人说:“我们的商业模式是销售免费(free)软件”的时候,投资人的表情无不透露出大大的疑惑。

他们在讨论如何创立一个新的品牌,来引导这场运动。最后克里斯汀·彼得森提出了 “open source”这个词,受到了大家的一致好评,中文翻译就是“开源软件”,开源软件这个词在这次会议上被首次创造出来。

在这次会议不久,1998年2月5日,埃里克·雷蒙德和硅谷的一些 Linux 用户集思广益,最后确定这个词语,并且要求以前使用自由软件的地方,都要改成开源软件。

开源软件

开源模型

开源文化

Debian 开源指南

……

1998年2月底,在雷蒙德和布鲁斯的倡议下,成立了 Open Source Initiative,缩写为 OSI,中文翻译为开放源代码促进会。他成立的目的有以下几个:

  1. 宣传开源软件思想,提高人们对开源软件的认识。

  2. 建立开源软件和各社区沟通的桥梁。

  3. 定义开源,防止开源思想和精神被滥用。

雷蒙德担任 OSI 的第一任主席,直到 2005 年退休。

一场轰轰烈烈的开源运动正式开始了。

网景:

第一个将商业产品开源的公司

1997年5月21日,雷蒙德在 Linux Kongress 上发表《大教堂与集市》这本书。

1998年1月22日,受《大教堂与集市》书中描写的软件开发模式影响,网景公司正式宣布开源其网景通讯家套件开源,项目名称为 Mozilla。以此来对抗被微软的IE浏览器不断出蚕食的浏览器市场。

网景这家公司当时的问题在于,当时网景的产品需要微软的技术支持才能够正常运行。网景通讯家运行在 Windows 上,这是必不可少的一个部分。但是后面,微软根据其微软网络计划,发布了 IE 浏览器。

网景通讯家和 IE 浏览器谁是亲儿子,大家应该门清儿。

网景的产品要根据 Windows 的产品策略做调整,在 IE 发布之后,这种调整意味着网景不断流失的市场份额。

说起来容易做起来难,Mozilla 的开源之路困难重重。

林纳斯说:“对于那些以公司自身资源为起点建立和维护开源运动的,对外开放是绕不过去的大问题。公开源代码,嘴上说起来简单,但往往都会陷入一种二元社群结构:公司内部的’我们’和公司外的’他们’”。

大量的决定如果只是在公司内部的咖啡桌上达成一致,而不是对外公开,外部人员就算有天大的想法往往会被否定。

这说的就是网景。

在项目刚开源不久,网景公司内部的“我们”和公司外部“他们”就对立起来了。

公司内部有一些反对阵营声称,他们不会接受外部人员的那些小补丁。

开源不是将代码开放就不管了,重点是管理和运营社区。而网景恰恰是前者,他们只开放了一大堆源代码,真正参与到代码构建中的也只有网景的人。

而且这些源代码相当老旧,难以维护。被开放出来的源代码几乎都被废弃了。

开源等于重写。

开了一个寂寞。

而且更大的问题是,网景仅仅将开发版本的源代码公开了出来,但是在公开源码的过程中,这个版本就已经出了很多问题,开发版本的 Bug 很多。

此外,在开源许可证方面,网景通讯家使用的不是 GPL 授权。他们魔改了 GNU GPL ,如果你想更改了网景通讯家的源码,你需要使用魔改后的 NPL (Netscape Public License)许可,如果你要为网景通讯家新增程序,你需要使用的是 MozPL(Mozilla Public License)。

最后,网景通讯家的代码并不全部属于网景公司,例如 Java 部分就是 Sun 公司授权给他们用的。

结果可想而知,网景公司在开源初期不但没有把项目做大,反而引来了很多负面新闻。

直到公司内部的一次会议的消极决定传出来,才让网景公司痛定思痛,狠心将项目相关的源代码开放。

整个项目终于变得有活力了。

虽然开源之初困难重重,但是还是有好消息的。在网景开源不到 24 小时的时间里,一个自称“Mozilla 秘密小组(Mozilla Crypto Group)”的澳大利亚团队就创建了一个加密模块。

由于当时的美国的进出口限制,加密算法无法出口。非美国的地区无法使用美国的加密技术。这个小组把这个问题解决了。

还是由于美国进出口限制,这个小组的代码一旦进了美国,就无法出口了。

作为 Mozilla 项目开源之初最伟大的一次尝试,这些代码并没有办法合入 Mozilla。

当时最出名的两个项目是 Linux 和 Mozilla,这两个项目代表当时开源圈子的形象,所以在网景开源的一年时间里,谁都不想对网景做出任何负面的评价。担心会给开源理念留下坏名声。

雷蒙德在听说网景准备开放源 Mozilla 后,在给网景写的一封信中,也写了对于网景此举的担忧。

“我非常不希望这些不良后果发生,因为如果网景的尝试受到挫败,对于我所由衷信仰的自由软件文化,会有极端负面的影响。自由软件模式会落得极不受信赖,使得未来类似的尝试将难如登天。”

关于网景通讯家这套软件,如果往深挖的话,你会发现网景通讯家是基于一款开源的浏览器项目开发的,项目名称叫做 NCSA Mosaic, 该项目源码现在你还可以在 Github 上看到。原本这个项目是伊利诺伊大学厄巴纳香槟分校的国家超级电脑应用中心(NCSA)开发,这个是美国的一个国家项目。所以着实有点讽刺。

NCSA Mosaic Github 地址:

https://github.com/alandipert/ncsa-mosaic

大教堂与集市

埃里克雷蒙德1957年12月4日出生于美国马萨诸塞州的波士顿。

1976年开始接触黑客文化。

他是20世纪80年代 GNU 最早的一批贡献者之一,还记得 GNU Emacs 吗?这个项目最初也是雷蒙德的建议斯托曼开发的。

1997年以后,雷蒙被广泛公认为是开源运动的主要领导者之一。

他是开源运动的主要理论家。

他是开源软件思想的传教士。著有《大教堂与集市》一书。

这本书被认为是开源运动的独立宣言。

它清晰、透彻和准确的描述了开源运动的理论与实际应用,对开源软件运动的成功和 Linux 操作系统的广泛采用起到了至关重要的作用。

理查德斯托曼和林纳斯托瓦兹虽然都坚持源码开放,但是两者在软件开发模式上却大不相同。

斯托曼采用的是封闭开发,GNU Emacs 就是这样开发出来的。

在 Emacs 最终版发布之前,所有的代码仅有斯托曼和其开发团队能够看到。开发、测试、发布的过程均由专业团队操作。普通的开发者只能等待项目完成后的源代码。

GNU Emacs 的这种软件开发模式就是“大教堂”模式。

那时的人们认为,像操作系统这样的复杂的软件,都必须在一个小而紧凑的组织范围内,通过精心的协作才能够完成。这种模式现在仍然存在于大多数的商业软件的开发模式中。GNU 工程使用这种模式构建了宏伟的软件殿堂。

大教堂式的软件开发模式又拜 Unix 所赐,斯托曼那一代深受 Unix 的开发模式影响。

当时 Unix 推崇 “小工具”、“快速原型法”、“演化式编程”。

小工具:程序应该只关注一个目标,并尽可能把它做好。做一件事,做好它。在 Unix 的世界里,echo 命令其实就是一个工具,有小工具就会有大工具,像 sort 和 diff 命令就是大工具。

快速原型法:先做一个可以包含全部功能的最小可行版本,来验证功能是否符合预期。如果这个最下可行版本 OK,在考虑不断丰富和完善该程序,否则直接放弃。

演化史编程:根据当前业务需要保留程序的功能,应用的过程中不断迭代,业务变化时扩展、重构、重写。

林纳斯就不一样了,在编写完 Linux 0.01 版本后,注意版本号0.01。

当时的黑客在版本号方面有一些不成文的规定,如果觉得这些版本可以拿的出手,就将它的版本号定为 1.0,如果觉得程序还“欠火候”,那么就将它设定为 0.01 。

虽然 0.01 版本还是一个“欠火候”的版本,但是还是林纳斯跑到了 Minix 的新闻组上发了一封邮件,原文如下:

“使用 Minix 系统的朋友们,大家好,我正在编写一个(免费的)能用在386(486)AT机上的操作系统(纯粹个人爱好,不像是 GNU 那种大型的专业系统)。打从四月份起,我就开始酝酿这个系统了,现在他它应该快到火候了。因为我的操作系统和 Minix 系统有点雷同(特别是文件系统的物理排列方式,主要是因为它实用),所以我希望能够得到一些你们的反馈意见。在使用 Minix 的过程中,你们有什么满意或者不满意的地方,都欢迎来信提出。”

“我已经移植了 BASH 程序(1.08 版)和 GCC 编译器(1.40版),似乎一切正常。也就是说接下来的几个月我会做出一些实用的东西,所以我想知道,大多数人在系统特性方面有何需求。什么意见都行,不过我不可能保证每一项意见都能够实现:-)”

——林纳斯

后面的事情你也都知道了。由于“林纳斯比较懒散”而且“喜欢授权给别人”,Linux 的功能很多是未曾谋面的开发者贡献出来的。

“多发布”和“早发布”成为了林纳斯发布 Linux 的策略,让大家都可以尽快的体验到系统的新特性。然后在接下来的几天内从数以百计的使用者那里获得反馈。然后在开发过程中引入使用者的反馈的特性。

MIUI 觉得很赞。

林纳斯开发 Linux 的这种软件开发模式就是集市模式。

《大教堂与集市》对集市模式的哲学思想做了详细的描述,相信下面的摘抄的一部分话会触动到你:

  1. 好的软件作品,往往源自开发者的个人需要。需求是发明之友。

  2. 优秀的程序员知道写什么,卓越的程序员知道改写(重写)什么。

  3. 当你对一个程序不再感兴趣的时候,你最后的责任就是把它交给一个可以胜任的接棒者。

  4. 如果想让代码质量快速提升并且有效排错,那就把你的用户当成开发者对待。

  5. 早发布、常发布。

  6. 只要眼睛多,bug 容易捉。

  7. ……

但是全书中完全看不到“开源”这个词,因为该书出版的时候,“开源”这个词还没有被创造出来。

上面说了, 1998年2月3日才开源这个词儿。

在埃里克雷蒙德的个人博客上有该书的最新版本,关注开源公众号并回复“大教堂与集市”即可获得网页链接。

理查德斯托曼:

我们和搞开源的不是一回事儿

开源软件运动脱胎于自由软件运动,作为自由软件之父,理查德斯托曼并不是支持开源运动,并且和开源运动划清界限。

根据埃里克雷蒙德的描述,当斯托曼听到要使用“开源”这个词的时候,他认为这群人在冒险,因为“开源”这个词儿不纯粹。

理查德认为:“自由软件”和“开源”基本上指的是同一范围的程序。然而,出于不同的价值观,他们对这些程序的看法大相径庭。自由软件运动为用户的计算自由而战斗;这是一个为自由和公正而战的运动。相反,开源理念重视的是实用优势而不是原则利害。我们因此不赞同开源运动,也不使用开源这个词。”

你给解释解释这两者有什么不同。

从斯托曼的话中可以看出,两者在哲学层面的是不同的。

什么是自由软件?自由是人本来应该拥有的一种权利。自由使用软件是人的一种政治权利,这些自由的权利和言论自由一样,必须拥有,不可缺少。

自由软件一定是开源软件。

什么是开源软件?主张实用主义,什么叫做实用主义?能够受到商业认可、获得商业成功就是实用主义。构建性能可靠、强大的软件,满足企业需求就是实用主义。软件就是用来解决企业问题的。用户可以看源码吗?当然可以,但是一些商业机密的代码也可以是不开源的。

举几个部分开源的例子。

远一点的例子,例如上面提到的 Mozilla 项目。

近一点的例子,例如 Kubernetes Borg 引擎,在开源之初就被谷歌当作商业秘密隐藏起来。当推特的工程师推出精心打造出属于自己的 Borg 引擎,命名为 Mesos 。谷歌也是审时度势推出了一款功能类似 Borg 引擎而已。

开源软件不一定是自由软件。

从自由软件和开源软件的差异,我们可以发现:

理查德斯托曼是一个理想主义者。

“我一想觉得理想主义者很有意思,但就是有点沉闷,有时候还挺骇人的”林纳斯托瓦兹说。

来看一下我们现在的这个世界吧,开源软件正在吞噬世界,自由软件运动还在进行中。

或许理查德斯托曼和埃里克雷蒙德还会持续争论下去。

但是作为开源软件和自由软件的受益者,我们应该铭记这段历史。

我们有自由仰望星空的权利,也有脚踏实地建设这个美丽新世界的义务。

从这个角度出发,一个软件是自由的、还是开源的,或许并不是那么重要。

今晚(3月23日)19点,《悦读时间》直播将正式开始!点击“阅读原文”直达直播间!观看直播,将有机会获得作者亲笔签名图书,还有音箱等奖品!

☞Linux 30岁啦,这些历史你知道多少呢?☞再造一个爱因斯坦?GPT-3 让我看到了名人“重生”的希望
☞英特尔回应杨笠代言争议;天弘基金称已处理在支付宝上「无故扣款」问题;Eclipse 4.19 发布 | 极客头条

开源软件运动为什么流行起来?相关推荐

  1. 软件协会发布开源软件与商业软件知识产权报告

        日前,中国软件行业协会发布了<有关开放源代码软件与商业软件知识产权的研究报告>(以下简称<研究报告>),明确提出"反对政府直接支持或干预任何形式的软件商业模式 ...

  2. 【华为云技术分享】“技术-经济范式”视角下的开源软件演进剖析-part 1

    前言 以互联网为代表的信息技术的迅猛发展对整个经济体系产生了巨大的影响.信息技术的发展一方面使知识的积累和传播更加迅速,知识爆炸性的增长:另一方面,使信息的获取变得越来越容易,信息交流的强度逐渐增加, ...

  3. 下载量和Vue一样大的开源软件被作者恶意破坏,数千款应用受到牵连

    点击上方 前端Q,关注公众号 回复加群,加入前端Q技术交流群 转自InfoQ: 编译 | 核子可乐.Tina 开源的黑暗面:faker.js 到底发生了什么? 流行开源包"colors&qu ...

  4. Linux、开源软件发展史

    今天,Linux以及开源软件已经占据了大部分企业的服务器.但是,和我一批差不多刚刚进入软件行业几年的程序员来说,我们现在只能被动的接受和使用这些东西,如果不认真广泛的搜索一大堆资料,我们真的很难了解它 ...

  5. 开源软件能够赚到钱吗

    中科红旗的总裁赵晓亮曾经用一个关于饮水的比喻来解释开源软件企业是如何赚钱的,大意是人每天都要喝大量的水,但饮水是在不同的环境下.不同的条件下进行的.虽然原料都是水,但性质已经发生了改变.而且水的加工程 ...

  6. Linux专家警告开源软件日益吸引黑客

    Linux expert warns of open source's growing appeal to hackers Linux专家警告开源软件日益吸引黑客 <purple endurer ...

  7. 达摩克利斯之剑:开源软件的合规风险及防控策略

    作者简介 冯才效,SEAL 安全工程师,拥有6年云计算领域经验,先后参与 Rancher, Harvester 等开源项目.现致力于编写开发者友好型的软件供应链安全检修工具. 开源软件运动兴起于上个世 ...

  8. 汽车开源软件的“排头兵”——丰田首次搭载AGL

    2019独角兽企业重金招聘Python工程师标准>>> 尽管双方的争论,在今天并没有成为现实.但它暗示了当今汽车工业所面临的复杂问题.汽车已经从传统四个轮子移动工具变成了连接设备.导 ...

  9. 高手必备:10大最流行开源软件

    对于开源软件来说,相信每个人心中都会有自己的TOP10,尤其是那些开源软件拥趸者眼中的TOP10,可能会与我们所列的TOP10有些不同.不过,这是经过全球很多开源社区高手共同讨论的结果,我们觉得这个版 ...

最新文章

  1. 深度学习 dns tunnel检测 使用统计特征 全连接网络——精度99.8%
  2. 构建根文件系统之busybox(三)最小根文件系统
  3. mysql中间件研究(Atlas,cobar,TDDL)
  4. batocera游戏整合包_星露谷物语绅士mod整合包
  5. python正则表达式知识点
  6. Qt 编码问题QTextCodec
  7. css3 背景等比例,纯 CSS,不用背景,实现图片等比例展示
  8. 提供oracle兼容特性报,【干货】K-DB为什么能全面兼容Oracle
  9. fastdfs文件上传 read timeout_一文看懂centos7系统部署FastDFS 分布式文件系统
  10. BOM对象有哪些,列举window对象?
  11. MYSQL initialize、install 、启动服务报错解决方法
  12. 2021年社招字节跳动测试开发工程师面试题
  13. ADI超声解决方案 和系统成像设计
  14. 20155218 《Java程序设计》实验二(Java面向对象程序设计)实验报告
  15. 前端使用Aliplayer 播放器 播放flv直播流
  16. 奔驰S400豪华型升级后排电动腿托系统,提升后排乘坐舒适性
  17. 反向传播算法的理论基础,神经网络反向传播算法
  18. 商女不知亡国恨,隔江犹吃炒腰花
  19. BJFU 1399 警察抓小偷
  20. 360极速浏览器显示https证书无效解决方法

热门文章

  1. CleanCodeHandbook Chapter 7: Stack(39-41)
  2. 敏捷外包工程系列之三:固定合同(敏捷外包工程,敏捷开发,产品负责人,客户价值)...
  3. JAVA中的位运算符
  4. 低配本用win10服务器系统,低配电脑装win10最早版可以吗
  5. 【杂文】【演化学习】platEMO提取缓存Data
  6. android快速搭建界面,怎么样能快速搭建一个Android APP的界面和框架?
  7. html基础技术笔记
  8. leetcode python3 简单题226. Invert Binary Tree
  9. tensorflow保存和恢复模型saver.restore
  10. php.ini $ phphome,shell 脚本安装PHP扩展的简单方法