<quote>
如何参与OpenSolaris开源社区的开发流程?
作者:逆流的鱼
目前世界上最流行的两大社区包括Linux开发社区,OpenSolaris开发社区。OpenSolaris凭借其中一些优秀的技术(例如ZFS, DTRACE, ZONE)等,吸引越来越多人员参与进去,社区也正在不断发展和壮大。但是,在中国,由于语言问题,由于信息闭塞等问题,在开源界很少能听到我们中国程序员的声音,甚至连Linux基金会也承认,中国对Linux内核的贡献太少。因此,为了让更多中国同行和中国在校学生参与开源领域的开发,方便他们很快熟悉开发流程,便写了这篇介绍如何参加OpenSolaris开发社区开发的文章。
首先,我们应该明白参加开源社区开发的意义。
参与开源社区的开发,有很多好处。
第一,我们的编程能力和软件工程思想得到了很大的锻炼。
第二,感受到了开源的精神,为开源做出了贡献。
第三,有利于个人发展。
第四,不虚度光阴。
那么参与Sun公司的OpenSolaris开源社区,又有什么特别的意义呢?大家可能一提到Sun公司,首先联系到的就是大名鼎鼎的Java,以及 Sun公司糟糕的财务状况。Sun公司是一个以创新和工程师文化而著称的公司,它发明的东西和对计算机领域的贡献,远远不止Java。
Sun在计算机领域的创新与贡献:
1.TCP/IP,Sun的创始人之一和技术天才Bill Joy完成了对TCP/IP协议的实现,对计算机和互联网的发展起到了巨大的推动作用。
2.分页虚拟存储(同样是Bill Joy首先实现了现代操作系统的分页存储)
3.NFS网络文件系统(Sun公司早在1983年左右就推出了NFS文件系统,实现了计算机的网络共享)
4.ZFS首个128位文件系统(有了它,文件系统发生了革命性的改变,号称每个操作系统都想使用的文件系统,也被赞美为最后一个文件系统)
5.DTRACE(探测内核活动的利器)
6.VI编辑器(Unix和Linux程序员的最常用工具)
7.JAVA(几十亿部手机,互联网都在用它)
8.酷线程(CPU进入多线程,低能耗的绿色时代)
SUN目前的产品也非常齐全:
OpenSolaris,
Sparc CPU
MySQL
OpenOffice
Java
Netbean
Glassfish
基于ZFS的OpenStorage
xVM Virtual Box
Sun Ray
从上面,我们可以看出,Sun公司的技术的确不是吹的,更重要的是,Sun毫无保留的将自己的技术开源,供大家学习和研究。但是,Sun的生意却做得不怎么好,经常亏损,甚至濒临倒闭和出卖的边缘。一方面,我们希望它能站起来,开源的世界不能没有Sun。另一方面,我想即使Sun倒闭了,但是它曾经发明的技术,将会继续得到使用,继续得到发展。
所以,参加Sun的开源社区,拥抱Sun提供的创新技术和开源精神,是一件很有意义的事情。
那么,如何参加OpenSolaris社区开发呢?
1.在www.opensolaris.org注册一个帐号,并加入你感兴趣并将要在该领域贡献代码的某个讨论组
(http://opensolaris.org/os/discussions/)和社区(http://opensolaris.org/os/communities/)
2.签署并邮寄Sun贡献者协议(Sun Contributor Agreement,简称SCA协议)
此协议表明Sun和你同时拥有对你贡献出的代码的版权。
下载并打印SCA协议书(http://www.sun.com/software/opensource/sca.pdf)
填写协议书并在协议书上签名
将该协议书邮寄到下面地址:
Sun Microsystems, Inc
17 Network Circle
Menlo Park, CA 94025
United States
Attention: Linda Bernal
如果你觉得邮寄速度很慢,可以传真到+1 650-745-3307
或者将数字扫描照片(扫描照片要求必须达到3 megapixels/180 dpi.)发送到:
[email]contrib-faxes(at)sun.com[/email].
随后,你将收到一个带有编号(此编号将在后面你提交代码时候有用)的确认信
关于协议书的更多问题,可参考:http://opensolaris.org/os/project/cn/faq/sca_faq/
3.花一定时间学习OS开发的流程和原理
你应该具备C语言基础,学会如何开发Solaris内核的基础知识,并学会调试内核程序的基本技能。建议花一定时间学习《writing device drivers》。
4.从http://bugs.opensolaris.org 或 http://defect.opensolaris.org发布一个你发现的Bug或查找一个已经存在的Bug,这个Bug就是下面你要着手解决的问题。在发Bug之前,检查一下是否已经有相关此Bug的一些讨论。在你想解决某一个特定Bug之前,请在申请发起人表(
http://opensolaris.org/os/bug_reports/request_sponsor/)查询一下该Bug是否已经有人负责了。如果有人负责了,你可以和该Bug的发起人联系要求负责此Bug或者查找其它无人负责的Bug。
5.确定你要解决的Bug属于Solaris系统的哪个组成部分(consolidation),例如是文件系统,网络驱动,还是声卡驱动部分等,确定编码位置。
6.安装Solaris系统,搭建项目编译环境
6.1安装Solaris系统
编译OpenSolaris内核需要基于Solaris Express Community Edition,所以需要从SUN的网站上下载该系统的CD或DVD格式的安装镜像,然后将镜像刻录在光盘上,利用安装光盘安装Solaris Express系统。该操作系统镜像可以在http://www.opensolaris.org/os/downloads/下载,在安装该系统之前,最好到http://www.opensolaris.org/os/downloads/on/solex_cr_known_issues/上看看一些已知的问题。
6.2安装编译工具与源代码管理工具
下载sunstudio10-DATE.PLATFORM.tar.bz2(http: //www.opensolaris.org/os/community/tools/sun_studio_tools/sun_studio_12_tools/)。确保 /opt目录有900M空余空间。可通过下面的命令查询空余空间大小:
$ df -klh /opt
Filesystem size used avail capacity Mounted on
/dev/dsk/c1t0d0s0 7.9G 3.8G 4.0G 50% /
如果大于900M,则可继续安装:
$ su
Password:
# cd /opt
# bzip2 -dc /var/tmp/sunstudio10-20050614.sparc.tar.bz2 | tar xf -
安装完SunStudio后,继续安装ON相关的编译工具SUNWonbld-DATE.PLATFORM.tar.bz2 和SVR4 补丁(http://dlc.sun.com/osol/on/downloads/current/):
$ cd /var/tmp
$ bzip2 -dc SUNWonbld-DATE.PLATFORM.tar.bz2 | tar xf -
$ su
Password:
# pkgadd -d onbld SUNWonbld
安装后,我们接着安装源代码管理工具SUNWmercurial(http://opensolaris.org/os/community/tools/scmdownloads/)
# pkg install SUNWmercurial
6.3创建项目工程,编译源代码
下载OpenSolaris源代码。代码分两部分,一部分是开源部分,一部分是未开源部分的二进制文件(这部分是很少的一部分,由一些第三方厂家为Solaris提供的代码而他们又不愿意提供自己的代码开源),两部分都必须下载才能完成编译。
可以通过两个途径来下载OpenSolaris源码:从http://dlc.sun.com/osol/on/downloads/上下载,或通过hg命令从OpenSolaris的源码库里面下载最新的源代码。
Hg通过ssh管道连接到OpenSolaris的源码库。通过hg clone命令可以获得一份OpenSolaris源代码的拷贝:
$ hg clone ssh://anon@hg.opensolaris.org/hg/onnv/onnv-gate
OpenSolaris系统中(不仅仅是内核)还包含了一些尚未公开源代码的部分,这部分是以二进制代码的形式公开的,所以需要下载该文件。这些文件被压缩在一个tar文件中,通过
http://dlc.sun.com/osol/on/downloads/可以下载该tar文件。
我们假设 /aux0/testws 作为当前工程所在目录。
首先进入/aux0/testws ,解压源文件和闭源的二进制包:
$ mkdir /aux0/testws
$ cd /aux0/testws
$ bzip2 -dc opensolaris-src-DATE.tar.bz2 | tar xf -
$ bzip2 -dc opensolaris-closed-bins-DATE.PLATFORM.tar.gz | tar xf -
源代码将解压到usr/src 而闭源的二进制文件将解压到closed/root_PLATFORM (如 closed/root_i386或者closed/root_sparc))。
下面,我们来完成基本的编译。
首先创建编译环境配置文件:
首先将opensolaris.sh文件拷贝到/aux0/testws/下。
$ cp /aux0/testws/usr/src/tools/env/opensolaris.sh /aux0/testws
设置/opt/onbld/bin添加到PATH环境变量中
修改opensolaris.sh:
设置GATE为testws
设置CODEMGR_WS 为/aux0/testws
设置STAFFER为你的登陆名或你的邮件地址,编译完后将向此地址发送编译结果报告日志
配置VERSION.为uname -v
最后可以编译了:
$ cd /aux0/testws
$ nightly ./opensolaris.sh &
编译时间会根据编译机器的性能而不一样,大概持续几个小时,你可以运行下面的命令来监视编译输出。
$ tail -f /aux0/testws/log/nightly.log
如果不想编译整个内核,而只是想编译其中一部分,可以先运行bldenv命令,然后切换到某模块下运行dmake all。例如:
$ cd /aux0/testws
$ bldenv ./opensolaris.sh
$ cd usr/src/cmd/vi
$ dmake all
7.为自己申请一个发起人(sponsor)。可发送Email到[email]request-sponsor(at)opensolaris.org[/email]申请发起人,或者直接在论坛发贴申请。信件内容应包括下面的内容:
* Bug/RFE ID
* 概要
* 你的全名
* Sun代码贡献者协议上的编号
8.如果你修改了代码中供其它程序调用的接口,你还必须发布一个被称为Architecture
Review Committee (ARC)的案例。常见的ARC类型如下:
* PSARC – 系统平台软件
* LSARC – 分层软件,中间件,Web服务
* FWARC – 固件
* CLARC - Sun Cluster.
9.开始编程,按照自己的思路和想法修改代码
在某个领域编写或修改代码,你应该熟悉相关的理论知识,查找一些相关资料,参与其中的一些讨论,如果是写驱动,应该拿到相关的硬件规范(specification或者datasheet)。
10.检查代码的C风格是否符合OpenSolaris内核的代码风格
$ hg pbchk
运行上面的命令之后如果没有任何警告信息输出,则表示代码是符合规范的,否则需要逐个修改。
11.编译并测试代码
为了测试代码,我们可能将自己的系统更新到最新编译后的系统,可以采用一种叫BFU的方式以很快的速度更新到最新的系统。
# mkdir /var/tmp/bfu
# cd /var/tmp/bfu
# bzip2 -dc /path/to/opensolaris-bfu-LATEST.sparc.tar.bz2 | tar xf -
# /opt/onbld/bin/bfu /var/tmp/bfu/archives-LATEST/sparc
bfu# acr
bfu# reboot
为了更加方便的测试某个模块,你也可以直接拷贝编译好的模块二进制文件直接替换原系统中的文件,重新启动机器来进行测试。
12.如果测试通过,创建并上传webrev
$ webrev
Webrev将你修改的代码和原来的代码做一个diff,反映出你对文件所做的改动。将webrev生成的文件夹(此文件夹就在项目的根目录/aux0/testws下)放在一个可供其它人(如代码审核专家)浏览的地方。
13.选择发起人或者该领域的专家做代码审核(code review)
14.如果代码审核者提出了代码存在的不足或Bug,则需对代码进行再次修改,回到10点重新执行,直到代码审核者同意提交代码。
15.等待发起人最后提交代码,整个过程结束(putback)。
</quote>
http://www.trydofor.com/a9w3-auhome/trydofor/article/2009/0310140935/body.htm
<quote>
自由之路之全民开源
作者:臭豆腐[trydofor.com]
日期:2009-03-10
授权:署名-非商业-保持一致 1.0 协议
声明:拷贝、分发、呈现和表演本作品,请保留以上全部信息。
文档目录
1. 开源之'3W'
1.1. 什么是开源(What)
1.2. 为什么开源(Why)
1.3. 如何来开源(How)
2. 选择许可证
3. 开放源代码
3.1. 后起之秀 google
3.1.1. 创建一个google账户
3.1.2. 创建一个开源项目
3.1.3. 完备你的项目
3.2. 中坚力量 sourceforge
3.2.1. 创建一个sf账户
3.2.2. 创建一个开源项目
3.2.3. 开始基本的项目管理
3.2.4. 高级项目管理和申请帮助
4. 对全民开源的一点展望
5. 错误修正和内容补充
1. 开源之'3W'
1.1. 什么是开源(What)
开源是开发源代码(open source)的意思,一般指开源软件(open source software),
但并不仅限于软件。开源软件也是一种自由软件(free software)。
自由软件强调的是用户使用软件的自由,而不是价格(更不是免费的意思)。
通常,如果一个软件赋予用户如下4个自由度,那么这个软件就是自由软件:
- 出于任何目的,运行软件的自由。
- 学习软件如何工作,以及为了满足自己的需要修改软件的自由。
- 为了帮助你的邻居,将软件拷贝给他的自由。
- 为了能够让整个社团受益,公开发行改进之后的软件的自由。
显然,2.与 4.的前提是能够访问软件的源代码,因此自由软件基本上是开源的。
但是,GNU/GPL的自由软件哲学更关注于自由和社区利益,其自身的"传染性",
并不适合于商业软件和专有软件,因此便出现了更为实用和中庸的开源软件。
开源软件是与GNU的精神一脉相承的。但与GPL相比,开源软件允许更大[[!授权自由]]。
这样专有软件可以混合开源软件,人类的智慧得到更为自由的继承和传播。
1.2. 为什么开源(Why)
开源是历史的发展趋势,是社会进步,文明发展的需要。
看看商业的精英们都在做些什么吧(按字母顺序排列)。
- Google : 对开源提供了非常多的关注和支持,比如Chrome和code.google.com等。
- IBM : 对开源的支持和透支相当巨大,最具代表性的是eclipse。
- Microsoft : 加快与开源社区的协作步伐,并开放了.NET Framework。
- Sun : 开源了很多产品,比如OpenSolaris/Java/OpenOffice/NetBeans/Classfish等。
目前绝大部分商业软件都能找到其开源的替代品。
并且很多优秀的开源软件也广泛的应用到了商业软件之中去。
另外,参与开源项目,读源代码也是程序员最佳实践之路。
不论是从个人角度,用户角度,商业角度,还是全人类社会的角度看,开源都非常有意义。
1.3. 如何来开源(How)
开源软件的定义由开源促进会(OSI http://opensource.org/)负责。
一个软件满足以下两点就可以认为是开源软件了,
- 选择一个或多个OSI认证的开源许可。
- 以选择的许可来开放你的源代码。
当然,开源并不仅限于软件,也可以是文档,还可以是一种思想。
包括对开源的宣传,使用和反馈都是对开源的支持和贡献。
2. 选择许可证
通过OSI的开源许可证非常之多。
而如何使用开源软件许可证和如何使用开源软件到商业软件中去,
则是个非常大的话题,并且还会涉及到专业的法律知识,这里不做具体讨论。
简单来讲,应用比较多的有以下三种许可证:
- BSD许可证,可使修改专有,适用于商业性发行且不愿公开自己所修改的源码。
- GPL和LGPL许可证下的源码总是自由的,LGPL是GPL的一种宽松许可证。
- MPL许可证,可将软件(和任何对其的修改)分为受保护部分和贡献部分。
3. 开放源代码
开放源代码,现在是件非常简单的事情,互联网上有很多优秀的项目托管平台,
他们提供了比较成熟的开发,测试,发布,反馈的一些列框架和服务。
优秀的软件层出不穷,每天都有新的开源项目加入。
3.1. 后起之秀 google
google的哲学就是简单,code.google.com很快成为开源大军中的一枝独秀。
google开源服务可以通过以下任何一个连接进入
3.1.1. 创建一个google账户
创建一个新的开源项目,首先要有一个google账户。
从上面的连接进入,选择"创建 Google 帐户",
然后填写表单,验证码和同意服务条款,非常简单。
google账户可以使用很多的google功能和服务,
比如,igoogle/gmail/gae等,因此建议人手一个。
3.1.2. 创建一个开源项目
打开页面,完成以下项目的填写,
- 项目名称(Project Name),比如a9w3(要求小写字母(a-z),数字(0-9),连字符(-))。
- 简介(Summary),显示项目时,其后面的一行简介。
- 描述(Description),项目首页的主要介绍(支持wiki格式)。
- 选择许可证(Select a license),选择合适的开源许可证。
- 类别标签(Labels),方便分类用的标签。
3.1.3. 完备你的项目
一般来讲通过自己账户下的"我的项目(My projects)"可以访问你的所有项目。
也可以通过网址直接访问 http://code.google.com/p/a9w3/
项目首页提供了以下几个标签,
- ProjectHome:项目首页,显示项目简介和描述。
- Downloand:提供了下载页面。
- Wiki:项目文档或手册。
- Issues:用来跟踪需求或缺陷等。
- Source:源代码版本管理(svn)。
- Administer:对项目进行全面设置,包括成员,SVN,邮件通知等。
每一个标签都点击一次,每行说明都读上一下,你的项目就基本完备啦。
然后,下载个svn客户端,提交第一份代码,开始你的自由旅程吧。
3.2. 中坚力量 sourceforge
如果说code.google是"项目托管"(Project hosting)的大众版的话,
那么,sourceforge.net(sf.net)就是专业版了。
sf.net作为老牌的开源项目发祥地之一,提供的服务,相当于一台虚拟机。
PS:因为某些作者喜欢表达个人的政治意愿,导致sf.net在某段时间会被封杀 :(
3.2.1. 创建一个sf账户
从首页的""开始或者点击以下连接,便可以进入创建账户的页面了。
填好必填项目,便可以获得一个账户了。
另外,sf可以使用OpenId登陆,并自动完成注册。
(PS:sf提示到:用户需要满18周岁,或者有监护人同意。)
3.2.2. 创建一个开源项目
一共需要以下3个步骤,
- 填写项目信息(enter project information)
要求英文填写,有字数限制。项目名和unix名一般保持一样。 - 选择许可证(select Licenses)
这个比较容易,如果没找到,可以打开全部许可证。 - 选择分类(select project categories)
必须选择5个分类,"topic"分类必须选择。 - 同意服务条款(user agreements)
同意所有条款,提交后,等待sf.net的审批。
可以看到 sf.net 上申请一个项目是非常严格的,尤其对英文不好的同学们。
而且要注意时差,一般来讲一个项目审批大概需要几个工作日。
3.2.3. 开始基本的项目管理
假设a9w3是你的项目名,那么下面就是你的项目地址。
可以看到基本的功能都列在以下的标签中,
- Summary: 首页,显示项目基本信息。
- Tracker: 需求,缺陷跟踪,还有更多。
- Mailing Lists:
- Forums: 论坛,文档等。
- Code: 提供了cvs和svn两种服务。
- Download:* Documentation: 比论坛更正式的文档。
- Tasks: 开发者使用的,比Tracker更严格些。
- Project Admin: 项目管理功能。
以上的标签都含有很多子菜单,每个菜单都有特殊的意义。
如果不清楚如何使用,可以参考其他项目的使用情况。
或者使用sf的"帮助"(help),都是英文的,但不难读懂。
3.2.4. 高级项目管理和申请帮助
sf.net 提供的功能非常多。通过 "Project Admin/Feature Setting"设置。
| <table>Feature |
|
sf提供的功能还原不只以上这些,可以通过下面的连接学习各种服务的使用。
个人认为比较有特色的功能有以下几个,
- web 提供web主机,可以放置静态或动态网页。
http://apps.sourceforge.net/trac/sourceforge/wiki/Project%20web - shell/ssh/sftp,这就相当于提供了一台虚拟服务器。
http://apps.sourceforge.net/trac/sourceforge/wiki/Shell%20service - database(MySQL)功能。
http://apps.sourceforge.net/trac/sourceforge/wiki/Project%20database - Virtual Host,可以绑定域名到项目。
http://apps.sourceforge.net/trac/sourceforge/wiki/Custom%20VHOSTs - CVS 服务器管理,比如删除错误目录,模块。
http://apps.sourceforge.net/trac/sourceforge/wiki/CVS
sf提供了非常详细的文档和手册,还有在线的人工支持。
边使用边对照其文档,可以很快的掌握sf的整个项目周期内的各种操作。
4. 对全民开源的一点展望
国外媒体InfoWorld总结出了与开源相关的2009年五大趋势,
- 开源更加商业化。
- 试验更多商业模式。
- 更多收购交易。
- 用户社区力量更加强大。
- 开源更加主流化。
希望本篇简短的介绍,能帮助大家了解,推广和加入开源社区。
开源不论对个人,团体,企业,都是非常有益和有意义的事情。
同时,开源也是一种自由的精神和哲学。
5. 错误修正和内容补充
补充 2009-03-11
非常感谢 哲思社区 徐继哲 的指点。
"但关于自由软件哲学和开源软件哲学,其中的理解和表述基本是错误的。"
"基本"这个词,我想是一种谦虚的表达。
所以本文中关于非技术的部分,存在很大的误导,非常抱歉。
但考虑到文章的完整性和本人对哲学的理解还不够,
所以暂时不做修改,请见谅。
请仅参考本文中使用code.google和sf.net的技术相关的内容。
</quote>
