在其他开源程序中使用封闭源模块限制集群大小


10

我在高度依赖高性能计算的学术研究机构工作。在过去的十年中,我们已经开发了自己的Fortran代码,该代码非常受关注并且可以在非常大的群集上运行。为了使更大的研究社区从该代码中受益,我们正在考虑将其开源。但是,由于我们的资金高度依赖于我们可以使用该代码执行的研究,因此,我们可能会全力以赴。

想法之一是限制代码可以运行的CPU数量,例如,最多1000个CPU,而不是我们使用的100,000。这样,全球研究界可以从代码中受益,但是我们将在可以解决的问题规模方面拥有优势。

从概念上讲这种功能是否可行?以及如何实现这种功能?本质上,我们想开源完整的代码,但是将并行化(使用MPI)限制为固定数量的MPI线程,例如使用(封闭源)模块。


那个闭源模块到底会做什么?别人重新实现它有多困难?
svick

Answers:


16

您试图通过让他们能够做自己所做的事情,而不让他们能够自己所做的事情来使研究社区受益。听起来您尚未真正做出原则性选择。

像开源软件中那样的软件解决方案不太可能起作用:毕竟,代码是开源的。其他机构要做的第一件事是将封闭源代码撕掉,用不受限制的开放源代码替换它,然后每个人都将使用它。

可能是一个妥协的可能:不开源软件,但销售许可证。拥有许可证的机构也有权阅读和修改代码,但不能分发。每年收费。这样,您也许可以弥补其中的一部分资金损失。

另一个选择是发布一个较旧的版本,您可以对其进行不断更新,但始终会落后几年。但是,开源社区可能会比您更快(或可能不会;大多数人高估了其他人对其软件的兴趣)来接手该项目并开发新功能。

或者只是发布它并利用其他人在它上面所做的工作。您将永远是该软件的顶级专家。


4

这真的不能做到。

开源背后的想法是开源是开放的,换句话说,人们将可以使用它。从维基百科

在生产和开发中,开源作为一种开发模型可以通过免费许可来促进对产品设计或蓝图的普遍访问,以及对该设计或蓝图的普遍重新分发,包括任何人对其的后续改进。

通过提供对设计或蓝图的通用访问权限,即使已发布的版本仅限于1000个内核,将其数字更改为100000或类似内容也很容易。


以下是您可以做的一些选择:

  • 考虑根据限制您的代码用户的许可发布代码
  • 发布一个封闭的源API库,该库允许其他研究人员获得功能,而无需访问代码本身。

正确。如果您在其中放置代码说“检查CPU的数量,并且使用的CPU数量不超过X个”,其他任何人都可以梳理您的开源代码,删除该检查,然后重新编译。

4

您几乎没有办法限制他人对您的源代码的处理。他们可以从头开始制作另一个模块,该模块可以释放甚至增强多处理能力:这将花费时间和专业知识,但是如果对他们来说很重要,他们就会这样做。

拥有10年的领先经验,即使您提供了允许他人复制您的实验的源代码,您仍然有机会利用您的代码经验和知识继续进行最佳研究。您的资助者甚至可能有更多的理由去找您,因为如果您是几所大学使用的开源项目的负责人,您的研究影响可能会更大。

您可以尝试发布公开资源,但对源许可施加专有限制,以尝试合法地限制其他人。我可以想到几个完成此任务的项目:Ghostscript,AT&T Unix,Microsoft .NET和Xerox PARC Smalltalk-80。尽管那些最终成为了完全开源的代码,但我希望还有其他一些鲜为人知的代码仍然对被许可方使用源代码的方式施加限制。当然,尽管发布您的资源将意味着那些不遵守法律的人可能会违反条款,但这应该使真正的学术研究人员无法在与您一样强大的超级计算机上运行您的代码。



@musiKk 2002年,.NET核心的Rotor fork开始作为专有的“共享源”,但是最近,大部分商业源在参考许可证发布,然后在4.6版中完全开源。。我没有意识到微软的源代码共享安排有多么复杂
2015年

1
你真的让我心跳加速。我以为我挖出了一个13岁的答案。没关系,SO于2008年推出。
musiKk
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.