热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

黑客们的故事(连载六):IT世界里的理想主义者

一头疏于梳理的长发和一把肆意生长的大胡子,往往可能是人们对于理查德马修斯托曼的第一印象。这位马上就要过60岁生日的自由软件基金会主席不用手机、不买房、没有汽车,看起来像是个流浪汉,

      一头疏于梳理的长发和一把肆意生长的大胡子,往往可能是人们对于理查德马修斯托曼的第一印象。这位马上就要过60岁生日的自由软件基金会主席不用手机、不买房、没有汽车,看起来像是个流浪汉,但是却是美国工程院院士、麦克阿瑟奖得主,以及五所大学的荣誉博士和两所大学的荣誉教授。同时,他也是世界上最著名的黑客之一。

                           技术分享

站在比尔盖茨的对立面

斯托曼和比尔盖茨有些相似之处。他们年纪差不多,都在大城市出生和长大,都曾在哈佛大学就读,都是程序员;但是,他们的主张却截然不同。比尔盖茨致力于消除盗版、保护版权;而斯托曼则主张源码共享、自由复制。比尔盖茨和他创立的微软公司让软件行业一度成为年轻人就业的首选,斯托曼的自由软件运动则催生了Linux和难以计数的自由软件,让全球十亿的计算机用户有了更多选择——脱离软件公司的控制,而且免费。

斯托曼对计算机的兴趣是在高中萌生的。他在纽约曼哈顿的IBM科学中心展现了对计算机技术的兴趣与天赋,并且由此在暑假中得到写一个数值分析程序的机会。1971年,十八岁的斯托曼进入哈佛大学,同年就受聘于刚刚成立不久的麻省理工学院人工智能实验室,一干就是十几年。就是在这里,他开发了被称为“神的编辑器”的Emacs。

在这十几年中,斯托曼也成为了计算机历史的一部分。他目睹着计算机从庞然大物变成桌上必备品的过程,也经历了软件行业迅猛发展的浪潮。成千上万聪明的年轻人投身到这个行业中,商业软件公司纷纷建立,施乐、苹果和软件这样的公司成为新的偶像,写软件、卖出去、挣大钱,正成为这个行业的新规则。

但是斯托曼并不喜欢这样。他一直认为,软件这种智力产物应该是可以免费获取和免费分发的。软件是由黑客的兴趣凝成的结晶,以金钱为代价阻碍它们的流通,将会禁锢思想和抑制创造。他认为人们有发自内心的创造渴望,而限制这种渴望,本身就是犯罪。

最后一个黑客

 1983年,比尔盖茨善于软件版权的论述已经深入人心, 人们已经接受把软件作为商品看待的想法。麻省理工学院人工智能实验室的几句程序员离职创办了一家公司,走上了模仿微软公司的道路。也就是从那时开始,斯托曼决心发起自由软件运动。

他认为,软件的商业化不仅会阻碍计算机文化的发展,还会让人们丧失自由。当人们受制于某个不发布源代码的商业软件,也就同时受制于软件公司。用户无法自由地改变软件来适应看书的工作和生活,也无法确定软件中是否有让自己受到伤害的东西。

虽然世界上大多数人并不是程序员,无法自由修改软件的源代码来添加自己想要的功能,但是这并不是重要,对于软件源代码的诉求是道德上的,软件公司本来有义务向用户提供源代码——用户自己是否能修改并不重要。

1984年1月,自由软件基金会成立,斯托曼差不多是一个人和整个行业对抗。当时他只能睡在办公室里,没有钱,民不知道接下来会发生什么。他就像唯一的战士,面对迎面杀来的千军万马,手里的武器却只是一根牙签。

第二年,自由软件基金会发布了“自由软件通用许可证”,任何使用这种许可证发布的软件,都允许其他人查看、修改和传播软件的源代码,并且在传播软件的时候,也要同时发布源代码。斯托曼说:“我试着从总体上改变人们接触知识和信息的方式。我认为个人独占知识、控制人们使用知识,或者企图阻止人们共享知识,都是一种蓄意破坏行为。这种行为只有利于这样做的少数人,而代价却是让全社会都变得更贫困。”

作为一个黑客,斯托曼认为真正的黑客们本来就不是为了钱才工作。好奇心、乐趣和成就感是他们的驱动力,如果获得额外收入的话,那可算是某种意外。事实证明,真正的黑客还为数不少。自由软件运动开始发展壮大,应用软件、编译器直到操作系统都有了能替代商业软件的自由软件,它们的使用者也越来越多,从个人到企业和组织,都在从自由软件中受益。

改变了这一切的斯托曼,已经成了黑客中的传奇。他的名字有了专用的缩写rms,他那标示性的长发和胡须也成为黑客精神的象征——虽然热爱自由的黑客们不会把它的头像像切格瓦拉的头像那样印在T恤上。

黑客们的故事(连载六):IT世界里的理想主义者


推荐阅读
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • 本文介绍了一种解析GRE报文长度的方法,通过分析GRE报文头中的标志位来计算报文长度。具体实现步骤包括获取GRE报文头指针、提取标志位、计算报文长度等。该方法可以帮助用户准确地获取GRE报文的长度信息。 ... [详细]
  • PDF内容编辑的两种小方法,你知道怎么操作吗?
    本文介绍了两种PDF内容编辑的方法:迅捷PDF编辑器和Adobe Acrobat DC。使用迅捷PDF编辑器,用户可以通过选择需要更改的文字内容并设置字体形式、大小和颜色来编辑PDF文件。而使用Adobe Acrobat DC,则可以通过在软件中点击编辑来编辑PDF文件。PDF文件的编辑可以帮助办公人员进行文件内容的修改和定制。 ... [详细]
  • CentOS 6.5安装VMware Tools及共享文件夹显示问题解决方法
    本文介绍了在CentOS 6.5上安装VMware Tools及解决共享文件夹显示问题的方法。包括清空CD/DVD使用的ISO镜像文件、创建挂载目录、改变光驱设备的读写权限等步骤。最后给出了拷贝解压VMware Tools的操作。 ... [详细]
  • 深入理解CSS中的margin属性及其应用场景
    本文主要介绍了CSS中的margin属性及其应用场景,包括垂直外边距合并、padding的使用时机、行内替换元素与费替换元素的区别、margin的基线、盒子的物理大小、显示大小、逻辑大小等知识点。通过深入理解这些概念,读者可以更好地掌握margin的用法和原理。同时,文中提供了一些相关的文档和规范供读者参考。 ... [详细]
author-avatar
jx轩宝妈咪
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有