Linux的发展,是文化的发展
近来看一篇“hacking是艺术还是科学”的文章,由此产生了一系列的联想。由艺术联系到文化是再自然不过的事,人类的历史既是科技的发展史,也是艺术的发展史。艺术(广义上包括文学)和科技构成了文化。而当今似乎科技被从文化中分离开来,于是我们不得不重谈文化。因为同商业主导的其他产物不同,Linux更是一种文化的象征。
第一在linux的媒体上看到马克思的头像觉得很可笑,但是思索一番后方才醒悟:资讯难道不是一种生产资料吗?开源与私有,恰恰就是资讯的分配方式的区别。
软件同货币联系起来时,资讯的圈地运动正式开始。并在几年的你争我夺中拼杀下来。同社会的发展不同的是,软件业是直接从“原始的共产”跳向“资本”形式的。以货币来交换软件的确在一定的时期对经济起到很大的促进的作用。但是却限制了更多的人生产形式更加多样化的软件的能力。长远角度看这是对发展不利的。于是,共有的分配资讯的方式又被一些人重新重视起来。
这种共有资讯的复苏代表这软件的文艺复兴,也就是文化的复兴。开源的意义在于,首先是传播文化,文化产生软件。如同艺术中很难找到两部及其相似油画一样,社区中很难找到两部概念过分接近的软件。这就是开源社区的精神:知识的高度分享,而且高效的利用,最大限度地避免重复浪费。
初期的开源作者也是理想主义者。同早期的无产者一样,资讯无产者也是理想主义者。理想主义者感染理想主义者,却拒绝了更多的实用主义者。一定程度上限制的自身的发展。Eric不是理想主义者,所以当他提出开源作为商业模式时,就同人们第一次听到中国改革开发一样!事实证明这种决定是正确的!不同的文化中都有优秀特点、优秀的人。优秀的特点借鉴过来,优秀的人吸引过来,文化群体才能由此而壮大!相反,如果我们不能同其他群体的人和睦相处,对这些人进行人身攻击和冷言嘲讽,认为linux具有高高在上的优越感。这样非但不能为我们的群体吸引更多的优秀的支持者。也会使其他的群体产生我们本身的群体数字偏低的印象。
Linux同Windows,文化于市场的差别
我个人认为Linux同Windows不存在讨论技术的差别的意义。因为很难指定出一种适普的标准来衡量它们。但是,他们身上一些特点的却十分明显地分别体现出文化与市场的特征:
分发机制
最初的linux用户真正的是from scratch。因为发布的内核同各类的GNU软件分不在网络的各个角落。包括为了拥有图形界面,也要在安装X之后编译大量的其他软件。而为上市而开发的windows却是一个超大的软件包。因为要做到真正的“友好”,不可能让用户用一个月的时间来安装应用软件,何况入门用户还根本无法安装应用软件。大家记得身边有些人是花多长时间理解“添加删除程序的”。
同样,普及或者商业化必然就要走集成的道路。从最早期的红帽子,到GNOME,KDE的问世。社区已经尽力提供了各种手段来促进Linux的市场和普及。当然也越来越类似windows,一些操作方式开始向windows兼容。而近年来国内一个Linux厂商的发行本将这种趋势推至极限,因此相当的受国际社区的反感。
第三方软件的管理机制
除了历史遗留问题和向DOS兼容问题。一些Windows的机制我认为不是一个Linux爱好者们所说的缺陷,而是最大限度的面向市场的结果。下面一一举例说明:
1)目录的管理方式和注册表
windows使用相互独立的第三方软件目录组织方式,并且尽量避免不必要的软件安装到系统的目录下。这样的组织正是市场最大化的结果。由于商业竞争,封闭源代码的原因。每个厂商在开发软件时的命名相互之间经常产生冲突,即使是共享库之间也互不兼容。唯一的办法就是放在各自的目录下。但这样运行程序的时候的路径又成了问题,于是目录的方式必然导致了注册表的诞生,让程序员通过注册表解决路径问题。同样也捎带解决了配置文件的路径问题,可以尽量少的避免使用配置文件了。
linux向来就没有第三方的软件的概念,从unix被发明时起就是这样。所有的软件都装在标准的几个目录下,而信息的高度共享是避免冲突的最有效的方式。这种方式可以把脚本的作用发挥到极限,以我个人的观点:同样是脚本,对windows和linux的意义有本质的区别。二者区别的根本原因就是目录的组织。而由于是信息的透明,如存在操作系统对第三方软件的保密问题,也不存在冲突问题。但是,也注定起不到windows那样的商业效果。
2)病毒的肆虐,历史遗留和市场综合作用的结果
我个人不同意*nix上鲜有病毒是因为用户数量过少的说法。我认为windows上的病毒肆虐主要有两个因素:
首先是历史遗留问题。unix从一开始就是多用户多人的操作系统,所以首先从一开始就要为权限等安全问题考虑,并且制定了一套在相当长一段时期行之有效的安全机制。而DOS的目标是在一个性能十分有限的微型计算机上提供一个简单的系统。这是十分合理的!但是却为后来的系统设计安全机制带来了兼容的问题。这是作为一个厂商和封闭源代码的软件必须考虑的。也导致了早期windows的16位代码等等。而且这些问题一直延伸到最新的操作系统和文件系统。最新的NT内核的系统也从unix身上借鉴了一些特性。但受兼容性的束缚很多问题的解决几乎是不可能的。很多问题不是微软造成的,包括第三方的厂商甚至是用户本身造成的。
具体来说现在装机用户很多都是用在零售商那里的ghost的系统。不论多大的硬盘会被等分4-6个分区。而且全都FAT32的文件系统。而且大多数用户在重新安装系统时也不会将系统分区改成NTFS,更不会改动其他的分区。这样就带来了更多的病毒隐患,而很多病毒是在机制上早就解决了的。
另外,几乎全部的XP的桌面用户每天都在以超级用户身份使用系统。一种原因是因为XP上默认的用户权限就是超级用户。而令一个原因也迫使用户不得不每天使用超级用户,应该是厂商的水平和遗留问题。绝大部分的应用软件,尤其是国产软件在其他低权限的用户的登录上是无法正常使用的。通常情况厂商限于水平无法同系统的安全机制达成一致。比如国产杀毒软件很多,但注册系统服务的不多。我所见的同windows的安全机制结合的最好的恐怕是诺顿的软件。注册系统服务。而且用户数据保存在用户的主目录下(Do*****ents and Settings下的用户名的文件夹下)等等措施保证了无论以任何身份运行登录,杀毒软件都能够正常的起作用。而大多数的国产软件以一个管理员的身份安装之后,在另一个管理员的桌面和菜单上都找不到图标!一些软件将数据包存在安装目录下,这本来就是单用户系统下的习惯。比如QQ,默认情况下低权限用户根本没办法使用正常,要设置Tencent文件夹的权限才行,这样这个文件夹又成了对所有用户可写的了!如果把用户数据保存到Do*****ents and Settings下,每个用户相互独立有什么困难?恐怕是照顾一些使用98的用户或者自己的程序员吧!大家都使用超级用户,好啊!病毒什么的都懒得研究什么权限提升了!想改什么就改什么!记得一个同学叫我去杀毒!我一看现在的病毒真的是简单了!直接把文件名一改省得感染文件了。然后在autorun.ini里加上一条就可以保证运行传播了!而这个病毒据说还是大名鼎鼎的流行!如果大家平时不用管理员的话,这个病毒恐怕根本没有传播的可能!所以IE和firefox都用漏洞,但IE可能就回感染系统,而firefox只能感染用户。这不是系统的问题,只是用户自身的问题,当然系统要对用户养成这些毛病负责!
然后就是市场问题,记得*nix出现病毒或者蠕虫的话。都是有人发布补丁的。蠕虫这里不谈,因为蠕虫主要是通过服务传播的,是服务的缺陷。*nix的每个病毒都象征这一些机制的问题。于是这些机制一旦修正,所有同类的病毒就不会感染了!于是*nix下的杀毒软件其实是查杀通过samba monnt的目录上的windows病毒。但作为windows来讲,病毒意味着意想不到的市场!而且这么大的经济效益也能推动全球的经济增长!用三个代表判断也是对人民有利的!
3)IDE
我觉得不同意那些对linux下IDE环境的看法。对优秀的程序员来说,整个Linux就是一个IDE,只不过你同他打交道不是用鼠标点击,而是用命令和脚本程序。由于上面谈到的目录的优势,所有的程序都被组织在一起了!其实是一个传统IDE的不同功能模块被在不同的几个程序中实现了,而且合作起来也更加灵活。而这个IDE除了软件开发还可办公和娱乐,集成度显然更高了!有些人甚至网页之类的都用脚本来处理写好的带标记的文本来发行出去。如果说哪种IDE更加高效的话,理所当然是这种全自动的方式。
Linux在中国,文化和市场
Linux在中国达到今天的规模完全是市场的作用,说实话教育界起到的微弱的作用让人十分遗憾。人们透过媒体知道了Linux。不管是否处于宣传者的本意,linux被扣上了“高深”的光环。“CLI”、“用于服务器”之类的说法吓走了一批观望者,也有吸引了一批喜欢挑战难度的人眼球。应该说这批人都是优秀的人,但不是全部优秀的人都会对Linux产生兴趣。因为宣传中透露出linux一个特点“不成熟”,“不成熟”意味着没钱途。
人才的缺乏却给了勇敢的人“钱途”。他们成了优秀的程序员或者系统管理员,开发了很多优秀的软件。然而绝大多数为了公司,却很少为了社区。也有人成为了商业unix系统的管理员。
客观地讲,Linux的文化向国内的传播相对于市场向国内扩展是十分缓慢的。大陆的Linux厂商和产品比港台多,但是几乎所有拥有中文化信息的国际开源社区中香港和台湾的参与者都比大陆的活跃,你可以看到支持GB的软件远少于BIG5,zh_CN的文档远少于zh_TW。成熟的程序员们也不愿意些入门的文档。只有少数人以论坛版主的身份整理文章和搜集资料。文档的缺乏和语言的隔阂使我们迟迟不能真正的了解到国际社区的文化,更谈不上回报社区。媒体上的报道全部以市场为中心……国际社区疑惑了,中国人到底对linux感不感兴趣?
关于市场格局的报道太多,我手头没数据没办法评论。但是与一些报道不符的是,作为一种特殊的商业产品。linux的市场不能单单的拿订单来衡量,也不能看政府的笑脸分析。在中国RedHat/Fedora的用户数量占绝对的优势(程序员背景的用户较偏向debian和gentoo),只要到几个中文的Linux社区看看就知道了。这些目前的用户将来一旦成了技术人员就是潜在的订单。这种规模的用户份额除了和国际市场的规模之外,主要和RedHat苦心经营的社区效应有关,通过fedora社区RedHat的开发人员几乎同用户和贡献者们无缝地交流。相比之下急于开拓市场的红旗却没有意识到这一点。多数用户对红旗的了解少得可怜。已经成为制约公司发展的瓶颈。以中国目前的现状来看,社区的意义不仅在于潜在的市场和用户,也是为公司自己培养人才。
个人虽然不赞成制作和发行带有民族气质性的linux发行版本,但还是希望国内诞生越来越多的基于社区发展起来的发行版本的开发团队以及其他的开发人员社区。同市场的昙花一现相比社区的发展壮大才跟家的持久和有力。
文化角度的Linux未来展望
观望这几年国际linux和其他开源系统的发展。社区的发展远远比市场的发展要明显得多,从文化的传播的角度看来这是一种巨大的成功。为了保持和发扬这种成果,我们需要为社区吸引更多的用户和开发人员。让更多的软件使用开源的许可协议。
在国内linux的用户可能会从学校开始逐渐的扩大。但在市场上可能还是体现在更多的商业的Unix的优秀人才的增多。这些人才普遍是在linux社区成长起来的。另外国内的用户会对国际的开源社区有更多的了解。更多的资料被翻译成简体中文。最重要的是国际社区中会出现更多的中国人。国内也会出现一些较为成熟、具有一定规模的开发社区。
Linux程序员和用户身上的优秀的品质和文化气息会吸引更多的人渴望了解和使用Linux面对他们社区的成员们应该比以前有更好的姿态去面对这些未来的同伴们。开源软件除了影响本身的开发人员和用户以外,也会对window下的程序员产生更大的影响,进而促进windows下的开发人员提高自己的水平,能够编写出同系统设计风格一致的软件。在改进安全性的同时也意识到开源对于他们的重大意义。
在同商业模式结合方面我并没有权力去做什么展望。就想去预测股市一样。Linux对未来的意义在于:通过文化的影响力让一些被作为商品的技术尽快的被普及和贬值,以此来消除知识传播的壁垒和刺激更新的技术的不断更新。而对最新的技术开放源代码也可以让这些技术得到最快速的推广和实现。
附:如何学习linux?
做为中国人的特殊情况,学习linux对中国人来说要做的事情相对多了一些:
1、以linux为荣耀,以帮助他人了解和学习linux为己任。
2、坚持访问英文网站,尤其是一些大师的个人主页。坚持阅读英文文档,并尽量翻译你读过的文档发表到国内的社区上供他人阅读和整理
3、了解unix的历史,linux的历史和hacker的历史及文化。
4、尽可能联系所以可以联系到Linux的爱好者,尽可能多的了解你能接触到的最了解linux的人对linux的看法。并于自己的观点相比较。
5、空闲时思索为什么自己喜欢linux,别人为什么喜欢linux。为什么你们喜欢的理由不同?
6、阅读各类的开源许可协议和商业的用户许可协议。对比他们各有哪些问题和优势。
以上使你了解开源文化,是作为一个合格的linux社区成员的前提。
7、安装一个linux的发行版本。
8、尽你最大的能力把你的学习、娱乐或者工作的环境转移到linux上来。尽量避免寻找linux功能类似的软件,而是寻找linux下解决同样问题的通用的方法。并且对比同windows下的解决方法哪种更加优越。
9、学会SHELL编程。SHELL几乎可以作为一个入门语言来学习。最低的要求是能够看懂你自己的版本的linux的配置脚本。理解为什么一些帖子中里提到的配置方法回起作用,并了解你的发行版本怎样从每个配置文件中把设置用环境变量的形式读取并让他生效的。
10、学会安装以各种方式发行的程序,并且让他们的安装同你系统的惯例一致。熟悉X windows的运作方式。熟悉你的发行版本的安全机制,并且学会定制他们按你的需求工作。
如果仅仅是作为用户并且部分体会unix的哲学,上面的几点就足够了。个人认为这几点足够成长为一个合格的Linux用户了。甚至只要再稍稍的扩充就可以制作自己的发行版本了!而对于不同的用户群体,比如办公用户或者科研人员等。第8条意味着不同的标准。
11、选择一门或几门语言社区常用的编程语言。
12、搜集社区或者hackers推荐的图书或资料、网站、新闻组等。
13、选择一个较小的用你当前学习的语言开发的开源项目。阅读他的代码,并且对比他的代码和你形象的编写方式是否相同?哪种更加优越?
14、尝试按照TODO中的要求为这个软件编写代码,并且同他的作者联系。学习autoconf和automake等工具的用法。
15、你也可以不参与项目的开发,但仍然能从代码阅读中获益。如果项目是一种你没有接触到的技术或者标准的实现,那么搜集资料读懂它!
16、学会使用linux下的调试工具,如果软件还不太稳定,可以帮助找出BUG并且改正。并且学会制作patch发给作者。
17、如果曾是windows的程序员,尝试把开发环境转移到linux下来。或者开始在windows的开发工作中使用开源的开发工具和SDK。
18、如果是系统管理员,还要学会在linux部署更强的各类的安全方案。但这已经不属于学习linux的范畴了。
上面介绍了几条学习的要求,主要强调的是学习的态度。至于具体什么样的技术和自己应该在技术层次上的要求,按照上面介绍的方法应该会慢慢的体会到。