天天看點

為什麼要開源?

這個問題分成三個回答:

從無私的角度看,為什麼要開源?

從自私的角度看,個人為什麼要開源?

從自私的角度看,公司為什麼要開源?

  1. 建立社群:可以這麼說,如果沒有開源社群,蘋果,谷歌,Facebook都不會是現在這樣。如果沒有Linux,現在網際網路的格局簡直無法想象。為了讓更多人能夠使用優秀的産品,需要有人來願意把自己的産品免費給他人使用。很多開源社群的貢獻者都是為了建立,維持這樣一個互助互利的社群而不斷努力的。
  2. 幫助他人:開源一個很美妙的地方就是,别人不用花時間解決一樣的問題。當你看到你的一個大問題已經有人做了開源項目的時候,你一定感覺如釋重負。同樣,有人感謝你的開源項目幫他們解決了一個大問題,真的是種很美妙的成就感。
  3. 結識朋友:開源社群中經常能遇到很多志同道合的好朋友。你幫我改代碼,我幫你加功能,說不定兩個人就認識成了好朋友。我和我現在的一位導師和幾位朋友就是在貢獻開源項目的時候認識的。
  1. 提升代碼品質:開源是提升個人代碼品質的好方法。這個有兩個方面:首先,如果你知道你的代碼要給别人看,你會不自覺的把代碼寫的更幹淨一點,多加點說明。其次,開源之後别人會建議怎麼改(如果你的項目有一定影響力),給你建議的人多了,你也大概就有概念怎麼把代碼寫的更好了。
  2. 展示個人代碼:如果你在找工作,這個很可能會是你的主要動機。公司實際上很好奇你寫的代碼品質如何,但是光從1個小時的面試實在看不出太多。是以很多公司會非常喜歡看你的開源項目,來評估一下你的代碼品質如何。同樣,如果你面試的時候告訴公司,“我有個開源項目,你們可以去看看”,這将是個不錯的加分項。
  3. 建立個人品牌:如果你足夠厲害,把一個優質項目開源是個迅速提升影響力的好方法。很多在大公司工作過的頂級工程師,我們都是通過他們的開源項目認識的。git的發明人,Linus Torvalds,就是一個好例子。一個工程師如果在工作之外想要樹立個人品牌的話,寫一個高品質的開源項目是個相當好的選擇。
  4. 備份個人項目:其實很多人把項目放到Github的時候根本沒想這麼多。他們隻是想把家庭作業,代碼練習啥的備份到網上去而已。其實Github當中絕大部分項目都是這種實際沒啥用的代碼備份(隻是Github沒讓你看到)。
  1. 樹立品牌形象:公司與個人開源的動機不同。公司開源很多情況下是為了提升外界對公司的形象認知。任何一個大科技公司,肯定用了多多少少用了開源項目(Linux,至少吧?)。如果連一個開源項目都沒有,這很容易給人造成,“這公司總是索取,卻不回饋給開源社群”的形象(尤其在美國)。
  2. 發掘潛在員工:比如,我讀了谷歌的Android的代碼,發現裡面有個大安全漏洞,然後我送出一個修改把漏洞給補了。你說谷歌想不想拉起我去工作?很多公司一個很好的招聘管道是開源項目的貢獻者。如果能在公司開源項目做出有意義貢獻的話,這個對于公司來說是比面試好很多的能力證明。
  3. 實作額外功能:這點實際上很有意思,有的公司/項目實際上有很多想做的小功能,但是沒時間也沒人力去單獨做。這個時候開源的力量就展現出來了,項目開源之後很多時候能吸引到開源貢獻者來做一些自己感興趣,項目想要,但項目沒時間做的feature。
  4. 擴大影響範圍:公司開源項目的品質,很多時候能反映公司的影響力。是以矽谷的很多大公司,都有一些厲害的開源項目。一方面是回饋社群,一方面是展示公司的影響力和代碼品質,吸引更多人才。同樣,如果一個公司很希望自己的一個産品有更大影響力的話,開源是個好方法。蘋果的Swift就是個好例子。Swift開源之後,能夠用在不少iOS之外的領域。說不定之後我們還能看到用Swift寫的網站架構。
  5. 用作戰略武器:開源項目還可以作為公司的戰略武器。最好的例子就是谷歌的Android。通過開源和病毒式的傳播一下追上iOS。這裡面有很多弊端(比如碎片化嚴重),不過谷歌這麼一招給了開發者十分大的力量,Android一下成為一個和iOS比肩的選項。