开放源代码软件的三重境界 ———— 《大教堂与集市》读后感

如果你仅仅是下载开放源代码软件的二进制程序来使用,那么你永远也不可能理解开放源代码的精髓,这意味着工程师对于软件本身的理解,不仅隔了源代码这一层,还远离了开放式开发的整个过程。请问你在哪个层?软件还是源代码还是开放式开发?

Sat Aug 10, 2019 | 5800 Words | 大约需要阅读 12 分钟 | |

那时,即便我们黑客不去谈什么意识形态,我们一样会改变这个世界! ———— Eric S.Raymond 在本书的最后一章中如此说。

开源之道2019图书共读历史书评

过去几个月的导读与书评:

开源之道成员评论

非常奇怪,这样一本“畅销”著作,在开源之道的图书共读小组中竟然没有人做出任何的评论,这是非常令人值得思考和探索的事情。

各位看官,难道你不觉得奇怪吗?这是被开源软件领域的”圣经”,甚至被媒体如此称道:

本书是开源运动的独立宣言,它清晰、透彻和准确地描述了开源运动的理论与实际应用,对开源软件运动的成功和Linux操作系统的广泛采用起到了至关重要的作用。本书在开源运动中的地位相当于基督教的圣经,用黑客们的话说,这是“黑客藏经阁”的第一收藏。

笔者尝试在本文的末尾回答这一现象,但是不是十分的确定。

Eric S.Raymond 其人

Eric S.Raymond ,自称为程序员、黑客,但是由于其卓越的写作能力,以及自己对于自由软件的理解,进而创造性的发起开源运动,进而被传统的自由软件开发者所质疑,但是他所开发的程序,无论是Emacs的扩展,还是邮件客户端,均称得上是一名合格的程序员,至于其获得Brooks认可,并称之为天才的观察:以Linux为代表的开源项目开发方法的总结与发现,是软件工程上的卓越成就!毋庸置疑!

开源之道是非常推崇Raymond的成绩的,无论是个人成就,还是其在软件领域的和开源运动的卓越成绩。他是空手道黑带高手!其将人类学的研究方式应用于软件开发领域实乃创举也。

《大教堂与集市》其书

准确点说,这不是一本书,而是几篇文章的合集,”大教堂与集市”取之于其中最为重要的一篇论文的名称,以下为开源之道对于内容的导读:

序 & 前言

序是由知名的基于开源商业成功的公司红帽公司创始人 Bob Young所作,解释了自由软件在社会经济中的合理性:

计算机语言之所以被称之为语言,是因为它们确实是语言。掌握编程语言技能的社会成员(如程序员)可以使用该语言构建和交流思想,从而做一些有利于其他社会成员(包括其他程序员)的事。在现代社会,人们越来越依赖于软件服务,而对这些软件内在知识的法定获取限制(如软件行业长期以来使用的专有软件许可制度),导致自由更少、创新更慢。

在前言中,Raymond 则解释了这本书所要探讨的内容和立论:

本书并没有给出基础理论上的创新,只是描述了这样的事实:开源软件系统性地利用开放式开发和分布式同行评审(peer review),不仅降低了成本,还提高了软件质量。

黑客圈简史

相对于6月份,开源之道共读的图书《黑客》一书专门的阐述,这篇短小的文章则更为笼统的,当然由于时间上的差异,本文相对《黑客》一书,描述了Unix的历史,Internet的兴起,以及对于自由软件的萌芽和发展进行了叙述。黑客所倡导的文化,才是自由和开源的根基,离开这个直接谈软件工程,恐怕任谁也无法将这个故事给讲圆融了。

Linux 最重要的特点不是技术上的,而是社会学上的。在Linux被开发出来之前,所有人都认为,如果软件复杂到操作系统这样的程度,就必须要有一个精心协作的团队,团队要比较小,而且紧密互动,不管是以前还是现在,这都是很典型的开发模式。

大教堂与集市

这是本书的核心章节,Raymond 根据自己对fetchmail的实验性的开发,以及Linux的长期观察,从Linux 内核的成功总结出来的软件工程理论,当然有Brooks的深刻影响,以及其它的人类学、社会学、心理学上的解释,但是很少涉及诸如操作系统、C语言、计算机体系结构等相关技术的讨论。

Raymond 在该论文中,总结出了集市式开发模式(如Linux内核、fetchmail)的19条规律或模式,这些模式深刻的影响了后来软件开发的方法论,正如豆瓣上的一位读者在题为《殊途同归还是分道扬镳》如此评论道:

如今虽然集市模式并没有成为主流,但是可以明显的发现,传统的软件开发模型中注入了大量集市模式的元素,如今流行的Scrum等敏捷方法论中大量借鉴了集市式开发的思想和实践,比如code review、pair programming、self-organize等等。在构建成功软件的路上,大教堂和集市是殊途同归还是分道扬镳,作者没有给出答案,但是从现代软件工程方法论的进化来看两条路在越走越近.

关于19条规律,笔者这里就不一一列出,各位看官根据自己在项目当中所遇到的情形而进行相应的感悟就好。正如Raymond在其另外一本经典的著作:《Unix编程的艺术》当中提及的一个重要定律:提供机制,而不是策略。所以这19条规律并不是具体的指导、方法,而是某种带有思想和智慧的总结,所以看官要从中灵活的领悟,防止进入教条。

开垦心智层

如果说在上一篇文章,还谈及了计算机相关的工程,以及涉及一些技术方面的阐述,那么这篇则彻底的转变为人文类的文章,Raymond 跨行研究开源软件项目之所以成功背后的社会因素,诸如协作、沟通、解决冲突、利益分配等诸多的问题。尽管迄今为止,人类仍然无法完全诠释开放源代码成功的全面因素,但是Raymond的这篇文章却是这方面的开山之作,这尤其对于进入大数据分析时代显得越发的重要。

这部分是最难的,因为是知识的边界,一位开发者会将自己主要的精力集中于体系结构、代码、通信和数据的实现上,而往往会忽略协作、更为宏观的目标、归属感、人性、文化等诸多的因素,即使认同某种因素,也难以使用准确的语言来描述;再切换为人文作家或者是社会理论家,则无法深入到代码的构建中,作为知性的认识,再怎么观察,也是外围的,一如开源之道共读5月份的书籍:开源开发者内在的素质:匠艺 —— 《匠人》书评与导读,让开发者避而远之。

那么这篇文章就越发显得深奥难懂,牵涉到黑客的文化认同、沟通方式、组织结构、民主审议、共同体(社区)建设、同行评审(peer review)、名誉礼物等等诸多的阐述,而这些恰恰是现代中国难以逾越的障碍。开源之道三年以来,尽管也在往这方面阐述,却总是难以获得大众的认同,请允许我以一段Raymond先生的其中一个论述的引用:

社会语境下的秘密。人们是通过投身于某个特定项目而进入黑客文化的,每个项目都是一个鲜活的社会语境,想要成为项目的贡献者,一个人需要在技术上和社会上都对它进行研究和理解(具体来讲,通常是通过阅读项目web页面、邮件列表来做到这点)。新手正是通过项目团队,从老手经历的事件中获得阅历。

而社会语境,即所谓的软技能,在整个应试教育体制下最难以学会的障碍,你甚至连门都找不到。

魔法锅

使用隐喻来阐述,这个隐喻必须是人们有着共同的文化模因,方能获得大众的认同。

在威尔士神话中,Ceridwen女神有一只大锅,当她念出只有她自己知道的咒语时,这只锅就能魔法似地变出有营养的食物。在现代科学中,Buckminster Fuller给出了”以少成多”的概念,指出技术会变得越来越便宜和有效,早期设计中需要投入的物理资源被越来越多地替换成信息内容。Arthur C.Clarke则指出:“任何足够先进的技术都无异于魔法。”

开放源代码的经济效益问题,从知识产权的授权模式(即比尔盖茨的那封著名的公开信)深入人心,那么开源被轻易的下载、克隆、分支、再分发,以及用户的消费习惯。竟然需要一篇长篇大论、甚至是无数的学术研究来进行解释,这一现象也是众多悖论、奇观。Raymond 在这篇文章试图从软件的形式、源代码的意义、经济价值来为开放源代码进行辩护。然而非常不幸的是,他的观点需要时间的验证。

黑客的反击

在2000年左右去撰写这篇文章,也就是20年前,这需要多么强大的内心?需要多么恢弘的想象力?要知道那是一个微软、Oracle等软件公司鼎盛的年代。Raymond以自己独特的洞察力、对人性和深灰深邃的理解,得出这样的结论,无论是软件本是服务,还是创新在开放,在整理当时的自由/开放源代码项目的成绩的同时,做出了伟大的语言,即使是20年之后返回头来看,也难以寻找到错误。

电脑是人类的工具,因此,硬件设计和软件设计最终要回归到为人类设计,而且是为全人类设计。

这条路是漫长的,而且并不容易走。但我认为,黑客社区联合企业界的新朋友,必将完成这一任务。就像Obi-Wan Kenobi所说的那样:”源码将与我们同在”。

后记 & 附录

后记的意图非常明显,给还处于亚文化、弱势的黑客、社区以激励!以小博大,是因为站在了正确的一方。想想人类的每次进步,莫不如此!总有一些人能够勾勒出伟大的胜利,尽管只是盲目的对于人性本身的相信。

如何成为一名黑客?Raymond总结了一些黑客的特点,例如态度、技术,以及学习路径。是的,技术而言,似乎没有什么奥秘:使用开源软件,学习Unix,参与贡献等,然而,Raymond特别强调的态度,似乎是最大的障碍,大凡能够进入计算机这一行业,学习技术应该不成问题,但是就是态度却不是能够轻易培养,这不仅涉及到基础教育,还牵扯出家庭教育,社会、政治、人文环境,比如那个“自由是好事”中所提及的:

滥用权威者靠审查和保密而强大,他们不信任自愿合作和信息共享————他们只喜欢他们控制之下的“合作”。若要做得像一名黑客,对审查、保密以及使用武力或欺骗这类行为,你必须要有一种直觉上的反感,而且你必须愿意与之抗争。

这才是其中最难的部分。

开源之道点评

著名国学大师王国维先生在其代表作《人间词话》中曾经如此描述一位追求卓越人生的三重境界:

  1. 昨夜西风调碧树,独上高楼,望尽天涯路。
  2. 为伊消得人憔悴,衣带渐宽终不悔。
  3. 众里寻他千百度,那人竟在灯火阑珊处。

将这样的三重境界,去类比于开放源代码软件,难免有点勉强和削足适履,也有误导的明显倾向,我这里仅仅是借用王国维先生的思考,即在对于事物的认知的深度和广度上进行区分。

我非常清楚做这样的隐喻有多么的危险,更何况所借用的这个境界思路是有着时间轴这个效果非常明显的见证的。然而我却找不出更为恰当的了。

第一境界

软件是人们可以直接在计算机中使用的,可以完成任务的实体,此乃 第一境界 也,绝大多数人也处于这样一个认知状态,这是人们可以切身体验到的,尤其是智能手机时代的来临,加速了这样的体验,比如WeChat社交聊天工具、在线支付应用、出门打车App、办公套件office、零售终端进销存……现代人被软件所包围,生活也严重依赖于软件。

既然软件是如此的重要,那么围绕它而产生的商业,也是创新无数、层出不穷。在IT行业内,软件可以通过售卖授权、提供服务、提供支持、知识培训、订阅等方式完成买卖交易。这是一个巨大的产业,目前全球价值最高的几家公司,都和软件有关。

那么伴随着巨大的利润,就有一些投机者,甚至是违反现有法律的经营者。最为明显的就是破解和盗版。这种现象尤其在2000左右的中国,因为在这之前中国的盗版业在图书、音乐、影像更是疯狂而肆虐。以至于在国内使用计算机将软件(操作系统、Office、游戏、应用等)视为免费为常态。

第二境界

而软件的源代码是否授权给大众或者特定的人群,则是 第二境界,既然软件是如此的赚钱,那么从业者必然上升,这些从业者想要掌握开发软件项目的技能,必然要做的一件事就是编码,而掌握编码最快的方式就是阅读他人或者参考他人的代码,于是,过度封闭的软件,这些从业者是无法获取的,或者说获取的代价过于高昂。于是,他们倾向于那些能够获得源码的系统,例如早期的Unix,只需要很少的费用,就可以获取到源代码。

甚至是软件巨头,如IBM、微软,也会在某些国家做出让步,同意政府或者重要部门的人参阅其软件的源代码,但是仅限于有限的、指定的人。源代码是软件运行的原始存在,是人类可以理解的一种特定语言。能够受训学习、掌握这些语言的人类,以撰写出源代码为生,当然中间也出现了伟大的创新!

第三境界

而开发源代码的过程是否向全宇宙开放,则是第三重境界。其实,软件的源代码可以阅读、参考,甚至是自行编译,都仍然是处于机器的范围。伴随着问题的复杂度提升,开发源代码需要巨大的工程项目来把控,以操作系统为例,需要几千几万工程师花上好几年的时间才可能完成,这就涉及到大量的沟通、协作、决策、架构等等,软件工程领域的巅峰之作《人月神话》特别说明了这点。

也就是说协作、沟通、问题、讨论、决策、记录等等因素才是开放源代码软件的精髓所在。在此境界,技术语境和社会语境是同等重要的,社会语境甚至更为重要。

三重境界并无高低之分,只是在深度和广度上进行事物的特定理解而已。《大教堂与集市》以跨众多领域的知识尝试诠释开放源代码软件现象,在20多年前那个尚未像几天这样开放源代码项目漫天飞的年代,从软件工程、黑客文化、人类学、同行评审(peer review)、软件的本质、经济等等众多的角度来阐述,尽管看起来有些凌乱,然后主线是非常的清楚的。2019年再重温这几篇文章,已经不可同日而言,今天有GitHub、Kubernetes、Linux基金会、Apache软件基金会、Google开源项目办公室、TODOGroup……等等诸多的证据,反而进一步让人们去探究社区的形成、开源项目的健康程度、最大的协作和最小的沟通成本、甚至预测下一个成功的开源项目。

此三重境界,恍若进化论在软件业的有效演示,开放多带来的创新、生命力被时间所证明。

解释 考虑因素较多,充满变化和复杂,绝大多数人会选择直觉式的答复

当你问身边的很多人:“为什么想诸如Linux kernel、Apache这样的开源软件项目会获得成功?”“红帽为什么可以赚钱?”这样的问题的时候,他们大多能够给出非常肯定的答案:

  • 美国人闲的慌,有钱
  • 歪果仁不计较什么回报
  • 中国的国情非常的糟糕
  • 我国人民仍然处于贫困线挣扎,根本无暇顾及开源
  • 外国的公司有钱
  • 项目非常的忙,经常加班加点,哪里有空参与上游?
  • ……

于是较真的开源之道便有了其独特意义的一面。