关闭一个开源项目

本开源指南旨在为贵企业或您所在的开发团队提供建议,以便能在需要关闭或离开不再需要的开源项目的那天有准备好的计划。这个指南通过合理地关闭项目或将项目转交给其他可以继续为该项目负责的工作人员,保证贵企业以负责的态度在项目的完成周期内追寻那个项目的发展状况。通过这样的方式,您也可以为用户设定合理的期望值,以确保其能长期项目对项目代码的依赖关系保持下去,并也可以维护贵公司作为一个参与者在这个开源项目中负责的声誉。

本指南将帮助您在确定项目不再有用的时候,了解如何离开项目,并当你确认准备进入开始一个新项目时,如何处理原有项目中的代码、存储库、网站,wikis以及其他项目资产。

本指南的撰稿人


David A. Wheeler

核心基础设施计划(CII)

Jared Smith, Capital One
Jared Smith

Capital One开源社区经理


Christine Abernathy

Facebook开源开发者& 倡导者


Guy Martin

Autodesk开源负责人

Chris Aniszczyk
Chris Aniszczyk

云原生计算基金会首席运营官

Section 1

开源项目的计划完成周期

当软件开发人员开始设想和发展对业务重要的新型所需开源项目时,他们还应该为每个项目的计划完成周期(从项目开始到结束)都制定明确而具体的计划。这些计划应该同样被作为公司整体开源战略的一部分来执行,并纳入其监管的所有项目。

这些工作意味着可能要为将来结束一个项目,或将项目的运营转交给另一个感兴趣的用户群体, 或者让企业主动结束对项目的控制而做出计划。这种计划是企业对项目、用户以及支持这一切的开源社区所应承担责任中的一部分。如果项目要关闭结束或转交,这些计划是十分必要的,以便其他用户能顺利完成项目的结束或转交。

为什么计划完成周期如此重要?

为开源项目可能的结束而进行准备计划并不是开源项目独享。专利软件规划、IT系统的硬件部署和其他各种商业决策都有类似的计划完成周期。对于开源计划来说,项目的计划完成周期可能包括传统的生命周期的评估,例如项目范围和发展愿景的概述以及对项目增长的估计,也可能包括开源特定的范畴,例如社区建设的规划、早期用户的使用、对用户的反馈和贡献的纳入。

任何项目的发展速度的放缓或用户的使用达到峰值后下降都是自然的。随着商业计划的改变或新技术改善的取代,即使是非常成功的开源项目,最终有可能对其创建者或用户来说都可能不再有用。因此,为了确保最终过渡时期的顺利,准备计划必不可少。

Section 2

结束的开源项目是什么样的

如果您的开源项目的贡献或提交的稳定流量已经减少,这并不意味着项目已经结束。这可能仅仅意味着该项目已经成熟,已经实现了其发展目标,并且在为其用户服务的过程中不需要太多维护或更新,这样的结束是件好事。

而另一方面,如果项目使用人数和代码使用人数明显减少,这可能表明其他人对该项目的兴趣正在降低,该项目即将结束。其他可能用来判断项目是否将会结束的相关指标可能包括,项目活动的整体水平以及用户是否有发布问题并参与关于代码的问题在线讨论。

需要引起注意的问题迹象

有的问题也可以表现出项目是否已经结束或者将要结束,例如在开发方向上尚未解决的分歧,或者之前参与的贡献者不再活跃的现象,因为他们可能已经转向其他更能迎合引起他们兴趣的项目。一个明显迹象是,其他人与您的团队成员的观点缺少一致性,或社区询问是否要继续项目,还是要结束或彻底放弃项目。另一个迹象是您的社区不再修复或更新代码来解决其中的漏洞。

如果您的项目中没有人提问,没有人做出贡献,似乎没有人再使用项目,也似乎没有人与项目的依赖再加强,如果您没有看到人们还在使用它的其他任何迹象,这可能就是一个巨大的警示信号。也许项目一切正常,但是需要检查一下,观察项目是否将要结束。

Dr. David A. Wheeler 博士,开源专家,Linux基金会核心基础设施计划的两个项目的负责人

即使使用硬数据,这些迹象也很难衡量项目状况,因为经常对您的代码的访问数据可能是通过其他应用程序的软件包管理器间接的访问,而不是通过直接下载。这可能使您很难确切知道您有多少用户,但当项目按照其计划完成生命周期发展时,您可以进行准确追踪。

Section 3

为什么在您尚未开始一个开源项目时,就要为其结束做好计划?

当您对您的开源项目进行规划时,项目计划完成的一个关键组成部分就是关于将来您要如何结束或转交项目的相关准备计划。

这是为什么?因为如果没有打算保护项目社区和用户的计划就直接退出项目,会严重损害组织在项目和开源社区中的声誉。如果您管理一个开源软件项目,请记住,其他人对这个项目的依赖和持续使用情况将取决于您的管理和行政工作。当然,贵公司可以选择改变一个项目的方向或状态,但是为了您的项目的用户能够根据他们的需求做出规划,您的职责之一就是要将这些改变明确、快速、公开地传达给这些用户。在没有将您的打算告知用户就结束一个项目并卸除其代码的行为,是不负责任的行为。

维护贵公司的声誉

您想要做的事并不是让其他用户陷入困境。在开源世界中,对这个问题不能掉以轻心。这并不意味着在项目尚未开始之前,您就需要详细制定可能的结束了计划,但高效率、开放的沟通将有利于向用户保证,在没有充分告知的情况下您不会放弃项目,您将努力以避免用户被弃之不顾。此外,如果您决定自己不再参与某一项目,您可以通过构建,开发和推广易于分支的代码,使您的项目能够灵活转交给其他人。虽然您不需要在您的计划完成周期中公布彻底退出的计划,但您仍然要让用户了解您打算顺利并负责地结束或转交项目的计划。

寻求建立多元化的贡献者的基础

通过引入有新想法的人、有解决更深层次问题的能力的人以及更多关注代码的开发人员,您可以拥有不同代码贡献者小组,这对于帮助您的项目成长来说非常重要。而如果您之后决定结束或退出项目时,这也会有所帮助。通过项目中的多元化社区,您也许会找到可能对想要维护这一项目的感兴趣的社区成员,这样可以扩大您未来进行项目转交人员的选择范围。如果您决定退出一个项目,您可能更愿意把它转交给那些在意这个项目并愿意延续它的人,而不是直接宣告项目结束。

这些前期的准备工作能够建立一定的信任度,从而能够以项目为中心,建立一个健康的生态系统和稳定的商业依赖关系,并且能够为项目成功奠定基础。

当您开始您的项目时,您试图获得人们的信任,消除他们对加入项目和使用您的代码的担忧。如果随后说,‘您好这个项目很快就会结束’,这对建立信任很不利。相反,您应该说,如果有一天,项目可能不得不结束,您将会尽全力去解决问题, 并且应该保证您不会将用户弃之不顾。告诉他们,您会告知他们您的每一步工作的内容。在进行项目转交时,给他们时间去适应,您还需要努力帮助完成项目转交时可能有所帮助。

Dr. David A. Wheeler博士,开源专家,Linux基金会核心基础设施计划的两个项目的负责人

Section 4

决定您何时结束、转交或退出一个开源项目

无论是出于什么原因,可能最后都需要决定一个开源项目是否应该结束或转交给另一个个体,或者贵公司是否应该停止参与该项目。这个原因可能是您的商业目标发生了变化,该项目与您的新的发展方向不再一致。或者,也可能是因为负责这个项目的关键人物或团队离开了公司,又或者是因为在您最新收集的用户数据中,用户参与、用户更新和用户使用等项目绩效指标正在大幅下降。也有可能是因为在关于项目未来发展的问题上,社区成员之间出现了分歧,这些使项目看起来需要做出一些改变。

分歧会影响新项目的方向

如果在社区内部,出现了关于项目的意见分歧——无论是项目的范围,技术问题,或其他问题——您可能都需要考虑分割项目,让对不同方面感兴趣的各方可以追求完成对他们来说重要的事情。类似这样的困境,在1991年帮助启发了开发人员Linus Torvalds创建了Linux。Torvalds一直在对Minix进行试验,Minix是一个由Andrew S. Tanenbaum开发的小型UNIX类操作系统内核,可用于教授大学生编码课程。Torvalds在确定Minix拥有完全不同的范围和发展前景之后创建了Linux,这也让他创建了自己的独立操作系统。

项目的范围当然可以随着时间而改变,并根据需要进行调整,但如果您不再需要某个项目,您可以考虑分割或转交此项目。您甚至可以重新调整项目的用途,以便找到让现有用户满意的方式,或者合并新功能来吸引新的用户。但是,如果最终没有人再需要您的软件,那么可能这个开源项目已经完成。即使它是世界上最好的软件,如果没有人需要这个软件的功能,也就没有人在意这个软件的存在了。

这种结果肯定会以不同的方式发生。我们可能是因为转向了其他项目而停止使用某个项目及其代码,或者维护此项目的人现在正忙于处理其他事情,甚至已经离开了Facebook。也许已经没有人再支持这个项目,甚至我们自己的应用程序都不再使用这个项目了。但有些项目基本上已经完成了使用,这就足够了。

Christine Abernathy Facebook开源开发者&倡导者

一线用户中的案例

对于企业用户来说,开源项目是否应该结束的决策的影响因素很多。在软件开发公司Autodesk 中,大约有190个开源项目由公司自身创建并正处于使用中,在这个公司,参与项目开发的人数的减少被视为一个明显的迹象,表明项目中代码的巅峰时代已经过去,致使之前蓬勃发展的项目可能会进入“维持模式”。在这种模式下,不再主动维护代码,如果用户有疑问,他们可能得不到回答。在这种情况下,项目的社区成员仍然可以使用它,但项目公司不再提供社区支持。

到目前为止,Facebook内部已经开发了大约400个开源项目,该公司也会对类似的使用指标进行监控追踪,包括补丁和维护请求,来定期审查正在进行的项目的状况。而在Capital One中,大约有20个开源项目已经在内部启动并进入使用中,根据公司的需要,这些项目可能会定期转交给其他组织或结束。

Section 5

如何结束一个开源项目

无论您将如何结束或转交开源项目,您要做的最重要的措施就是每一步想法都与用户坦诚相待。公开您的打算将有助于在您和将来的开发人员社区之间建立信任。

一旦您决定了要采取行动,您就必须决定是否结束这个项目,或将它转交给另一个组织,或者只是退出项目,结束您的直接参与。

如何转交是有用的

通过将项目转交给其他希望继续维护它的组织,您可以直接协助项目数据和其他资源的转交。这种方法将有助于减少现有社区及其用户的担忧和风险。如果项目使用的是通用或标准的界面,可能更容易提取或移动嵌入式数据,或者在需要时用其他有类似界面的项目来替代。当然,这并不总是有效,因为很明显,有一些开源项目是独一无二的。但是,在项目计划完成周期的早期阶段,提供和使用标准化界面有助于简化项目的转交过程。

在转交项目时进行必要的更新

转交项目还有一个好处,就是在最初的开发社区首次创建并维护这个项目的之后很长一段时间内,还可以继续向其他用户提供代码。当然,不仅仅是代码可以继续使用。文档、参与者许可协议(CLAs)、项目存储库、wikis、用于项目转交的网站以及可能需要审查和更新的一些支持性基础架构也都可以继续使用。项目的转交可以通过实际的转交程序来完成,也可以通过将主要项目和其他资源转交给新的用户群来完成。

还有一种方法可以代替转交,企业可以把项目移动到一个新的托管平台,通过让社区成员访问一个可继续运行项目的中介网站然后来访问项目,而不必完全退出项目。

转交不会经常发生,但在过去,我们的一个项目就转交给了另一家公司。特别要说明的是,我们只是将该项目转交给其他公司,但对此转交过程没有任何硬性规定。当该项目需要在团队之间进行转交时,我们先在内部进行了一些调查,确认是否还有人在使用这个项目。因为我们一直致力于让我们的开源项目被内部使用,所以,可能会有一个和我们完全不同的团队正在使用这个项目。如果他们愿意维护这个项目,那么我们将毫不费力地将项目转交给这个与我们不同的团队。但这仅仅意味着项目的所有者改变了。

Christine AbernathyFacebook开源开发者&倡导者

彻底结束一个项目

有些组织产生单纯想要结束一个过时的项目,不再为该项目付出精力的想法,可能是由于从法律问题到竞争压力的种种原因导致的。贵公司最终的选择由您来决定。在这种情况下,代码其实不必被移除,而可以被归档,或者被设置为“只读”状态,此时,即使没有您的参与,其他人仍然可以使用代码来进行分支,创建新的项目。此外,代码也可以被移动到一个为用户进行存储的存档站点。

请一定要牢记非常重要的一点,贵公司不再关心管理代码,并不意味着项目现有的社区不再跟进。

之后在您继续采取行动时,您应该提醒社区成员,没有您的参与,他们也可以给代码创建分支并按照自己的需要来使用。同时,在这个时间点,您也应该提醒那些依赖您的项目中开源代码的用户,明智的做法是告诉他们非常重要的项目中的代码自己复制并保存下来。随着时间的推移代码可能会消失,良好的备份或复制对于用户来说至关重要。

为了确保您的所有选择都能够得到有效实施,逐步的退出计划是保证一切井然有序的良好方法。这样的计划意味着,您需要和可能比较关注项目的用户进行早期明确的沟通,并规划时间线,以便那些会受到影响的用户有足够的时间完成其工作,并在有需要时转移数据到其他平台。用户需要多少时间呢? 这个要视情况而定。最少需要六个月,甚至可能会更长。整个过程的关键是要给用户设置合理的期望时间,并且要频繁地与用户清楚地沟通了解您的计划。

而如果贵公司要将项目转交给另一个团队,则应该让用户能够及时了解您正在进行的工作,以确保他们自身的利益不受侵害。

最好的做法就是对项目的状态进行具有前瞻性的、清晰的分析。如果您不再支持某个项目,或者您正在准备结束某个项目,您需要让那些可能会接触您的代码的用户十分明确您的计划。可能您希望这些用户能够看到,这个项目将不会被继续维护,这样新用户就不会开始使用它,也不会在潜意识中产生期望,认为项目已经存在,您正在赞助并会开发这个项目。‘”

Jared Smith Capital One开源社区经理

努力实现平稳过渡

当您可行的合作伙伴确定下来之后,您就可以着手退出项目,就像去处理所有即将停产的产品一样。如果您要参与到项目转交过程中的话,请根据开发人员的时间决定您的组织将如何参与,然后与新的个体密切合作,为顺利过渡做好准备工作。请做好思想准备,实际转交可能需要几个月才能完成,在所有必要的准备工作都完成后,就可以将项目正式转交给新的项目所有者了。

但是,一个可能会出现的问题是,有意接管您的旧项目的团队并不是您所赞成继续去运营这一项目的团队。这种情况可能发生,而且您必须想出可行的计划来面对处理这种情况。您将如何处理这个问题?如果您非常依赖您的代码,以致于您正在考虑不把这个项目转交给一个和贵公司不同的团队, 或者价值取向不那么契合的团队,那么也许现在并不是停止参与这个项目的合适时间。如果您有这么多的顾虑,那么只有一个解释,就是您不应该离开这个项目。

明确沟通的重要性

即使完成了转交,您也要将已经转交的,或已经结束的,或已经被重塑的项目的新方向明确地传达给用户,这件事仍然是您的责任。请务必公开告知那些想要继续使用项目的开发人员和社区成员, 在新的项目运营者的管理下项目现今所处的状态,并告知他们关于运营者将如何维护该项目的详细信息。请不要忘记更新您的项目网站,社交媒体沟通渠道和其他相关的社区资产,以便用户能够知道在哪里可以找到已经转交的项目,可以继续做出贡献并使用代码。

请记住将上述所有信息传达给下游组织和用户,包括企业、非盈利组织、其他使用您的代码的用户,以及那些因为没有直接参与到开发周期中而可能不知道项目结束或转交的人。您应该通过您的网站、社交媒体渠道和其他渠道尽力告知这些人,尤其是在项目众所周知并且有大量粉丝的情况下。

最重要的是要尽快告知社区成员项目的变化和之后的计划。不要让用户去猜测该项目是否仍在维护中。在我看来,在 大多数情况下,好的代码仍然存在。所以如果您的项目有很好的代码,我可能宁愿设定预期说‘不必积极维护’,也不愿从GitHub上撤下某些项目。‘”

Guy Martin Autodesk开源负责人

通过项目存储库提供更新

发布关于项目变化信息的另一个重要地点是GitHub上的项目自己的存储库或其他相关位置。在这里,您可以通过放置详细的注释来解释发生了什么,包括用自述文件向项目参与者发送信息以便了解情况。

随着项目的进行,如果必要的话,您就可以将各项资产正式转交给新的运营者了。如果在维护现有公司实际资产的过程中,您引入了新的管理人员,那么您将可以保留因为项目变化而受到影响的代码的版权,并让他们通过开源许可证来使用其所选择的代码。

为了保持项目存储库的井然有序,您可以考虑设置一个特定区域,在此区域中存储并提供贵公司不再支持的所有已转交的开源项目(例如https://github.com/twitter-archive)。通过这种方式,用户仍然可以从项目中获取代码的使用权,潜在用户也可以找到说明项目状态的自述文件。这个存储库的特定区域可以为用户提供清晰的解释内容,帮助他们理解活跃项目和已结束项目之间的差异,同时也可以确保企业能够在活跃的存储库中适当地展示其最新的开源项目。

归档的技巧

在归档项目过程中涉及几个步骤。例如,不需要更改任何URL,仅仅将项目变成只读状态将有利于清楚地说明,现在该项目已经归档,不再像以前那样可以定期更新。

同样重要的一点是,要为用户提供他们的项目的一个明确可行的备选计划,包括如何获取代码和为代码创建分支以便继续使用。作为您责任的一部分,您应该向用户提供您的联系方式,以便他们能够将其所创建的分支列出并提供给其他感兴趣的用户。一些公司会提供这种帮助,而其他公司则不会提供。

一旦项目存储库被归档,您将无法添加或删除您的合作者或团队成员,并且其中的问题会变成只读状态。如果想要在已经归档的存储库中进行更改,首先您必须对存储库进行解档。如果您想了解更多相关的详细信息,请参阅GitHub中的相关文档:https://help.github.com/articles/about-ar- chiving-repositories/。

在结束项目时更新基础架构

结束项目也会影响您的项目的基础架构和支持,这种影响取决于项目是如何设置的,并且必须根据具体情况进行判断。有些项目只使用和维护一小部分代码,所以结束这些项目可能不需要做太多的工作。如果项目包含了全部代码,并且已经被发布在您的存储库中,那么您可能已经完成了所有工作,而不需要再采取其他行动再来转交或维护项目。

但是,对其他项目来说,可能需要使用各种后台工具来完成工作,所以结束这些项目需要付出相当大的努力。这些后台工具可能包括那些基于各种不同动机而被共享的服务,例如用于测试的基础架构。虽然之前这一测试基础架构已用于某个项目中,但您可能希望在转移代码之前将这一基础架构解离出来,以便您可以将此工具用在之后其他代码的测试中。这一工具可能很难从项目中解离出来,但如果您十分需求的话,这个想法是可以实现的。

公司的确需要在开放源代码方面做出更好的准备计划。如果没有适当的计划就把项目扔在那里,让公司以外的人成为贡献者,然后就期待项目可以按照这样的方式永远运作下去,这将会是一个巨大的挑战。您需要做好准备,无论社区成员是来自公司还是来自其他地方,他们会进入项目并会遵循计划完成周期,最终,他们会成为资深成员或退出社区,所以您需要为此做好准备计划。

Guy MartinAutodesk开源负责人

要有强韧的承受能力

对您的行为,公众可能会产生一些负面的评论和反应,包括不满的用户或那些会抨击说您的离开是抛弃用户的行为的“魔鬼”。然而请记住,大多数用户都会意识到,事情的优先顺序会随着时间而变化,企业可能最终都不得不关闭一些开源项目,因为这些项目成果已经成熟。有时每个公司都必须这样做,所以不要太在意这些评论。

Section 6

结语

结束,转交或退出一个开源项目是贵公司在某个时间点应该要采取并且不可避免的一步,但这并不一定会减少项目的影响力。对于所有相关人员来说,通过正确的计划、明确和广泛的沟通以及法律和程序性任务的逐步完成,开源项目的过渡目标是可以圆满完成的。

即使您刚刚开始为一个新项目规划第一步,但现在就提出并准备结束一个开源项目的简单计划, 也能确保您可以制定出一个合理的任务完成周期管理计划。这些计划将有助于让您的开源项目从目标高远的开始到最终平稳结束的整个过程中,高效并成功地运作。

这些资源是与TODO(Talk Openly,Develop Openly)组织合作创建的, 该组织是Linux基金会中专业的开源网络组织。特别感谢奉献自己的时间和知识来制作这些综合指南的开源项目负责人。参与制作的公司包括Autodesk,Com- cast,Dropbox,Facebook,Google,Intel,Microsoft,Netflix,Oath(Ya- hoo + AOL),Red Hat,Salesforce,Samsung和VMware。如想了解更多信息,请访问:todogroup.org

 

本作品拥有创作共用授权之相同方式共享授权4.0版国际许可协议(Creative Commons Attribution ShareAlike 4.0 International License)授权许可。

TODO Group
注册以获取更新!成为第一个知道何时添加更多开源指南和其他内容的人。