目前世界上最流行的兩大社區(qū)包括Linux開發(fā)社區(qū),OpenSolaris開發(fā)社區(qū)。OpenSolaris憑借其中一些優(yōu)秀的技術(shù)(例如ZFS, DTRACE, ZONE)等,吸引越來越多人員參與進(jìn)去,社區(qū)也正在不斷發(fā)展和壯大。但是,在中國,由于語言問題,由于信息閉塞等問題,在開源界很少能聽到我們中國程序員的聲音,甚至連Linux基金會也承認(rèn),中國對Linux內(nèi)核的貢獻(xiàn)太少。因此,為了讓更多中國同行和中國在校學(xué)生參與開源領(lǐng)域的開發(fā),方便他們很快熟悉開發(fā)流程,便寫了這篇介紹如何參加OpenSolaris開發(fā)社區(qū)開發(fā)的文章。
首先,我們應(yīng)該明白參加開源社區(qū)開發(fā)的意義。
參與開源社區(qū)的開發(fā),有很多好處。
第一,我們的編程能力和軟件工程思想得到了很大的鍛煉。
第二,感受到了開源的精神,為開源做出了貢獻(xiàn)。
第三,有利于個人發(fā)展。
第四,不虛度光陰。
那么參與Sun公司的OpenSolaris開源社區(qū),又有什么特別的意義呢?大家可能一提到Sun公司,首先聯(lián)系到的就是大名鼎鼎的Java,以及 Sun公司糟糕的財務(wù)狀況。Sun公司是一個以創(chuàng)新和工程師文化而著稱的公司,它發(fā)明的東西和對計算機(jī)領(lǐng)域的貢獻(xiàn),遠(yuǎn)遠(yuǎn)不止Java。
Sun在計算機(jī)領(lǐng)域的創(chuàng)新與貢獻(xiàn):
1.TCP/IP,Sun的創(chuàng)始人之一和技術(shù)天才Bill Joy完成了對TCP/IP協(xié)議的實現(xiàn),對計算機(jī)和互聯(lián)網(wǎng)的發(fā)展起到了巨大的推動作用。
2.分頁虛擬存儲(同樣是Bill Joy首先實現(xiàn)了現(xiàn)代操作系統(tǒng)的分頁存儲)
3.NFS網(wǎng)絡(luò)文件系統(tǒng)(Sun公司早在1983年左右就推出了NFS文件系統(tǒng),實現(xiàn)了計算機(jī)的網(wǎng)絡(luò)共享)
4.ZFS首個128位文件系統(tǒng)(有了它,文件系統(tǒng)發(fā)生了革命性的改變,號稱每個操作系統(tǒng)都想使用的文件系統(tǒng),也被贊美為最后一個文件系統(tǒng))
5.DTRACE(探測內(nèi)核活動的利器)
6.VI編輯器(Unix和Linux程序員的最常用工具)
7.JAVA(幾十億部手機(jī),互聯(lián)網(wǎng)都在用它)
8.酷線程(CPU進(jìn)入多線程,低能耗的綠色時代)
SUN目前的產(chǎn)品也非常齊全:
OpenSolaris,
Sparc CPU
MySQL
OpenOffice
Java
Netbean
Glassfish
基于ZFS的OpenStorage
xVM Virtual Box
Sun Ray
從上面,我們可以看出,Sun公司的技術(shù)的確不是吹的,更重要的是,Sun毫無保留的將自己的技術(shù)開源,供大家學(xué)習(xí)和研究。但是,Sun的生意卻做得不怎么好,經(jīng)常虧損,甚至瀕臨倒閉和出賣的邊緣。一方面,我們希望它能站起來,開源的世界不能沒有Sun。另一方面,我想即使Sun倒閉了,但是它曾經(jīng)發(fā)明的技術(shù),將會繼續(xù)得到使用,繼續(xù)得到發(fā)展。
所以,參加Sun的開源社區(qū),擁抱Sun提供的創(chuàng)新技術(shù)和開源精神,是一件很有意義的事情。
那么,如何參加OpenSolaris社區(qū)開發(fā)呢?
1.在
www.opensolaris.org注冊一個賬號,并加入你感興趣并將要在該領(lǐng)域貢獻(xiàn)代碼的某個討論組
(
http://opensolaris.org/os/discussions/)和社區(qū)(
http://opensolaris.org/os/communities/)
2.簽署并郵寄Sun貢獻(xiàn)者協(xié)議(Sun Contributor Agreement,簡稱SCA協(xié)議)
此協(xié)議表明Sun和你同時擁有對你貢獻(xiàn)出的代碼的版權(quán)。
下載并打印SCA協(xié)議書(
http://www.sun.com/software/opensource/sca.pdf)
填寫協(xié)議書并在協(xié)議書上簽名
將該協(xié)議書郵寄到下面地址:
Sun Microsystems, Inc
17 Network Circle
Menlo Park, CA 94025
United States
Attention: Linda Bernal
如果你覺得郵寄速度很慢,可以傳真到+1 650-745-3307
或者將數(shù)字掃描照片(掃描照片要求必須達(dá)到3 megapixels/180 dpi.)發(fā)送到:
[email]contrib-faxes(at)sun.com[/email].
隨后,你將收到一個帶有編號(此編號將在后面你提交代碼時候有用)的確認(rèn)信
關(guān)于協(xié)議書的更多問題,可參考:
http://opensolaris.org/os/project/cn/faq/sca_faq/3.花一定時間學(xué)習(xí)OS開發(fā)的流程和原理
你應(yīng)該具備C語言基礎(chǔ),學(xué)會如何開發(fā)Solaris內(nèi)核的基礎(chǔ)知識,并學(xué)會調(diào)試內(nèi)核程序的基本技能。建議花一定時間學(xué)習(xí)《writing device drivers》。
4.從
http://bugs.opensolaris.org 或
http://defect.opensolaris.org發(fā)布一個你發(fā)現(xiàn)的Bug或查找一個已經(jīng)存在的Bug,這個Bug就是下面你要著手解決的問題。在發(fā)Bug之前,檢查一下是否已經(jīng)有相關(guān)此Bug的一些討論。在你想解決某一個特定Bug之前,請在申請發(fā)起人表(
http://opensolaris.org/os/bug_reports/request_sponsor/)查詢一下該Bug是否已經(jīng)有人負(fù)責(zé)了。如果有人負(fù)責(zé)了,你可以和該Bug的發(fā)起人聯(lián)系要求負(fù)責(zé)此Bug或者查找其它無人負(fù)責(zé)的Bug。
5.確定你要解決的Bug屬于Solaris系統(tǒng)的哪個組成部分(consolidation),例如是文件系統(tǒng),網(wǎng)絡(luò)驅(qū)動,還是聲卡驅(qū)動部分等,確定編碼位置。
6.安裝Solaris系統(tǒng),搭建項目編譯環(huán)境
6.1安裝Solaris系統(tǒng)
編譯OpenSolaris內(nèi)核需要基于Solaris Express Community Edition,所以需要從SUN的網(wǎng)站上下載該系統(tǒng)的CD或DVD格式的安裝鏡像,然后將鏡像刻錄在光盤上,利用安裝光盤安裝Solaris Express系統(tǒng)。該操作系統(tǒng)鏡像可以在
http://www.opensolaris.org/os/downloads/下載,在安裝該系統(tǒng)之前,最好到
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,則可繼續(xù)安裝:
$ su
Password:
# cd /opt
# bzip2 -dc /var/tmp/sunstudio10-20050614.sparc.tar.bz2 | tar xf -
安裝完SunStudio后,繼續(xù)安裝ON相關(guān)的編譯工具SUNWonbld-DATE.PLATFORM.tar.bz2 和SVR4 補(bǔ)?。?a target="_blank" >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創(chuàng)建項目工程,編譯源代碼
下載OpenSolaris源代碼。代碼分兩部分,一部分是開源部分,一部分是未開源部分的二進(jìn)制文件(這部分是很少的一部分,由一些第三方廠家為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系統(tǒng)中(不僅僅是內(nèi)核)還包含了一些尚未公開源代碼的部分,這部分是以二進(jìn)制代碼的形式公開的,所以需要下載該文件。這些文件被壓縮在一個tar文件中,通過
http://dlc.sun.com/osol/on/downloads/可以下載該tar文件。
我們假設(shè) /aux0/testws 作為當(dāng)前工程所在目錄。
首先進(jìn)入/aux0/testws ,解壓源文件和閉源的二進(jìn)制包:
$ 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 而閉源的二進(jìn)制文件將解壓到closed/root_PLATFORM (如 closed/root_i386或者closed/root_sparc))。
下面,我們來完成基本的編譯。
首先創(chuàng)建編譯環(huán)境配置文件:
首先將opensolaris.sh文件拷貝到/aux0/testws/下。
$ cp /aux0/testws/usr/src/tools/env/opensolaris.sh /aux0/testws
設(shè)置/opt/onbld/bin添加到PATH環(huán)境變量中
修改opensolaris.sh:
設(shè)置GATE為testws
設(shè)置CODEMGR_WS 為/aux0/testws
設(shè)置STAFFER為你的登陸名或你的郵件地址,編譯完后將向此地址發(fā)送編譯結(jié)果報告日志
配置VERSION.為uname -v
最后可以編譯了:
$ cd /aux0/testws
$ nightly ./opensolaris.sh &
編譯時間會根據(jù)編譯機(jī)器的性能而不一樣,大概持續(xù)幾個小時,你可以運行下面的命令來監(jiān)視編譯輸出。
$ tail -f /aux0/testws/log/nightly.log
如果不想編譯整個內(nèi)核,而只是想編譯其中一部分,可以先運行bldenv命令,然后切換到某模塊下運行dmake all。例如:
$ cd /aux0/testws
$ bldenv ./opensolaris.sh
$ cd usr/src/cmd/vi
$ dmake all
7.為自己申請一個發(fā)起人(sponsor)??砂l(fā)送Email到[email]request-sponsor(at)opensolaris.org[/email]申請發(fā)起人,或者直接在論壇發(fā)貼申請。信件內(nèi)容應(yīng)包括下面的內(nèi)容:
* Bug/RFE ID
* 概要
* 你的全名
* Sun代碼貢獻(xiàn)者協(xié)議上的編號
8.如果你修改了代碼中供其它程序調(diào)用的接口,你還必須發(fā)布一個被稱為Architecture
Review Committee (ARC)的案例。常見的ARC類型如下:
* PSARC – 系統(tǒng)平臺軟件
* LSARC – 分層軟件,中間件,Web服務(wù)
* FWARC – 固件
* CLARC - Sun Cluster.
9.開始編程,按照自己的思路和想法修改代碼
在某個領(lǐng)域編寫或修改代碼,你應(yīng)該熟悉相關(guān)的理論知識,查找一些相關(guān)資料,參與其中的一些討論,如果是寫驅(qū)動,應(yīng)該拿到相關(guān)的硬件規(guī)范(specification或者datasheet)。
10.檢查代碼的C風(fēng)格是否符合OpenSolaris內(nèi)核的代碼風(fēng)格
$ hg pbchk
運行上面的命令之后如果沒有任何警告信息輸出,則表示代碼是符合規(guī)范的,否則需要逐個修改。
11.編譯并測試代碼
為了測試代碼,我們可能將自己的系統(tǒng)更新到最新編譯后的系統(tǒng),可以采用一種叫BFU的方式以很快的速度更新到最新的系統(tǒng)。
# 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
為了更加方便的測試某個模塊,你也可以直接拷貝編譯好的模塊二進(jìn)制文件直接替換原系統(tǒng)中的文件,重新啟動機(jī)器來進(jìn)行測試。
12.如果測試通過,創(chuàng)建并上傳webrev
$ webrev
Webrev將你修改的代碼和原來的代碼做一個diff,反映出你對文件所做的改動。將webrev生成的文件夾(此文件夾就在項目的根目錄/aux0/testws下)放在一個可供其它人(如代碼審核專家)瀏覽的地方。
13.選擇發(fā)起人或者該領(lǐng)域的專家做代碼審核(code review)
14.如果代碼審核者提出了代碼存在的不足或Bug,則需對代碼進(jìn)行再次修改,回到10點重新執(zhí)行,直到代碼審核者同意提交代碼。
15.等待發(fā)起人最后提交代碼,整個過程結(jié)束(putback)。