一個項目開源到底有哪些考慮?

開源像一股風一樣,我還沒弄清楚為啥被吹得頭昏腦漲了。開源對大多數普通用戶來說沒有任何意義,對於小部分人來說沒什麼利益。

請勿噴,我看《大教堂與大集市》真看不下去。

對於一般應用軟體開源與不開源的利弊到底從哪些方面考慮?開源者不會為參與者的工作著想而把他的項目開源吧。


我有個小項目 Sprite Sheet Editor 用來把遊戲資源中的碎圖拼成Sprite Sheet。以前是自己在項目中使用,後來發現還有許多同行有這個需求(免費的都不太好用,除了TexturePacker,可惜這個不免費),於是就發布出來大家用,源碼託管在Github上。非私有庫,但沒宣傳。

然後,故事就開始了。

  1. 先是有人要我免費提供修改服務,把他們需要的XXYYZZ功能給加上;
  2. 然後有人問我這個軟體應該怎麼破解;
  3. 然後有人說在Github上找到源碼了,應該怎麼編譯?

  4. 然後有人就把軟體反編譯了(AIR編寫的軟體不混淆的話很容易反編,文件格式是公開的)問我這段代碼那段代碼的作用;
  5. 然後有人直接赤果果地找我要源碼;
  6. 當然也有人找我付費加功能;

  7. ......

我對這些郵件都做了很認真的郵件回復,告訴TA們源碼在哪裡可以下載,應該怎麼編譯,Git應該怎麼用;告訴TA們 Flash Builder 和 Flash Develop 的區別,AIR SDK with compiler 和 Flex SDK 應該怎麼選擇,Adobe Flex 和 Apache Flex 有什麼基情;然後請求TA們如果增加了新功能,希望能 PR 給我,我會在源碼裡面和軟體裡面標識TA們的名字……

然後……

然後就沒有然後了。

這些人得到自己需要的東西之後,就消失了。

沒有郵件,也沒有回復,至於感謝?連個屁都沒有。

後來我想想,我真的是為了感謝來做這些事的么?我真TMD幼稚。

所以,我把這個小東西開源了。

然後……

再也沒有人給我發郵件了。多清靜。

這就是我的考慮。

=====================

摘抄一段我在這個小東西介紹頁面上寫的話:

關於開源

經常有網友發郵件給我,索要 Sprite Sheet Editor 的源碼。其實 Sprite Sheet Editor 的源碼一直都託管在 Github 上,如果有心的話,動動手指就能搜到。

Sprite Sheet Editor 和其配套類庫一直是我和我所在的團隊使用的工具,我們用它完成了1個頁游和2個手游。我對它的修改,都是基於我自己工作中的需求。

我一直沒有在這裡公布的原因,是處於這樣幾點考慮:

  1. 源碼並不成熟,公布出來可能會嚇到小夥伴們;
  2. 沒有人願意幫助我完善這個工具。大多數人都是只知索取的,這點在我另外的兩個開源項目 ANEToolkit 和 PlatformANES 上我已經深深的體會到了;
  3. 我會變成免費的工具。沒人願意幫我修改一個bug或貢獻一行代碼,而我卻需要不斷實現別人要求的功能;
  4. 這個工具的作者會變成別人。我指的是,把源碼拿去,把我的名字刪去改成另一個,再聲稱這是另一個名字的人的作品。在我10年的博客生涯中,這種事情發生過許多許多次。

當然,我發現我的考慮太幼稚。用江總書記的話來說,是 too young too simple sometime naive! 我也實在不該強迫別人也有開源精神,我不能要求別人和我用一樣的方式思考。

再說了,誰會真的在意你這個沒完成的破軟體?誰會吃飽了沒事幹拿出時間和精力來幫你?

所以,儘管拿去吧!

有能力的人,希望能多付出一點,少索取一些。


題主提到了「從利弊角度考慮」,那麼我從利弊角度分析一下。

開源:

1、通常意味著免費。(有些情況是劣,有些情況是優)

2、當你的客戶大部分都是程序員時,被接受的門檻更低。(優)

3、擁有了一個新的、免費的傳播渠道。(優)

4、版本出現過多、不可掌控的分支的可能性更大(劣)

5、項目中不完善、欠缺的地方 更易被人發現(大部分情況劣,偶爾是優)

6、當你製造的東西真的有意義(而不是重複的輪子的時候),會有人願意為你的項目添磚加瓦。(優)

7、別人不按照預期使用你的軟體的可能性更大(劣)

所以從利弊角度來說,選擇開源大致有以下幾個原因:

1、賺名聲。大致類似於做公益事業。個人為自己簡歷增色或公司改善形象 均屬此類。

2、盈利模式轉型。認識到靠產品授權銷售的方式並不是有利於成長的最佳選擇,轉型到更易傳播的、以服務或其他形式為主要盈利方式的盈利模式上去。

3、為了其它戰略目標,而將某些支線產品開源,或經營開源產品,以吸引關注度和獲取用戶。

4、也有一些公司從事或者支持開源事業是出於專利戰或規避專利風險的考量

5、如果你認真讀過開源協議,研究過一些開源軟體,你就知道,即使開源,產品也可以用一個不同的license繼續銷售。這不失為一個不錯的試用轉正式的手段。尤其是你的客戶大部分是程序員的時候。

不過話說回來,做什麼事都要從利弊角度多無趣呢,尤其是咱們程序員,對吧。

------------------------------------------------------

不同意樓上幾位同學的」(希望別人幫你改進項目是不現實地,這是小概率事件。)「,對於有著類似體會的開源作者,我個人覺得有幾種可能的原因:

1、所做的事情並非別人真正需要的東西,或者已經存在了比你們更優秀的競品(如果已經存在,為什麼不做一個分支,而要自己從頭開始呢?當然,有時候從頭開始是有必要的,但從頭開始就意味著你要從頭進行一個長期的爭取用戶的過程)

2、並未持續有效的進行維護更新,傾聽用戶的心聲,改善自己的作品

3、並未進行線上線下並行的有效宣傳,和早期、深度用戶深入的接觸,鼓勵他們加入開發。

4、不即時處理、不尊重 別人嘗試為你的項目作出的貢獻。有些項目 半年聯繫不到作者 是很常見的,還有一些reject掉別人的pull-request以後 連個理由都不寫。這都是阻礙別人為你的項目進行貢獻的原因。

5、開源協議設置不合理,阻礙了尤其是企業用戶成為項目使用者的可能性。

簡單的說,如果你自己都不認真對待自己的開源項目,抱著」反正也賣不到錢,丟上去看看有誰感興趣吧「的態度,那期待別人幫你改進項目自然是一個瞎貓碰死耗子的事情。而那些真正成功的開源作品,有幾個是只有author一個contributor的?

開源項目也是項目,也需要不斷改進、積累用戶。 縱然平均一萬個用戶里也只有一個願意給你貢獻個幾行代碼,那當你有一百萬用戶的時候,你不就有一百個contributor了?

補充一句。

「讓別人幫你改進項目」,不等於「讓別人來幫你堆代碼」。這是有本質區別的。


早期的開源軟體作者,更多的是價值觀方面的考慮。現在很多公司在積極的開源,更多的是從公司形象、建立競爭壁壘、搞好社區關係等方面考慮的。還有很多跟風的,以前也沒有做過開源的,現在也都噼里啪啦的做開源了。

天上風在吹,一陣一陣的,不知道哪一天風向變了。呵呵。


新項目中,無論是團隊之間的設計方案,或者分享,都需要一個平台來託管,但又不方便公開。一開始我們是在自己搭建的gitlab里的wiki寫的,有兩個很不方便的地方:

  1. 文檔是分類的,需要相應的目錄嵌套,同時可能是多個項目的,而gitlab的wiki不支持目錄嵌套,更沒有多個項目的說法
  2. 最最不能忍受的就是居然不支持中文,簡直就是種族歧視!說好的unicode呢?

然後就有了:walden瓦爾登是怎麼被開源出來的。

當然,公司落後的不只是文檔,上線系統也沒有自家的,capistrano 命令行的雖好,但開發者不能自主上線。每次開發完之後還要肩負SA責任上線,實在忍不了,然後也就有了現在開始流行的 meolu/walle-web · GitHub 瓦力部署系統。

上線開源一個半有收集近400星(好吧,我承認在國內收集star不容易,大家都比較吝嗇),接收使用者的反饋,每周開發todo list的一部分,發版通過群成員嘗試新功能,反饋再改進,目錄已經進行到0.8版本。

每次發布新版本,都是每天下班後加班到凌晨開發和寫單測驗收的心血,現在已經有不少公司已經在線上部署使用了,想到這個就有動力繼續更正下去。

而且,我相信walle-瓦力將來會越來越好,甚至搶下jenkins用戶:)


譬如說我www.gaclib.net 之所以開源,是因為直接使用源代碼是使用gaclib的最好的方法,dll怎麼弄都彆扭。所以我乾脆就開了。C++的特性就是傾向於開源的。

當然,大家很容易就會因此知道,其實我自己也囤了大量的沒有開源的代碼,我也從來不提他們(逃


這是一個很常見也很直白的問題。可能你之前也問過類似的問題,比如為什麼入侵他人的系統?為什麼編程?為什麼寫作?為什麼繪畫?如果你問別人這樣的問題,你得到的答案可能會有「好奇而已」,「造些漂亮的輪子」,「學些新東西」。
這都是些絕佳的答案,簡單來說就是純粹為了創造或者改進。但是為開源社區做貢獻除了創造之外往往還意味著放棄其成果(或許可以收穫幾行許可說明)。當有人問我你為何為開源社區做貢獻的時候,我會直接問我為何開放我的源代碼。

這個問題更難回答,其答案也遠比回答為什麼有些人會單純的去創造些東西來的複雜。是什麼驅使你花費大量的時間,精力有時還有金錢去開發應用然後將其源代碼開放?這些人的動機和目標一般不同,有些是對社區的好意,有些是看到其作品被重視後得到的自我滿足。但是拋開一切細節,你會發現只剩下一樣東西:認可。

如果你閱讀有關社區的書籍或材料的時候你會發現其一個重要的主題一定是對參與者的貢獻進行認可。事實上,如果你對比較成功的社區有所了解的話,你會發現其共同之處在於它們都用認可交換參與者的貢獻。這才是社區的動力。認可連接著參與者與社區的目標,又自私的因素也有無私的貢獻。其實,為開源做貢獻的結果只有一個就是又被認可的機會。即使是最不嚴格的許可都要求說明作品的作者是誰。

現在我們轉換一下問題:他人為何參與你的開源項目呢?如果他們也是尋求認可的話,那麼你有準備給他們嗎?我並不是說你的意圖,我們假設一下,你打算認可這些參與者,我說的是你做了哪些工作(設定認可流程和安排人員)去給他們呢?

我們使用了非常好的工具讓參與者能夠更快、更容易、更高效的做出貢獻。這些工具一般能夠把這個過程中的人員障礙去掉。但是,人的認可仍然是最重要的。默默的合併某人的補丁或者分支僅僅把他們的名字保留在提交日誌的這種做法里遠不及親自對他們做出感謝或者把他們的貢獻事迹張貼在社會媒體上。讓他們知道你是重視他們的工作的,更重要的是讓他們知道你感謝和欣賞他們所做的貢獻。

翻譯錯誤之處敬請拍磚,原文鏈接:Why do you contribute to open source?


開源經歷就是最好的簡歷

這事不只一次被吐槽了


從個人角度來說有以下好處。

1.將自己編寫的一些通用代碼存到開源項目託管的伺服器上,避免硬碟損壞,電腦被偷等各種悲劇事件的發生。而且源代碼託管的都有版本管理,不用拷貝來拷貝去。

2.將自己的作品展示出來,在作品中體現自己的水平。對於不善言辭的程序員來說,這是對自己能力的一個體現,所謂 talk is cheap ,show me your code。

說一點腦洞大開的。

開源其實是程序員的自救措施,當開源的工具足夠多和足夠大的時候,開源標準會成為實際上的標準,開源產品也會成為大部分公司的選擇。這無疑保證了程序員的流動性。當大家都相互封閉各做各的,知識的交流變少,人員的流動也會變少。


1.供別人學習。

2.為了免費使用github。

3.給自己賺點小名氣。

4.讓這世界變得好一點。

(希望別人幫你改進項目是不現實地,這是小概率事件。)

其實一切沒你想的那麼複雜,比如知乎就是一個開源平台,不過開源內容的是知識而已。

最後,誠摯感謝每一個開源項目作者。


開源是加班的罪魁禍首...


我來說下

目前發布了2個項目

1.https://github.com/ccsdu2004/gaudio/ 沒法賺錢 所以開源

2.https://github.com/ccsdu2004/BGE 僅僅是好愛 開源

還有一個是股票方面的 打算開源策略框架 想擴大下影響 所以計劃開源

3.https://github.com/ccsdu2004/StockSDK


推薦閱讀:

基於「互聯網精神」的開源字型會對授權字型形成衝擊么?
說說大家知道的好玩有趣的開源程序?
如何看待微軟宣布.NET徹底開源和跨平台?
開源鏡像站的組織和維護是純公益的嗎?有沒有什麼利益呢?

TAG:開源 | 開源項目 |