如何开源我的软件项目并保持控制?

15

和许多人一样,我有很多软件想法,其中有几个非常好,但时间不够,因为我只是一个开发者。我想开源一些正在进行中的软件和想法,但同时也要保留项目的方向和愿景。到目前为止,我只在非免费软件上工作过,我不明白开源如何满足我对它的控制需求。

让我明确一点,我不打算将开源项目商业化以赚钱。这一点我知道。我只想掌控我所开始的愿景。

为了控制自己的开源项目,我需要通过提供指导来管理它,但我对如何管理有效地免费的东西感到困惑。

我是在错误的道路上吗?


1
这是高度主观的,因此最好作为社区维基。 - bmargulies
确实。这就是社区。 - John K
我正在考虑做同样的事情;然而,我计划自己编写大部分项目代码,只允许其他人进行扩展。如果你没有完成至少50%的工作,我认为你不应该期望保留权利。 - slimbo
这与Larry Wall和Perl类似。 - Nathan Osman
9个回答

12

我自己也经历过这个过程,告诉你,你现在把马车放在了马前面。不想听起来太苛刻,但你需要掌握一些参考知识。

首先,“控制自己的开源项目” - 是互相矛盾的。开源涉及将某物赠送给社区,所以思考控制和拥有已经赠送出去的东西是你需要克服的心理障碍。

其次,你需要有其他人愿意参与你的项目。没有他们,你就没有任何人可以转移你可能有的任何方向和愿景。

第三,无论是最初的开发者还是具有最初想法的人,在任何带有任何追随者的开源项目中,都需要通过项目指导来获得控制权。如果社区愿意遵循您的指导,那么它们会这样做。否则,他们将不参与。

足够的演讲台。就项目管理而言,将角色分为两个功能: 1)吸引开发人员,承担任务,代码审查,指导和方向等。相信我,这既是销售工作,也是基于信誉的。从上到下,等级制,资深制等预期是让志愿者远离您的项目的一种可靠方式。 2)仓库物流。最终,你可以控制谁是/不是提交者,他们的权限等。如果你做得足够好,这会自然而然地得到解决。

最后一点评论,开源项目并不容易起步。有更多的项目比愿意付出必要的持续努力来推动你的项目发展的人更多。

祝你好运!


1
+1 非常全面和明智的建议 - John K

6

嗯,布莱船长,这完全取决于你如何分配提交权限,是吧?如果你开放源代码,但严格控制提交,那么这个愿景就完全属于你。当然,前提是你能找到其他人足够关心并提交补丁供你审查和评估。


5
直到有人决定不喜欢你的想法并复刻该项目。 - James Polley
2
99.9%的人不会对你的项目产生足够的兴趣去做任何事情。 - Byron Whitlock
我不确定叛变的推断是否有保证,但事情必须先起步。这对他较不知名的兄弟“林纳斯”布莱格来说是行得通的。 - John K
2
@Byron,高兴的是,还有700万人需要它。应该足够了。 - Alex Brown
@jdk:好的,抱歉,我太过自以为是了。我希望实际内容能够清晰地表达出来 - 开源源码并不意味着任何人都可以随意修改(参考版本)。 - bmargulies
这是一个很好的方式来表达,听着,我接受任何人作为我的开发者。我不会支付任何费用,尽力通过编写和创造尽可能多的代码来打动我,每当我有时间审查它时,我会通过发布它来让它变得有价值。 - Rafael Fernandes

3

Linus Torvalds 在 google talk 上做了一次非常棒的演讲,其中涉及到他如何使用 git 避免必须包含来自开源社区的所有代码!这绝对值得一看!


3
你可能不能同时拥有蛋糕和吃掉它。如果你使用“真正”的开源许可证公开你的源代码,那么任何想要的人都可以开始自己的项目。你可以掌控“真正”的项目。然后就是等待并观察哪个版本得到用户最喜欢,哪个版本吸引了大部分社区。你将始终掌控“你”的项目分支。你必须接受的是,其他人可能会比你更成功地利用你的原始代码,从而也拥有控制权。
总的来说,有更多的想法存在于这个世界上,而等待着的开发者却很少。所以你真正的问题可能是让任何人都关心你的项目,足够关注去贡献补丁,更别提关心到足以篡夺控制权。

2
即使你在代码库中公开源代码供任何人获取,仍然可以控制代码库:你可以决定谁有权限访问,你可以决定哪些补丁被提交(或者至少你可以决定谁有权决定哪些补丁被提交)。
但是,这并不能阻止人们分叉你的项目并将其带向不同的方向。没有简单的方法可以防止这种情况:有些人很固执,会分叉他们接触到的每个项目,而其他人可能只是对你的代码如何有用有不同的想法。
最小化分叉的最佳方法是与社区互动:参与关于项目方向的讨论,接受添加人们想要的功能的补丁(当然要保持自己的编码风格和标准)。如果与社区和你合作比维护自己的分支更容易,大多数人就不会费心去分叉。
当然,这意味着你已经将一些控制权交给了社区,因为如果你顽固地拒绝满足他们的要求,他们就会进行分叉。

我对“而其他人可能只是对你的代码如何有用有不同的想法”给予+1的支持,因为它提供了一个替代的观点,即分叉并不一定是恶意行为。 - John K

1

听起来缺少的是一些热爱你的想法并愿意免费工作的热情开发者。

我不认为他们会从互联网上冒出来,你需要去找到他们。

一旦你找到了他们,你需要让他们保持兴趣,这可能意味着放弃一些或全部控制权...

问问自己,你的目标是将软件创新带给世界,还是拥有一个宠物项目?


但是关于问题的核心,一旦开始控制如何维持呢? - John K
我刚刚修改了标题,以更准确地反映我的意图 - 你的第一篇帖子让我意识到它可以用更好的措辞。谢谢。 - John K

1

这取决于你要开源的项目类型。

你是要在小型库中开源一个紧密定义的核心功能,比如Ruby Gem或PHP PEAR Package,还是想创建下一个拥有数百万用户意见的WordPress?

我建议从小做起。使用你以前编写过的东西,并且可以被其他人使用:

  1. 一个jQuery插件。
  2. 一个WordPress插件。
  3. 一个PHP PEAR包或Zend框架的提案。
  4. 一个可以在Rails中使用的Ruby Gem。
  5. 一些开源CMS的模块或附加组件。

创建你想要的特定功能。将其放在其他用户可以fork或branch你的代码的地方,但不要让他们合并回你的代码的主分支或主干。

这样,人们就可以使用你的代码,但最终,你控制着什么进入官方项目。


1

基本上,你不能阻止别人 fork 你的代码并开始一个新项目。

最多你能做的是选择一种许可证,规定源代码不能用于同一产品(我不知道哪种许可证,但它确实存在)。

其次,你可以很好地控制现有基础和列出要包括的功能列表。

如果你的项目被 fork,你的新功能将使其他功能不那么吸引人。

最后,如果你不继续工作并放任它死亡,你的项目将被 fork。否则,当你正在辛勤工作时,没有人会来 fork 你的项目,对吗?

这里还有一些有趣的视频:

http://www.youtube.com/watch?v=-F-3E8pyjFo

http://www.youtube.com/watch?v=0SARbwvhupQ


0

如果它是开源的,最终你无法控制它 - 任何人都可以自由地分叉并走自己的路。防止这种情况发生的方法是成为一个“仁慈的暴君”,并接受其他人对项目方向的意见。当然,这假设其他人对你正在做的事情感兴趣。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接