開源軟件:存在成功的捷徑嗎?
今天,開源已經(jīng)風(fēng)靡世界。很多大型企業(yè)在快速成功的誘惑下被推向開源。但真實情況是世界上并不存在成功的捷徑。你無法做到通過一次努力就能讓所有的開源項目正常運行。
事實上,上述公司早期遇到的許多挑戰(zhàn)都不是技術(shù)上的,而是人員與文化上的。
開發(fā)一個能夠在市場上獲得成功的開源項目需要在開源的許多層面上下功夫。而維持這樣的成功是一個持續(xù)的過程。所有這一切的關(guān)鍵在于找到以下這個非常基本的問題的正確答案:開源究竟是什么。
開源是代碼
對于很多新用戶而言,他們可能并不完全了解開源的不同層面,答案相當(dāng)簡單:開源就是軟件!這當(dāng)然沒有錯,畢竟我們多數(shù)人就是這樣使用它的。不過,相比僅僅被視作軟件而言,開源遠(yuǎn)不止這些。
任何開源項目的實質(zhì)仍然是代碼本身。代碼是使一個開源項目有別于其他項目,并使其對用戶有益的根本。當(dāng)你從事開源工作的時候,代碼和軟件一樣都是產(chǎn)品的一部分。
從零開始開發(fā)一個開源項目或者 復(fù)刻fork
開源是社區(qū)
如何參與到社區(qū)中也是產(chǎn)品構(gòu)建的一部分。創(chuàng)建一個社區(qū)并維護(hù)一個健康的社區(qū)關(guān)系是開源的核心之一,但對于大部分的領(lǐng)導(dǎo)者而言也往往是最堅難的任務(wù),很少有人能很好地維護(hù)它。你可以嘗試建立基金會或者提供贊助,但是最終還是由人們自行決定是否想要加入社區(qū)。
重要的是與社區(qū)保持一定程度的透明度,并不斷保持。社區(qū)成員可以在它想要的任何階段參與進(jìn)來。除了需要進(jìn)行的工作之外,諸如安全設(shè)置、簽發(fā)證書、注冊商標(biāo)等,盡可能多的將你所做的工作展示給社區(qū)是相當(dāng)重要的,這有助于取得社區(qū)信任。歸根到底,你需要對社區(qū)負(fù)責(zé),你的項目成也社區(qū),敗也社區(qū)。這可能會導(dǎo)致你的項目開發(fā)更謹(jǐn)慎、更緩慢并且向社區(qū)公開,不過項目最終會進(jìn)展順利。
如此地公開你正在進(jìn)行的工作似乎有些令人生怯,尤其是當(dāng)你擔(dān)心更新推遲或者是出現(xiàn)漏洞的影響的時候。不過,讓社區(qū)成員知悉你的進(jìn)展,不僅有助幫助你建立與社區(qū)之間的信任關(guān)系,而且能夠讓社區(qū)成員感到被認(rèn)可。
另一方面,公開你的工作流也可以獲得來自社區(qū)成員的監(jiān)督,他們經(jīng)常有自己的見解并向你反饋。記錄這些反饋是很重要的,這使得你的開源項目如實地反映社區(qū)需求。他們是項目的最終用戶,而他們的反饋則反映了他們?nèi)绾慰创愕捻椖康拈L期發(fā)展,以及你的項目最終將有多么成功或者主流。
舉例而言,當(dāng)我們在考慮一個新功能的時候,我們在 征求意見文檔Request for Comments(RFC)中發(fā)布一個征集意見的請求,我們會收到大量的反饋,我們必須認(rèn)真思考應(yīng)當(dāng)如何吸收這些反饋。
因為開源是一個大型的合作項目,社區(qū)對支持開源項目的主動支持,使項目成為了最好的項目。并非所有的問題都要解決,但只要你有在傾聽社區(qū)的呼聲,社區(qū)就會有參與感。
參與到社區(qū)中也存在一些隱患。社區(qū)內(nèi)部、項目維護(hù)與社區(qū)之間均可能存在不同意見,尤其是在涉及治理的問題上。治理對于一個開源項目來說是相當(dāng)重要的。這也就是為什么擁有一份清晰的文檔化的治理條例對于項目以及社區(qū)均是如此重要。
社區(qū)治理是一個關(guān)鍵的而又難啃的骨頭。社區(qū)授權(quán)本身需要相當(dāng)大的信任。對于一個擁有成千上萬行代碼的項目,在社區(qū)中尋找能夠有效領(lǐng)導(dǎo)社區(qū)的人物是不容易的。不過開源項目經(jīng)常是由更小的子項目組成的,這些子項目最好由社區(qū)中的某個人進(jìn)行管理。這有助于社區(qū)更緊密地參與到項目中。
建立社區(qū)的過程不是一帆風(fēng)順的。讓我列舉一一些有助于維持社區(qū)與我的團(tuán)隊之間平衡的技巧。
聲明你的原則: 尤其是在開源項目的早期,在項目代碼仍在完善,很多事情還不完美的時候,項目之外的人員很難真正理解你所做的決定。向他們說明你做出決定所依據(jù)的原則,有助于你在思考過程上保持坦率,從而讓社區(qū)不會錯誤地干擾你的事務(wù)。這一經(jīng)驗非常有效,在你做出決定時堅持遵循其中一項原則并展示出來是非常重要的。
確定如何進(jìn)行協(xié)作: 你可以通過 Discord、Slack 或者郵件等途徑完成這一工作。但是如果你試圖同時使用它們,你將毫不意外的分散項目社區(qū)。社區(qū)人員將在所有這些途徑上互相交流。選擇一到兩種溝通工具,投身于它們來保證社區(qū)的信息同步。
珍惜反饋意見: 傾聽來自社區(qū)的反饋并付諸行動。即使需要你作出艱難的決定,你也應(yīng)當(dāng)向社區(qū)展示你是重視社區(qū)話語的。
維護(hù)一套行為準(zhǔn)則: 如果你與社區(qū)打交道,你需要定義什么行為是可以接受的。一套落地的行為準(zhǔn)則有助于在人們越過紅線時警示他們。如果你可以提前制定這些你可以避免很多麻煩。
考慮如何分發(fā)你的項目: 存在這樣的情況,因為你還沒有準(zhǔn)備好某一個組件,或者是因為存在一些你不希望所有人都能夠訪問的項目功能,所以你可能并不希望將你的項目完全向公眾公開。關(guān)鍵是制定符合你的要求而不是向用戶妥協(xié)的分發(fā)條款,如此,需要某種功能的用戶可以獲取所需項目的同時,不需要該功能的用戶也不需要在開始使用該項目做出妥協(xié)。
盡可能地避免投票: 這是因為部分成員經(jīng)常會贊成與大部分成員的意見相左的選項,這會使這些人產(chǎn)生一定程度的失望,并讓他們覺得被項目所孤立。反之,盡量嘗試詢問他們想要解決什么問題,并嘗試創(chuàng)造一個不需要付出代價的解決方案。
開源是許可
開源是給予你的用戶如何使用你的軟件的自由,而許可能夠做到這一點。開源項目許可的好處在于,它保證了不論你作為維護(hù)者做了什么,你的所有最終用戶以及利益相關(guān)方總是可以維護(hù)一系列的項目復(fù)刻版本,這些都是重要的項目復(fù)刻。
許可提供了人們可選擇性,如果他們認(rèn)為有必要,他們可以將項目帶到不同的路徑中。他們擁有創(chuàng)建副本的權(quán)利,這使得許多優(yōu)秀的軟件能夠被開發(fā)出來。維護(hù)者有責(zé)任傾聽他們的社區(qū)成員的聲音,并以一個對項目的社區(qū)成員有利的方式運營項目。
我們推薦使用現(xiàn)有的許多可用的許可證,而不是獨立制作你自己的許可條款,原因很簡單,因為用戶以及利益相關(guān)方通常都很熟悉常用的許可證,因此你不需要再花費時間在解釋許可條款上。這將幫助你將你的精力集中在項目的其他部分上。
最后,開源是一項運動
開源包括了很多維度,也包含了很多人員。最重要的是,它是關(guān)于理解人們想要什么,并創(chuàng)建一個鼓勵協(xié)作與透明的環(huán)境。開源也是關(guān)于創(chuàng)建社區(qū),幫助建立走自己想走的開源項目的方式。維護(hù)者創(chuàng)造越多的機(jī)會讓社區(qū)自由發(fā)揮,開源產(chǎn)品就越好,也越發(fā)成功。
開源是以上所有這些方面,而你的視野越寬闊,你就能越好的利用它。請考慮你如何能夠在開源的每一個維度上出類拔萃,因為時至今日,開源的成功之路并無捷徑。