GSoC、CSDN 開源夏令營–我的開源社區之旅
這是篇CSDN開源夏令營要求的周記,那邊也許沒什麼人看,發在這裡或許更能讓更多學弟學妹看到,它記錄的主要是我這半年來準備和參與兩項重大學生開源活動的總結與心得,希望能給大家一點點啟示和幫助,也就「掛」而無憾了。
GSoC的落選
谷歌編程之夏(Google Summer of Code, GSoC)是我去年從一個linux新聞網站上看到的。當時並沒有太在意,畢竟google離我還是比較遙遠的(呵呵...),後來在我們重慶Linux用戶組的郵件列表裡有人分享一篇文章《做一名開源社區的掃地僧》,該文作者無比聰明的反覆拿5K美元獎金誘惑讀者,講他為了獲得wine社區開發者的信任,提前一年多開始混社區,從報bug開始做起,總共報了200多個bug最後終於拿到GSoC的資格。
我就是受到這篇文章的啟發,從今年(2014年)春節過後就開始留意這項活動的動向。在2月初開始我就開始選取跟隨具體哪個開源社區申請項目。我仔細考慮過boost社區,還給他們的mai list發過郵件提醒他們的GSoC idea頁面有排版錯誤,沒過多久竟然就有人改了錯誤還回復了我,而且熱情祝我順利申請上GSoC。真的大受鼓勵!不過後來認真考慮後,放棄boost作為我的提案項目。因為我的C++水平還是太水了,畢竟boost是全球最知名的開源項目之一,申報項目的激烈程度肯定超乎想像,我就不拿軟肋和別的高手競爭了。最終機緣巧合,我決定跟隨LTTng項目(lttng.org)來申報我的提案。考慮到之前我的讀研的科研試驗用到過類似的kernel tracer工具systemtap,並且從郵件列表的存檔看還沒有多少人準備抱lttng的大腿混GSoC。(因為貌似是個慣例潛在的申請人都會在心儀的社區mail list上先發個自我介紹先刷個存在感。但也不是每個人都會這麼做,事後證明lttng今年接受的兩個學生之前都從沒有在郵件列表上露過臉,這讓我這個幾乎天天水在郵件列表上的人情何以堪)。
決定下了以後就是像打了雞血一樣看代碼,調程序,在社區和那些開發者混臉熟。而社區裡面開發者基本都在北美,於是我的作息時間也延後了幾個小時,只為了晚上多幾個小時能在IRC上或者郵件列表上和他們實時交流上。那段時間給他們的bug tracker提過bug,發過patch,討論過新的feature,弄得不亦樂乎,後來證明,雖然臉是混的比較熟了,但是為了能選上,proposal還是要有點乾貨或者創意的。
如果要找外在的理由,我的提案是我在一天時間內拼湊起來的!!!我花了比較長的時間去理解代碼,但是卻沒有花足夠長的時間去思考我能在此基礎上添加什麼新意的功能)最要命的是,GSoC的提案deadline時間剛好是我開題答辯同一天!!! 於是本應該專心琢磨提案的時間去拼湊形式化的開題報告了(什麼技術路線、實現方法之類無聊八股)。而我的GSoC提案在最後期限前一天才開始寫,而且之前也沒有形成一個比較有新意的點子出來。我在寫前還和社區指派的導師交流過,他覺得我的點子過於簡單,讓我再做擴展,於是我在最後的一天時間裡勉強寫出了一個我比較沒底的提案。
雖然最後還是落選了,但我覺得那段時間收穫還是比較大的,從技術上說,通過看源碼學到了不少gcc對c的擴展技術比方說c語言的constructor,指定數據、變數存放的段(segment)名,運行時鏈接等等,而且在科研實驗也用lttng替換了systemtap。另外一方面我也了解不少成熟開源社區的工作流知識,這次倉促準備GSoC的努力使我真實參與到開源軟體的開發與討論中去,這是之前自己單打獨鬥寫點寫點小程序所沒有的全新體驗。而這些經驗在幾個月以後就派上了用場。
參與CSDN開源夏令營
就在收到被 Google 拒掉(實際上是被 LTTng 社區拒掉)的消息幾個月以後,看到CSDN要舉辦國內首屆針對學生的開源夏令營活動的消息。自然是非常興奮,果斷點進去查看,幸運的是,竟然又看到了做trace的項目——KGTP。時不我待,我看了項目的簡介和提案說明後就立刻給項目導師朱輝發郵件了。那段時間剛好比較輕鬆,我就開始著手研究起 KGTP 的代碼了。因為有了先前一些經驗鋪墊,所以代碼讀得也不太慢,和朱老師的交流也非常愉快。因為準備過GSoC,所以慣性似地想要儘早給代碼庫做點貢獻,我就從最容易的入手——給文檔挑挑刺入手,(這個可是非常有用經驗,看官下次申請CSDN 夏令營或者GSoC強烈推薦用上這一招,哈哈)開始了參與 KGTP 開源社區活動。後來的後來,朱輝老師就很早的鎖定申請人了。
參與CSDN開源夏令營或與之類似活動的意義
當然獎金是一個顯然的動力,5000元人民幣畢竟不是個小數目,也足以看出CSDN投身中國開源運動所展示的誠意。不過從另外一方面來說,這樣的活動也是引導學生真正參與開源軟體開發中來。我相信對於絕大部分掙扎在普通高校稀爛的計算機專業教育的學生來說,能跟著導師寫個CRUD系統賺點外快是最大成就(至少適用於我所在這所偏安一隅的學校)。在這樣的學校里,上上下下的教師不是忙著拼湊論文,就是開著自己公司賺錢。開源是神馬?不就是拿來抄襲偷懶的東西么。PUDN 這貨一死,估計國內不少研究生都沒法畢業了(好吧,給那貨做了個廣告)。也許參與這樣的活動是這些學生開拓視野、進入開源界的最好途徑。
CSDN與GSoC活動的不同
就目前來看,CSDN第一屆活動就能產生這麼大的影響力還是比較成功的。第一次就能吸引到一批 Intel、紅帽、阿里巴巴、百度國內影響力巨大的公司來指導學生,瞬間感覺高大上有木有。不過邀請這些商業組織這也是有值得商榷的。是的,這些商業公司的開源誠意是有目共睹的,但是他們到底有多依賴社區還是比較懷疑的。舉例來說,類似與KGTP 或者LTTng這樣的純粹依賴社區開發的項目來講,所有的活包括開發新featue到寫回歸測試用例等等都是社區開發者利用自己空餘時間志願完成的。目前幾乎所有的開源社區都缺人幹活:缺人維護就版本,缺人回應郵件列表上用戶的提問,缺人修復bug,確認寫文檔。而商業公司則可以花錢僱人來完成,他們不會太依賴社區人員的參與。所以我認為CSDN開源夏令營更應該支持那些獨立的開源社區,讓更多的學生成為開源社區的新生力量。當然,剛開始為了提升開源夏令營的影(BI)響(GE),拉來這些巨頭來撐檯面不失為明智之舉。不過隨著知名度的提升,應該更多的支持那些用熱情支撐著的獨立社區。
給後來要準備申請GSoC/CSDN活動的學弟學妹建議
1.早關注早準備
提前參與到社區活動中去,從簡單的活開始做起,慢慢刷存在感。就像打怪練級一樣,尤其是申請國際性質的GSoC活動,你如果想抱一個知名開源社區的大腿(類似於blend、boost之類的),如果想從眾多高手中脫穎而出,必須讓社區承認你的能力與對項目的熱情。就像那篇掃地僧文章一樣,提前一年開始,從最簡單的貢獻做起。當你提了200個bug以後沒人會質疑你對項目的熱情程度。當然你要能研究項目一年之久,對他的了解也比一般申請者深刻很多。
2.學會使用標準的通信工具
郵件列表?IRC?這不是上古時期的東西么?確實很古老了,郵件列表不如論壇查找方便,實時性差;IRC 顯然沒有 QQ 功能強大,連離線後頻道(類似於qq群)里的記錄都沒法在下次登錄後顯示,但既然是加入到社區裡面去,就要入鄉隨俗學習使用它們。一開始我還用qq郵箱訂閱了LTTng 的郵件列表,然後社區裡面就有一個2013屆來自浙大的學長發私信提醒換個其他郵箱,之前我是圖省事,後來換上了Gmail 發現 Gmail和mail list是絕配,閱讀與撰寫郵件確實非常好用。同時學習一點標準的電郵格式也是必要的,模仿者別人的郵件格式就沒錯。最後,最好使用自己中文名字縮寫,一方面是正式一些,一方面美國那邊到時候給你郵寄獎品(想的好遠...)。
至於使用IRC看喜好了,我個人比較推崇使用IRC,那裡集中不少高手,很多問題也許在搜索引擎上找不到答案,在相關頻道上提問就有熱心人幫你解答了。有時候你自己看代碼有了什麼問題想不明白的,希望快點得到解答的,就可以在IRC提一下,也許很快社區就有人回答你了。當然還得看時間,比方說 LTTng 社區周末是沒有人處理patch的,他們都認認真真過周末的。另外不要吝嗇表達感謝的言語,多說幾句簡單的thanks是總沒錯的。至於IRC客戶端,我使用的是命令行的irssi,對我來說簡單的聊天已經夠用了,最重要的是它原生支持IPv6. 不需怎麼折騰就能連到 freenode之類的 IRC 伺服器上。使用IPv4 會要折騰一下,具體就不詳述了。
3.摸准社區發展方向,提早準備proposal
CSDN現在還是由導師出idea,給學生省了不少事。如果你要自己寫提案,相信我,真的很難。首先你要對現有軟體有較深刻的理解,知道現在軟體有什麼不足,用戶對軟體什麼新的期望。還有你的提的點子在技術上、時間上可不可行。提案太過簡單或者太過複雜都不可行,太簡單導師會認為你的工作量不夠,或者沒有太大意義,太複雜導師會認為你一個暑假完成不了或者超過你的能力範圍之外。另外寫提案時候是需要從系統架構級別提出改進方案的,因此還是要強調一下要早點開始準備,要不然你是沒法寫出詳細的技術方案的。我建議你在正式撰寫前先和導師好好商量一下,等導師覺得合適的時候再正式寫。不過也許到時候為了公平起見,不會很明確的支持你的想法,但至少會給你的不足提意見,為了儘可能提高勝算,要充分重視這些意見。
好想加入啊。
寫得挺好,多謝分享!
這篇文章真不錯,雖然最後沒有申請成功,但是這樣的經驗反而更寶貴:)