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