Linux/自由软件项目的编写及维护方式,决定其发展离不开网络社区成员的贡献。从这个意义上而言,一个个项目事实上就像一个个开放的大家庭。它们随时向朋友敞开着大门,吸引着越来越多的参与者。社区的成员们都在为社区的发展而努力,为项目的不断成长而欣喜。那么,一个Linux项目是怎样从萌芽走向健壮的呢?它的社区是如何组织及壮大的呢?让我们从最熟悉的GNOME项目说开去。
什么是GNOME项目
GNOME是Linux及各种主流Unix的GUI桌面系统。目前,在GNOME上面已经发展了许多自由应用软件,如文字处理软件Go、电子表格软件Gnumeric、日历程序GNOMEcal、可与PhotoShop媲美的图形图像处理软件GIMP等。与KDE一样,GNOME项目为Linux在桌面领域的发展及应用起到了至关重要的作用。
GNOME不像KDE那样有许多自己开发的工具,而是比较倾向于集成现有的X应用程序,可以允许用户选用任何一种窗口管理程序(一般是WindowMaker和Enlightenment)。GNOME也有自己的办公软件GNOME Office,它也是开放源代码的免费软件。GNOME的应用开发采用同样基于CORBA的Bonobo,类似Microsoft的OLE2。
GNOME桌面环境包括:
◆ GNOME桌面 applet、capplet、panel、wm interaction(sm、pager、rootmenu等)、desktop(icons,file manager);
◆ GNOME开发平台 GTK+、GNOME Widgets、Component Model、FS、imaging、SM、i18n,主要的技术是bonobo、XML、imaging(包括Gnome-Print);
◆ GNOME Office AbiWord、Gnumeric、GIMP、Dia、Eye Of GNOME(EOG)、GNOME-PIM、GNOME-DB。
更加重要的一点是,GNOME是一个大型的GNU自由软件项目,由许多人通过合作创建。在GNOME社区中,大多数人是自愿参与进来的,只在业余时间对项目进行维护;也有一部分人是通过雇佣方式全日工作的,但只占整个社区很小的一部分。可以说,GNOME的成功乃至未来都依赖着这些社区贡献者们;同时,一些商业公司的加入及扶持也对该项目的发展锦上添花。
组织形式及加入方式
GNOME是由一群志同道合者在网络上维护并协作开发的。参与到社区中的人会发现,所有人在网络上通过E-mail and IRC保持着密切联系,也许跟你进行合作的人正是一位走在技术尖端的开发者。想一想也会觉得这是一件有趣而令人兴奋的工作。这个社区和其它的自由软件社区一样,随时欢迎有志者的加入。想要加入这个社区并不困难,登录到其官方网站http://www.gnome.org,在http://developer.gnome.org/documents/joining-gnome/index.html上有项目的详尽说明和简介。在了解完项目的大致情况后,即可进行申请。
申请加入社区的第一步,就是要求申请者按照GNOME项目的类别来选择感兴趣的领域。事实上,并不只有懂得编程的人才能加入社区,GNOME项目的发展需要各方面的人才,例如图形艺术家、文件编写者、翻译(各种语言,进行本地化工作)、网页设计师、软件测试员、软件打包人员、用户界面设计人员,以及其它类别的工作人员。只要你在某方面擅长,并乐于为社区服务,社区会尽力发掘你的潜力,以便为其所用。一般而言,GNOME项目可供选择的领域有以下几个方面(GNOME的子项目):
◆ 访问程序。这项工作的目的是为了提高GNOME的易访问性,从Gtk+小窗口到终端的阅读用户都可实现访问,并提供多种特殊硬件设备的支持。
◆ 文档。这是GNOME的一项十分巨大的工作,包括用户文档(如程序Manual、用户FAQ、GNOME介绍)和开发者文档(如GNOME技术白皮书、开发者指南、开发者FAQ和API文档)。同时,除了文档的撰写外,还有编辑和索引整理等工作。该项工作目前需要大量人员支援。
◆ 图形。GNOME需要几种不同类别的图形,分别应用在网页、桌面、选单及特殊应用程序中。
◆ 打包。这不仅包括源代码的打包,还包括释放软件包、从CVS更新的程序源码,以及为发行和安装打包。
◆ 质量检验。为了使GNOME尽可能地稳定、高效、低Bug,这项工作必不可少。主要进行程序扩展性测试,挑出Bug并将其报告给GNOME错误跟踪数据库。
◆ 声音。在GNOME的桌面事件、程序、游戏等中都需要不同类型的声音。目前,GNOME的声音系统还仅局限在有限系列中,急需人手来制造出高质量、高表现力的声音。
◆ 翻译。GNOME要想被世界上更多的用户接受,本地化是亟待完善的工作之一,已被列入GNOME未来发展计划。该工作量是十分巨大的―对于每一种语言,都要进行全面的翻译,包括对话框、选单、每个应用程序的按钮的字符串,以及用户手册等多种文档。现在我们在使用Red Hat 9.0附带的GNOME时,还经常会遇到局部汉化的问题,这正说明这项工作的必要性。
◆ 用户界面。该项目简称GUP,用户界面设计,使GNOME更易于使用和接近。
◆ 网页设计和开发。GNOME网站是社区成员活动频繁的领域,以及外界接触GNOME项目的窗口。因而这项工作也尤为重要。要求开发者懂得PHP、MySQL、WML或其它脚本编写知识。
◆ 程序开发。主要是桌面系统中应用程序的开发。这项工作并不限定参与者一定要在既定的项目中进行选择―有能力的人完全可以重起炉灶,另辟蹊径,从而体现个人的创造力。如果参与这方面的开发,可以有机会与其他优秀的GNOME开发者一起工作、思考,并从他们身上学习更多的经验和知识。
◆ GNOME平台开发。该平台是一系列的库和工具,应用程序便建立在其上。
◆ 开发者工具开发。开发者本身也需要很多开发工具:GUI-builder(如Glade)、IDEs、字符处理工具(gettext)、错误跟踪器、内存编译工具(memprof)、版本修订控制系统(CVS)、构造工具(autoconf、automake),以及许多其它工具。另外,图片及文档作者、翻译人员也需要一系列的工具来完善和保障工作质量。
申请者可在上述的工作类别中进行选择。每个类别都是一个独立的子项目,都有相关的负责人及维护页面。参与者根据兴趣和特长选中类别后,可以进入相关的网页,查看进一步的信息。每个项目的参与方式可能略微不同,但都需要与相关的项目负责人、联系人沟通,一般而言,很快就能收到答复。
此外,GNOME社区还专门准备了一个Todo数据库(http://www.gnome.org/todo/index.php3),列出的是目前GNOME需要进行的工作任务列表。开发者把认为重要的、自己却没有时间去完成的工作列在上面。每个项目都有详尽的描述和联系方式。参与者可以通过浏览这个数据库选择感兴趣和擅长的领域。
当然,对于一个刚刚加入的社区成员而言,可能很难立刻进入角色。在这方面,GNOME社区也考虑得十分周全,比如GNOME的Love项目(http://mail.gnome.org/mailman/listinfo/gnome-love/),就是帮助刚刚进入社区得成员找到工作任务,并及时获得帮助的一个项目组织。
此外,GNOME社区的网站上面还列出了“如何开始”、“学会开发”、“向GNOME添加应用程序”等指南。
起步及发展历程
目前,世界上有数以千计的Linux及相关自由软件项目有待发展。一个项目从产生到成功承受着多方面条件的约束,适当的成长时机和环境、有能力的组织者和带头人、优秀的参与者、商业基金资助等环节缺一不可。GNOME也不例外。
萌芽
1996年,正值自由软件发展的年代。一个墨西哥籍青年Miguel de Icaza与他的一个在Red Hat公司工作的朋友Elliot Lee,时常在一起讨论有关自由软件的话题,并为促进自由软件的向前发展做着各种努力。在Windows 95推出之后,这两个人都不约而同地感觉到,相对而言,自由软件体系缺乏很多技术元素,使得其在很多领域落在后面。
当时Icaza正在为Linux/SGI项目(由SGI公司提供部分基金支持的一个Linux项目)工作。他不时地抽时间在一些自由软件相关工作上,力图缩短Linux和专有软件之间的差距。在与一位朋友讨论时,其认为自由软件桌面程序缺乏OLE模式的东西的想法,给了Icaza一些启发。他与Elliot Lee一起进行了一些初步尝试,比如,使用libapp功能库来访问应用程序的公共资源(配置管理、近期使用的文件记录、mime句柄等)。虽然这项工作最终并没有真正完成,但却萌发了要生产一整套桌面系统的想法。
当时,KDE项目进展得十分顺利,并且功能已经相对完善。Icaza对此感到十分高兴,并写信给他们建议把KDE的代码纳入Red Hat发行版,还曾致信给Richard Stallman(GNU组织者),让他了解有这样一个有趣的项目存在(KDE当时是基于GNU GPL的项目)。但Icaza很快得到回信:Qt是商业软件,不允许用户修改或发行修改后的拷贝,因而违反了GPL的相关条例;而KDE对Qt的依赖性导致其中的部分程序是非自由软件。
出于对自由软件的热爱,Icaza也曾与Qt的所有者Troll Tech取得联系,希望可以修改Qt的相关许可规则,但是始终没有得到回复。经过一段时间的等待后,他决定自己亲自组织一个Linux桌面系统的项目。
诞生
Icaza从墨西哥国立自治大学计算机科学专业物色了两名学生――Arturo Espinosa和Federico Mena,与他一同从事开发工作,同时他们也在为墨西哥Linux用户协会(Linux Users Group)工作。
在1997年的夏季,Icaza受一个朋友的邀请来到微软,开发基于SPARC的Internet Explorer for Solaris系统(因为其技术专长就是Linux/SPARC)。在微软,他学到了一些关于ActiveX和COM的知识,并开始对这种技术非常着迷。在那里,他还巧遇了一直以来在LinuxNet IRC交流的几个网友。当他再次返回墨西哥时,便与Federico着手设计一套GUI控制的基础构架(基于Unix系统),并将其命名为GNOME。