为什么会有这篇文档?
身为新黑客词典(The Jargon File)和许多其他广为人知的同类文章的作者,我常收到热心的网络新人的电子邮件,问及(大意上是)“如何成为一名魔法师似的黑客?”。1996年的时候我注意到这个重要的问题并没有相关的FAQ或文档页面,所以我写了一份。许多黑客认为这篇文章是权威的,我觉得它应该是吧。此外,我不会寻求在这个话题上的独立著作权,如果你不喜欢在这里读到的内容,自己写一篇吧。
如果你是在离线阅读本文,可以在
http://catb.org/~esr/faqs/hacker-howto.html找到本文的最新版本。(译注:本文的最新中文版可以在这里找到)
注意:本文的末尾有一系列常见问题。请在向我发邮件询问关于本文的任何问题前再三阅读。
目前本文有许多语言的翻译版:阿拉伯语,白俄罗斯语, 中文,捷克语,丹麦语,荷兰语,爱沙尼亚语,德语,希腊语,意大利语,希伯来语,挪威语, 波斯语,巴西葡萄牙语,罗马尼亚语,西班牙语,土耳其语,瑞典语。请注意,由于本文不定期更新,这些翻译版可能存在不同程度的过时。
本文里九宫格中的5个黑点的装饰图被称作glider。这是一个使很多黑客多年痴迷的被称作康威生命游戏(LIFE)中,具有令人惊奇特性的简单图案。我认为它是很好的黑客精神徽章 —— 抽象,初见的时候感觉有点神秘,通过它复杂的逻辑可以通向整个世界。如果你想了解更多关于glider的信息,请看这里。
如果你觉得这篇文章有价值,请在Gittip上给我一点赞助。也请考虑赞助其他为你提供了有价值代码的黑客。小额的赞助也能够聚小流成江海,使为你提供帮助的人从繁重的劳动中解放出来,创造更多的价值。
什么是黑客?
新黑客词典(Jargon File)中有数个“黑客”的定义,主要形容”技术专才”或”有志解决问题及超越极限之人”。要成为黑客,有两个要点。
这可以追溯到几十年前第一台分时小型电脑诞生, ARPAnet 实验也刚展开的年代,那时有一个由程序设计专家和网络名人所组成的, 具有分享特点的文化社群。这种文化的成员创造了 “hacker” 这个词。他们建立了互联网,他们发明了现在使用的Unix操作系统,他们管理Usenet讨论组,他们令WWW运作。因此,若你有上述的特性及参与同类的社区,亦有对以上种种作出贡献,同时社区的人知道你是谁又称你为“hacker”,你便是黑客。
然而,黑客的理念并非只局限于软件社区。有很多人将黑客的态度应用于其他事物,如电子学或音乐上——实际上,黑客的理念存在于任何学科领域。由于了解黑客的理念及精神,软件社区的黑客亦会称后者为黑客。有些人亦认为黑客的理念是独立于黑客所从事的实际工作。本篇文章我们将专注于讨论软件黑客的技巧,态度及传统。
另外,有一群人也称自已为“黑客”,他们(多数是年青人)用电脑侵入其他电脑的系统作出破坏。黑客们称这群人为“Cracker(破坏者)”,并不认同他们为黑客。多数黑客会认为Cracker是懒惰, 不负责任,不杰出的人。有能力侵入安全系统并不能使你成为黑客,正如可以用铁丝来偷车并不能使你成为汽车工程师一样。不幸的是很多作家及报道均称这群人为“黑客”。这一直使黑客们非常恼火。
黑客与Cracker的主要区别在于,前者搞建设,后者搞破坏。
如果你想成为一个黑客,请继续读下去。如果你只想做一个Cracker,请到alt.2600讨论组,并做好当你发现自己不如想象中聪颖的时候进5到10次监狱的准备。关于Cracker我就说这么多。
黑客精神
黑客们解决问题,建设事物,他们崇尚自由和无私的双向帮助。要被他人承认是一名黑客,你必须表现得你具备了这样的态度。而要表现得你具备了这种态度,你必须彻彻底底的坚持它。
如果你认为培养黑客的态度只是一条在这个文化圈中得到认同的路子,那就错了。成为具备这种素质的人,对你非常重要——促使你保持学习和成为黑客的自发性。正如所有创造性艺术一样,成为大师的最有效途径就是效仿大师的精神——不仅从理念上,还要从态度上效仿。
或许下面的这首现代禅诗很好的阐述了这个意思:
To follow the path: 沿着这样一条道路:
look to the master, 关注大师,
follow the master, 跟随大师,
walk with the master, 与大师同行,
see through the master, 洞察大师,
become the master. 成为大师。
如果你想成为一名黑客,反复阅读以下内容直到你相信它们:
1. 世上仍有大量迷人的事情等待解决
作为一名黑客可以享受很多乐趣,同时需要付出相当多的努力。努力需要动力。成功的运动员从锻炼身体、超越身体极限中获得精神愉悦。类似的,作为一名黑客,你可以从解决问题、磨练技术和锻炼智力中获得乐趣。
如果你天生不是这样的人,那你需要设法变成这样的人以使你能够成为一名黑客。否则你将会发现你的精力会被诸如性、金钱、社会上的虚名之类让人分心的东西所消磨掉。
(你还需要对自己的学习能力树立信心——相信尽管你对某一问题了解得不多,只要你能解决其中一部分,并从中学习,你可以解决其他的部分——直到解决它。)
2. 同样的问题不应被重复处理两次
创造性的智慧是非常有价值且稀缺的资源。它们不应当被浪费在重复造轮子上,世上仍有大量迷人的新问题等着解决。
作为一名黑客,你应该坚信其他黑客的时间非常宝贵,所以你有义务共享信息,解决问题之后公布方案,这样其他人可以去解决新的问题,而不是忙于应付旧问题。
注意,“同一个问题不应该被重复处理两次”并不是说你必须认为所有已有方案都是最优的,或每个问题只有唯一的解决方案。通常我们从一个问题的最初解决方案中能够学习到很多东西。这很好,并且对于我们思考如何能做得更好来说,这通常是必要的。我们反对的是人为的技术、法律上的,或者机构性的设置障碍(例如闭源软件),使得一个好的方案不能被重复使用,逼得人们重造轮子。
(你不必认为你必须将所有你的创造发明都公布出去,虽然这样做的黑客将会赢得大家极度尊重。适当卖一些钱来换取足够的食物、租金和电脑并不违反黑客的价值观。用你的技能来养家糊口甚至致富都可以,只要你在做这些的时候别忘记你是一名黑客。)
3. 拒绝重复和沉闷的事情
黑客(以及富有创造力的所有人)不应当被愚蠢的重复性劳动所困扰,因为这意味着他们并没有在做只有他们才能做的事情——解决新问题。这样的浪费会伤害所有人。因此,无聊和乏味的工作不仅仅是令人不爽,而是罪恶。
作为一个黑客,你应该坚信这一点并尽可能的将枯燥的工作自动化,这不仅仅是为了你自己,也为了其他人(尤其是其他黑客)。
(这里有一个例外。黑客有时会做一些看起来重复或枯燥的事情以进行脑力休息,或以此来锻炼一种技能,或以此获得某种除此以外无法获取的经验。但这是有选择的——有脑子的人不该被强迫做枯燥的事。)
4. 自由万岁
黑客是天生的反独裁主义者。任何能向你发号施令的人能够迫使你停止解决令你着迷的问题。同时,按照独裁者的一般思路,他通常会给出一些极端愚昧的理由。因此,不论何处,任何独裁主义的作法,只要它压迫你和其他黑客,你就要和它斗到底。
(这并非向所有权威挑战。儿童需要监护,罪犯要被看管起来。如果服从命令得到某种东西比起用其他方式得到它更节约时间,黑客可以同意接受某种形式的权威。但这是一个有限度的,有意的交易,那种权威想要的个人服从不是你应该同意给予的。)
权威喜欢审查和保密。他们不信任自愿的合作和信息共享——他们只喜欢由他们控制的所谓“合作”。因此,作为一个黑客,你得对审查、保密,以及使用武力或欺骗去压迫有行为能力的人们的做法有一种本能的敌意。同时你要有为此信念斗争的意愿。
5. 精神不能代替能力
作为一个黑客,你必须培养起这些精神。但是仅仅有精神并不能使你成为黑客,也不能使你成为运动健将或摇滚明星。成为一名黑客还需要智力,实践,奉献精神和辛勤工作。
因此,你需要学会有怀疑态度和尊重任何能力。黑客不会为装模作样的人浪费时间,但他们尊重能力——尤其是从事黑客工作的能力,不过任何能力都是好的。很少人能具备的高要求能力尤其好,其中涉及脑力,技巧和专注方面的能力最好。
尊重能力,你就会享受到提高自己的能力所带来的乐趣——辛苦的工作和奉献将不再是苦差而是一种高度娱乐。想要成为一名黑客,这一点尤其重要。
基本黑客技能
黑客的态度很重要,但技能更重要。态度不能替代能力,在被别的黑客称你为黑客之前,你有一些基本技能需要掌握。
这些基本技能随着时间的推移和技术的革新也缓慢的变化着。例如,以前的内容中包括了使用机器语言编程,最近包含进了HTML。总的来说当前包括以下内容:
1. 学习编程
理所当然,这是最基本的黑客技能。如果你一门计算机语言都不懂,我建议你从Python学起。它设计良好,文档详尽,并且对新人十分友好。尽管它是一门很好的入门语言,但它不只是玩具水平。它非常强大灵活,并且适用于大型项目。我写过一篇详细的对Python的评价。在Python的网站可以找到很好的教程。在Computer Science Circles也有一篇不错的第三方教程。
我早前曾经建议使用Java作为入门语言,但这篇评价改变了我的看法(请在文档中搜索“The Pitfalls of Java as a First Programming Language”)。如同文中尖锐指出的一样,一个黑客不能“像五金店中的管道工一样处理问题”。你需要知道所有的组件事实上都干了什么。现在,我认为最好先学C和Lisp,然后再学Java。
另外有一点需要注意。如果一门语言帮你做了太多工作,它会同时是一个好的生产工具和一个不好的初学对象。不仅语言有这个问题,比如Web框架RubyOnRails,CakePHP,Django也很容易让你流于表面,面对困难问题的时候束手无策,甚至无法对一个简单问题进行追查并给出解决方案。
如果你需要做一些重要的编程工作,你需要学习C语言,它是Unix的核心语言。C++跟C关系密切。如果你了解其中一种,学习另外一种应该不难。但是这两种语言都不适合作为入门学习。此外,如果你越避免用C编程,你的工作效率会越高。
C的执行效率非常高,并且非常节省机器资源。不幸的是C的高效是通过让你手动进行许多底层资源(例如内存)管理来获得的。底层代码复杂并且容易出bug,你需要花费很多时间来进行调试。鉴于当今的机器性能如此之高,这样的做法通常很不划算——通常更好的做法是使用一种稍微慢一些,不那么高效,但是能够大幅节省你的时间的语言。那便是Python。
其他对黑客而言比较重要的语言包括Perl和LISP。Perl很实用,它广泛应用于动态网页和系统管理方面,因此即使你从不写Perl代码,至少也得能看懂。许多人使用Perl的理由和我建议你使用Python的理由一样,都是为了避免用C完成那些执行效率需求不那么高的工作。你需要能够看懂他们的代码。
LISP之所以值得一学是基于另外的理由——当你最终掌握了它的时候,你将会获得巨大的启迪。它将使你成在今后为一个更好的程序员,即使你实际上很少使用LISP本身。(你可以通过为Emacs文本编辑器或者GIMP的Script-Fu编写插件或修改现有插件来很容易的学习LISP。)
当然,你最好五种语言都会(Python,C/C++,Java,Perl和LISP)。除了是重要的黑客语言之外,它们也代表了截然不同的编程思路和方法,每一种都能让你受益匪浅。
但是单纯的堆砌语言是不可能成为一个黑客,甚至程序员的。你需要学会如何独立于任何具体的语言之外来思考编程问题。作为一名真正的黑客,你需要通过手册和你已有的知识掌握到在几天之内学会一门语言的要点。这意味着你需要学习许许多多不同的语言。
这里我无法给你完完全全的指导教会你如何编程——这是个复杂的技能。但我可以告诉你,书本和课程也不能做到(最好的黑客中,有许多,也许几乎都是自学成材的)。你可以从书本上学到语言的特点——这只是皮毛,但要使书面知识成为自身技能只能通过实践和虚心向他人学习。因此要做到读代码及写代码。
Peter Norvig,Google最顶级的黑客之一,也是世界上最受欢迎的AI教材(译注:指“人工智能:一种现代方法”和“人工智能程序设计范例:通用Lisp语言的案例研究”等)的共同作者。他写了一篇名为Teach Yourself Programming in Ten Years的短文。他在文中提到的“编程成功的诀窍(recipe for programming success)”特别值得留意。
学习编程就像学习用优美的自然语言书写一样。最好的办法就是阅读大师的名著,试着自己写点东西,再读一些,再写一点,再读一些,再写一点……如此往复,直到你的作品达到如你在范文中所见的简洁和健壮。
我必须再提一下How To Learn Hacking,这是一些简单的说明,但是学起来并不容易。
以前很难找到适合阅读的好代码,因为几乎没有大型程序的代码能够供新人阅读和练手。这种情况已经发生戏剧性的变化。开源软件,编程工具和操作系统(都是由黑客创造的)现在随处可见。这刚好带我们到下一个话题……
2. 获取一个开源的Unix并学习运行和使用它
我假定你拥有或者能使用一台个人电脑(现在的孩子真幸福。黑客文化建立之初电脑贵得要死,没人买得起)。新手们向黑客技能迈出的最重要一步就是获取一份Linux或BSD-Unix的拷贝,将其安装在个人电脑上,并运行它。
没错,世上除了Unix还有其他操作系统。但它们都是以二进制形式发布的——你读不到源码,你也不能修改代码。在类似Microsoft Windows那样的闭源操作系统上学习黑客技术就像戴着脚镣学跳舞。
在Mac OS X上倒是可以,不过它只有一部分是开源的——你可能会撞墙,也必须很小心的避免养成依赖Apple专有代码的坏习惯。如果你专注于底层的Unix,你可以学到一些有用的东西。
Unix是互联网上的操作系统。虽然你不懂Unix仍然可以学会使用互联网,但若你不懂Unix,你将不能在互联网上从事黑客活动。因此,现今的黑客文化是严重以Unix为中心的。(曾经不是这样,并且有一些老派的黑客对此仍然感到不太高兴。但是现今Unix和互联网的羁绊如此之强,连Microsoft也无法撼动分毫。)
所以,请安装一套Unix - 我个人喜爱Linux但还有其他种类的(并且,你可以在同一台电脑上运行Linux和Windows)。学习它,使用它,调教它。用它在互联网上冲浪。阅读它的代码,修改它的代码。你将获得比Windows操作系统上更好的编程工具(包括C,LISP,Python和Perl)。你会觉得其乐无穷,学到比你想像更多更好的知识。
想要获取更多和学习Unix相关的信息,请参考Loginataka。你或许还想看看《Unix编程艺术》[The Art Of Unix Programming](译注:这里给出的是原文链接。国内有翻译版出售)。
我认为博客Let’s Go Larval!对于处在学习Linux阶段中的用户是非常易懂和有用的。这篇文章How I Learned Linux 就是一个很好的起点。
想开始Linux之旅,请参考Linux Online!。你可以从那里下载Linux或者(更好的主意是)找到一个当地的Linux用户群为你的安装过程提供帮助。
在本文最初的10年间,我认为从一个初学者的角度来说,所有Linux发行版都差不多。不过在2006~2007年间,一个事实上最好的选择出现了:Ubuntu。其他发行版各有所长,而Ubuntu对初学者最友好。注意,相比Ubuntu默认那个丑陋的几乎不可用的“Unity”桌面,Xubuntu和Kubuntu更好用一点。
你可以在www.bsd.org找到BSD相关的帮助和资源。
一个试水的好办法是试试被Linux爱好者称为“Live CD”的东西,那是一个完全在光盘或者U盘上运行,而不修改你硬盘的发行版。它运行起来比较慢,因为光盘很慢,但是这是一个在做出任何不可挽救的改变前看看可行性的办法。
我写过一篇关于Unix和互联网基础的入门文章。
我曾经不建议新手独自安装Linux或者BSD。现在它们的安装程序已经做得足够好,你作为新人也完全搞得定。尽管如此,我仍然建议和你当地的Linux用户群取得联系并寻求帮助。这没坏处,并且可以让整个过程更顺利。
3. 学习使用万维网(World Wide Web,WWW)和HTML(超文本标记语言)
大多数的黑客造物在你所不知的地方发挥着作用,帮助工厂、办公室和学校运转,这看上去跟普通人没太大关系。Web是一个大大的例外,即便政客也承认这个巨大耀眼的黑客玩具正在改变着世界。单就这一个原因(当然还有其他理由)你就需要学习掌握Web。
这并不仅仅意味着如何使用浏览器(谁都会),而是要学会如何写HTML,Web的标记语言。如果你不会编程,写HTML会教你一些有助于学习的思考习惯。因此,先完成一个主页。尝试坚持使用XHTML,一种比标准HTML更清晰的语言。
但仅仅拥有一个主页不能使你成为一名黑客。Web里充满了各种网页。大多数是毫无意义的,零信息量的垃圾——界面时髦,能夺人眼球的垃圾还是垃圾(更多信息访问The HTML Hell Page)。
所以,你的页面必须有内容——得是有趣并且对其他黑客来说有用的内容。这是我们下一个议题要说的……
4. 学习实用英语
作为一个美国人和一个以英语为母语的人,我以前很不情愿提到这点,免得成为一种文化上的帝国主义。但相当多以其他语言为母语的人一直劝我指出这一点,那就是英语是黑客文化和Internet的工作语言,你需要懂得以便在黑客社区顺利工作。
大概1991年的时候我了解到许多黑客在技术讨论中使用英语,即使在他们的母语都相同,英语对他们而言只是第二语言的时候也常如此。据我所知,当前英语有着比其他语言丰富得多的技术词汇,因此是一个对于工作来说相当好的工具。基于同样的理由,英文技术书籍的翻译(如果有的话)通常都不能令读者满意。
芬兰人Linus Torvalds用英语注释他的代码(很明显这不是凑巧)。他流利的英语成为他能够管理全球范围的Linux开发人员社区的重要因素。这是一个值得学习的例子。
即使作为一个以英语为母语的人也不代表你就具备了成为黑客所需的语言技能。一般而言,如果你写得像个半文盲似的,文中充斥着各种语法、拼写错误,多半得不到理睬。虽然不严谨的文笔并不总是意味着不严谨的思维,但我们发现这两者之间的关联还是挺紧密的。而我们不需要这种思维不严谨的人。如果你现在还没有具备这样的书写能力,赶紧培养。
黑客社区的身份
像大部分非盈利社区一样,黑客社区靠声誉运转。你设法解决有趣的问题,但问题是否有趣及解决方法是否有效,需要由那些和你具有同样甚至更高技术水平的人去评判。
因此,要玩黑客这个游戏,你需要以其他黑客对你技能的评判作为对自己的评价(所以我说,在其他黑客称你为黑客之前,你不是一个真正的黑客)。这个事实常被人误解(从1990年代后有所好转,但还是很严重),人们认为黑客都是不在乎别人的评价,孤僻的人。这实际上是一个黑客文化的禁忌。
特别地,黑客被人类学家们称为奉献社区。在这里你不是凭借你对别人的统治来建立地位和名望,也不是靠美貌,或拥有其他人想要的东西,而是靠你的奉献。尤其是奉献你的时间,你的创造力和你的技术成果。
要想获得黑客的尊重,你基本上有5件事情可干:
1. 编写开源软件
首先(也是最传统和最重要的)是写一些其他黑客觉得有趣或有用的程序,并且开放源代码。
(我们曾经把这些程序称为“自由软件(free software)”,但是太多人不能确定这里的“free”是什么意思。现在我们通常使用“开源”软件这个词。
黑客间最受尊敬的圣人是那些编写了大型的,功能强劲且满足了广泛需求的开源软件供他人使用的人。
但是这里有段有趣的历史。虽然黑客一直敬重开源软件开发者,并且他们是我们社区的核心,但是直到1990年代中期,绝大部分黑客绝大多数时间是在闭源软件上工作的。在我1996年写本文的第一版的时候仍然如此。到1997年之后开源软件逐渐成为主流并改变了这一点。现在,“黑客社区”和“开源软件开发者”本质上是对同一文化和同一人群的两种表述——但值得记住的是,曾经不是如此。(想了解更多,请看“历史记录:黑客活动,开源,和自由软件”。)
2. 帮助测试和调试开源软件
黑客也尊敬那些为开源软件进行测试和除错的人。在这个并非完美的世界上,我们不可避免地要花大多数的开发时间在调试阶段。这就是为什么许多开源软件作者都会高度评价那些好的beta测试员(知道如何清楚描述出错症状,很好地定位错误,能忍受快速发布中的bug,并且愿意使用一些简单的诊断工具),认为他们像红宝石一样珍贵。一个好的测试员可以使如恶梦的测试及除错工作变为一件值得经历的小烦恼。
如果你是个新手,试着找一个你感兴趣的正在开发的程序,尝试做一个好的beta测试员。你会自然地从帮着测试,进步到帮着抓bug,到最后帮着改程序。你会从中学到很多,并且与未来会帮到你的人结下友谊。
3. 发布有用的信息
另一个好事是收集整理有用有趣的信息做成网页或文档如FAQ(常见问题)列表,且让他们容易获得。
技术性FAQ的维护者往往如同开源软件作者一样很受人尊重。
4. 帮助维护基础设施运转
黑客社区(也包括互联网发展)是靠自愿者组成的。有大量重要但平淡的事情需要处理——管理邮件列表,新闻组,维护大型软件归档库,开发RFC和其他技术标准等。
做以上事情的人会得到很多人的尊敬,因为大家都知道这些事情需要大量的时间并且不如编写软件那么有趣。这类工作需要使命感。
5. 为黑客社区服务
最后,你还可以为黑客社区做服务和宣扬(比如写一篇“如何成为黑客”的文章 :-))。通常你不会做这些工作,直到你已经做了以上四种中的一样,并且取得了相当的知名度。
黑客社区没有既定的领导者,但是有被人们尊重的英雄,长老级人物,史学家和发言人。当你在这个圈里足够久,你可能会成为他们中的一员。但请谨记,黑客对于自我夸耀的长老并不认同,因此不要尝试大举追求这种名誉。与其奋力追求,不如先摆正自己的位置,等它自己到你手中,那时需要做到谦虚和优雅。
黑客与书呆子(Nerd)的关系
与流行的传说不同,黑客并不是书呆子。但这确实对你成为黑客有帮助,并且很多黑客确实是书呆子。做一个深居简出的人有助于使你更能集中精力做一些重要的事,例如思考和从事黑客活动。
因此,许多黑客甚至以“极客(geek)”(译注:这个词原本在美国俚语中指“反常的人”)为名——这是一种宣布他们独立于普通社会的方式(此外,黑客也通常沉迷于其他一些事情例如科幻和战略游戏)。“书呆子”这个词通常在1990年代也被如此使用,那时候“书呆子”这个词略含贬义,而“极客”贬义更重。2000年以后这两个词的关系发生了转变,至少在美国流行文化上是如此,现在甚至在非技术专家中也出现了以标榜为极客为豪的情况。
如果你能集中足够的精力做好黑客工作同时还能有正常的生活,这很好。现在做到这一点比我在1970年代还是新手的时候要容易的多;如今主流文化对技术怪人要友善的多。甚至有越来越多的人意识到黑客通常是很好的恋人和配偶侯选。
如果你因为生活上的不如意而成为黑客,那也不错——至少你不用分神了。或许今后你能有一个不错的生活。
历史记录:黑客活动,开源,和自由软件
当我在1996年末刚开始写这篇文档的时候,很多情况跟现在是不同的。简单的介绍一下这个变化对于对开放源代码、自由软件和Linux跟黑客社区的关系感到困惑的人们可会有所帮助。如果你对这些不感兴趣,可以直接跳过这里,前往FAQ和参考资料部分。
我描述的黑客精神和黑客社区远早于1990年出现的Linux。我最初进入这个圈子大概是在1976年,其原因可以追溯到1960年代早期。但是在Linux出现前,多数黑客行为是在专有操作系统,或一些自主研发的实验性系统上,例如MIT的ITS,这个系统从未在实验室以外的地方使用过。虽然在早期(Linux出现之前)有过一些试图改变这种状况的努力,但是它们的影响都非常轻微,仅限于真正怀抱这样理想的人群,即使在当时的黑客社区这也是绝对少数,更不论对于世界范围内的通用软件群体的影响了。
现在被称为“开放源代码”的行为,其历史与黑客社区一样久远,但是直到1985年这都只是一个无名的民间行为,没有相关的理论和宣言。这段史前时代在1985年结束,大黑客Richard Stallman(“RMS”)尝试给了它一个名字——“自由软件(Free Software)”。但是这个命名行为也是一个强制要求行为,他为“自由软件”标签加上了大多数已有的黑客社区从不接受的意识形态的包袱。“自由软件”的标签被黑客社区中的一部分重要人物(尤其是与BSD Unix有关联的社区)明确拒绝,并且其余的大部分人也在严肃并且持保留意见的情况下使用它(包括我本人)。
除此之外,大约在1990年代中期以前,RMS想要在“自由软件”口号下定义和引领黑客社区。在Linux崛起之后,这受到了极大挑战。Linux为开放源代码开发活动提供了一个天然的环境。许多在现今被称为“开放源代码”条款下发布的项目纷纷从专有Unix向Linux迁移。围绕Linux的社区呈现爆炸式的增长,比在Linux出现前的黑客文化规模更大且更多样化。RMS想要将这些活动与他的“自由软件”运动关联起来,但是由于Linux社区爆炸式的多样性和该社区的创始人,Linus Torvalds的公开怀疑所阻碍。Torvalds仍然使用“自由软件”这一词汇,因为找不到更好的替代品,但他公开拒绝了RMS的意识形态观念。许多年轻黑客纷纷效仿。
在1996年,当我第一次发布本文的时候,黑客社区正在围绕Linux和一些其他开放源代码的操作系统(尤其是BSD Unix的继承者)进行重组。我们中的许多人曾经在封闭源代码的操作系统上花费大量时间开发封闭源代码软件的集体记忆并没有因此褪色,但是这看起来已经是过去。黑客们将自己作为黑客的定义与开发源代码项目例如Linux和Apache越来越紧密的结合在一起。
然而“开放源代码”这个词直到1998年初才出现。当它出现之后,多数黑客社区在6个月之内采用了它,除了与“自由软件”在意识形态层面绑定的极少数例外。自1998年起,尤其是2003年之后,“黑客”和“开放源代码(和自由软件)开发”越来越紧密相连。今天,几乎已经无法也没必要将它们区分开,并且这一点看起来在将来也不会改变。
然而,曾经并不是这样,这一点值得我们记住。
其它资源
Paul Graham写了一篇名为“Great Hackers”和一篇名为“Undergraduation”的文章,有很多精妙的见解。(中文版详见国内出版图书《黑客与画家》)
年轻的黑客可能会发现Things Every Hacker Once Knew有趣并且有用。
有一篇名为How To Be A Programmer的文章,对如何成为程序员做了详尽的说明。它的价值不仅限于代码及其相关能力上,对于如何在一个程序员团队中工作也有建设性价值。
我写过一篇A Brief History Of Hackerdom。
我写过一篇名为“大教堂与市集(The Cathedral and the Bazaar)”的文章,在文中解释了Linux和开源社区是如何运作的。在它的续集“开拓智域(Homesteading the Noosphere)”中,我进一步深入探讨了这个问题。
Rick Moen写了一篇很棒的关于如何运营一个Linux用户组的文章。
Rick Moen和我共著了一篇关于提问的智慧的文章。它将使你更容易获取到帮助。
如果需要个人电脑、Unix 和互联网如何工作的基础知识,参阅Unix和互联网工作的基本原理。
当你发布软件或补丁时,试着按软件发布实践操作。