客户想要源代码,但是它包含许多我在其他项目中重复使用的共享代码


96

我有一个客户希望我提供带有开发的应用程序二进制文件的源代码。他们最初对源代码什么也没说,但是最近他们说他们需要它。合同尚未最终确定。他们同意这项工作,没有签字,然后又提出了这一条款。

问题是:我拥有多年来创建的代码库,并用作我编写的大多数应用程序的模板。它远远超出了项目范围。

我也打算将其用于产品,所以我真的不希望为相对较小的项目提供它。

我猜这不是这个行业第一次发生这种情况。规避此问题的最佳方法是什么?我猜想共享库之类的东西可能会有所帮助。


18
他们需要什么?很有可能他们只是想确保拥有代码,以防您破产。您可以添加限制许可使用的许可。有一次,我在一家律师公司工作过的公司代码(正确的单词?)存放在源代码中,以确保这种情况的安全。
thorstenmüller2015年

33
定制软件应随附源代码。否则,它是零售产品。我认为他们不需要冷冻产品,以防您/您的企业以后发生任何事情。但是要相应收费。还可以考虑将您的库代码放在已编译的库中(如果您的语言支持),以便他们可以修改软件,对其进行编译,但不容易自己重用您的库。
CodeAngry 2015年

14
@CodeAngry“应该”吗?不可以。只要他们支付正确的金额。
o0'。

32
@CodeAngry不。是您的,除非另有协议……
o0'。

46
面对现实吧-不管您将框架投入多少年,它对您来说都没有任何价值。不管您认为有多好,都不会有人基于没有文档证明,不受支持且通常未知的框架来创建新应用程序。将完整的源代码提供给他们,确保您保留应用程序非定制部分的版权,并获得满意的客户。
Guntram Blohm 2015年

Answers:


137

首先要记住的是,源代码的价值与二进制文件不同。拒绝签订需要交付源代码的合同,或者坚持为交付源代码支付额外费用是完全合理的。合同是双向文件。不要让另一部分仅仅因为它们是“大公司”并“一直做这件事”而决定需要什么。首先,决定什么愿意提供,以及如何想进行补偿。然后将他们的合同交给律师,并确定需要更改的内容。然后,您进行谈判。

当年轻人开始承包合同时,不要做很多年轻人要做的事情。不要仅仅因为他们似乎有很多经验而签字,而您却没有。这是摆脱困境的好方法。

调查他们为什么想要来源。他们可能想要这样做,因此以后可以选择使用其他开发人员。或者他们可能只是因为害怕您会被公共汽车撞倒而突然想要留下无法改进的二进制文件,所以才想要这样做。如果是第二种情况,请查看软件代码托管服务。这些服务保存源代码,以防您破产或无法维护该软件。这样既可以满足您保留自己的代码专有权以服务于其他客户的需求,又可以满足他们的愿望,即在发生某些不良情况时不要让他们手持不可维护的二进制文件。


17
如果软件代码托管服务破产怎么办?
user11153 2015年

21
然后,该代码的所有者-希望-仍然存在,并且可以将其代码传递给另一个托管服务。该服务旨在删除单点故障。
亚历山大

17
软件代码托管服务是否使用软件代码托管服务?
FreeAsInBeer 2015年

29
@FreeAsInBeer:不,他们使用软件代码托管服务。明显。
nneonneo 2015年

@Alexander,仅当重新签订合同属于合同义务时。否则,开发商将再次收取第二次托管费用。
佩里耶尔

67

“不”是一个很好的答案,实际上,这是一个非常有用的答案,由于某种原因,我无法理解它被低估了。

“嗨,我们突然决定我们也想要免费的源代码。”
“嗨,不。”

确实没有那么困难。

然后,如果他们愿意付出异乎寻常的资金超过了他们已经欠你的,你可以给他们你的应用程序,其中包括只有他们实际需要的资源,并照顾他们得到绝对的修剪版本 -Exclusive权利。

不要使简单的事情复杂化。


简明扼要的答案。
西藏沿海地区

26

您的问题是,“解决此问题的最佳方法是什么?” 但是,您认为这是个问题吗?其他人正确地指出,这是一个谈判的问题:一切都有价值,这取决于您为客户提供提供所需价格的价格。

但是,您还必须仔细考虑并写入合同中,以提供代码的含义。只是这样客户才能看到吗?客户可以修改吗?尤其是,您是否考虑授予客户多年以来创建的代码库的专有权限,并将其用作大多数应用程序的模板,这样您以后就再也无法使用它了?

您需要确保合同明确说明谁有权使用代码以及以何种方式使用代码。


19

请记住,任何源代码都需要许可证。如果您移交源代码,则公司可以使用源代码来执行许可证允许的任何操作,以及超出版权限制的任何操作。因此,如果您移交源代码,那么您将拥有一份合同,该合同绝对清楚地表明您保留源代码的专有版权,并且确切地允许使用源代码。当然,源代码和许可证不是免费提供的。

一家大公司不太可能侵犯您的版权,因为被捕会给他们的声誉造成重大损失,除了财务损失。另一方面,在不保证将来可以解决任何问题的情况下为软件付款是客户不可接受的。


33
但是,也认为检测源代码滥用非常困难,尤其是在您不搜索源代码的情况下。不要盲目地信任许可证:对于某些人来说,这只是一张纸。
o0'。

1
@Lohoris,但是,如果您怀疑应用程序正在使用您的代码,则很容易分辨,无论它只是二进制文件。您需要确定的是基本的逆向工程技能。
修订

6
-1,因为我认为您的“一家主要公司...”声明没有任何证据,这只是一个猜测。
djechlin 2015年

@Lohoris:如果发生这种情况,对您造成的损害是什么?最佳案例:海报提供者为另一家公司提供服务,并且发现他们已经拥有他引以为傲的图书馆。主要发薪日!
gnasher729 2015年

13

之前,我通常将MIT许可下的源代码(库和所有)提供给客户端。如果您的库组织良好,则只为该特定客户端提供所需的文件/资源​​,仅此而已。我认为这对我和客户都是公平的。但是,总有一个问题,那就是以前不属于库的一部分,根据合同为该特定客户编写了新代码。因此,在开始项目之前,我开始与客户讨论此问题。有些客户想要该代码的所有权,有些则不需要(我总是给予负面奖励,例如对那些这样做的人收取更高的价格)。但是,实际上,对于某些客户而言,讨论非常混乱,有时我为了让项目获得批准而为3或5个不同的人(包括他们的律师)进行了交谈。

因此,现在我所有的库都是我一直用于开发的自定义框架的一部分,并向客户解释了我将使用此框架,但是该框架是具有不同许可证的其他产品。(有时我在解释时会使用“软件组件”,因为“框架”可能对他们来说是未知的)。我总是在MIT许可下提供使用过的文件的代码,并且(因为所有代码都组织得很好)低级代码(甚至是新代码)仍保留在框架中(供我和他们重用),但相关的代码对他们的应用程序来说,仅仅是让他们遵守自己的条款(对于我来说,该代码很可能在其他项目中重用)。当然,所有这些都正确地写在合同中。我认为这也是公平的。

关键是:“这些组件是不同的产品”,并且所有组件都必须在开始之前写在合同中。

因此,是的,关于使用共享库的想法可能是正确的。但是,我问你,为什么不根据允许他们降低风险的许可,不向他们提供您使用的源代码?我认为那将是公平的。


2
我认为这是一个不错的答案。OP显然不应该只是过渡,但是,另一方面,为定制项目索要源代码似乎非常合理(而且我已经看到足够多的合同项目完全脱离了正常轨道,需要被某人救出)否则,如果我正在寻找的话,我可能不会考虑拒绝提供货源的承包商)。
Casey

11

解决这个问题的方法是谈判。

如果他们想要源代码,那么他们应该准备为此付出代价,这取决于您自己决定要付多少钱。

另一方面...如果他们不准备支付您想要的价格,他们可能会决定“将业务转移到其他地方”。

欢迎来到商业世界:-)


而且,当您将来与潜在客户交流时,请务必尽早提起此问题...以避免浪费大家的时间。


还值得注意的是,您正在做的事情对开源开发人员以及正在寻找开源解决方案的(受过教育的)客户来说都是一场恶战。


5
首先,获得许可证的可能性远远超过“他们想要的”。其次,我认为怪怪OP不能“尽早提出”而不是公司是不公平的。这有点编辑。第三,我不明白为什么开放源代码开发人员如果希望在一个封闭源代码项目上工作,就会面对麻烦。第四,如果公司正在寻找开放源代码解决方案,那么他们将要求这样做,而不是出于其目的而不是私有复制源代码。
djechlin

1
@djechlin-1)我没有怪OP。但是,如果他不准备就这一点进行谈判……那么他>>应该<<提早提出。对于熟悉软件的客户来说,这显然是合理的要求。2)“ anathema”将是OP正在做的……试图保留源代码。3)虽然没有迹象表明客户要求开源(也许他们并不真正了解开源的好处),但显然>> do <<想要源代码,这是OSS的主要优势之一。
史蒂芬·C

3
这个评论是当场。作为我自己的软件开发人员,我的所有客户都获得了使用和修改软件的专有许可,并且我为他们提供了源代码。除此之外,我保留重用我在其他项目中编写的代码以及重用该项目中其他项目中的代码的权利。这为他们节省了金钱,也节省了我们俩的时间。没有人对此有任何疑问。
dotancohen 2015年

1
@dotancohen:我希望他们获得“非专有”许可证。如果他们拥有专有许可证,则无法为下一个客户重复使用该代码。您不能有两个拥有相同代码“独家”许可证的客户。
gnasher729

许可证允许他们使用和修改代码,但不能共享,出售或分发代码。由于大多数PHP在VPS上运行,因此如果代码“泄漏”了,我几乎无能为力。我不认为这是什么大不了的,我在工作现场。
dotancohen

5

对于您来说可能为时已晚,因为您可能已经在合同上同意执行此操作,并且您可能已经同意与其他客户使用互不兼容的条款。

您可以通过两种方式为客户提供源代码。版权和许可的所有权。

一些客户将希望拥有源代码。这意味着,在流程结束时,他们将向您付款,而您作为交换给您,您将为他们创建的代码提供版权。原因之一是他们是否在源代码中看到了巨大的知识产权潜力,并且可能希望在其公司资产负债表上对其进行估值。在这种情况下,您无权继续将该源代码用于其他项目,除非您还从客户那里获得了授予该许可证的许可证。

如果您的客户自己购买了“现成的”产品,则他们希望获得使用该软件的许可,而不是源代码的所有权。他们应该期望您正在向其他许多组织出售相同(或相似)的软件,并且他们希望从更广泛的客户群中受益于较低的购买成本。

但是,这个问题的情况是两者的融合。

这就是我想要做的。我会向您的客户授予使用(和修改)您的共享代码的许可证。如果客户询问,我将指出这是您已在多个项目中使用的共享代码,并且根据您继续使用这项工作的需要,为将来的工作制定了当前的出价。指出,这为您的客户减少了在该项目上的时间,因此他们付出了更低的价格。像该项目使用的其他共享代码库一样,它们具有使用该代码的许可,并允许其他开发团队开发此代码以及基于此库的其他项目。但是,如果他们愿意拥有所有代码,则您愿意创建一个替换,但这将是额外的费用。

根据您已经致力于的工作,您可能不得不免费编写替换功能,或者放弃您的源代码。

请记住,有不同类型的库。C ++中的标准模板库是一个很好的例子,该库包含在源代码级别并被编译成项目可执行文件,该文件与您使用通用代码的方式非常相似。


1
通过这样的评论:“他们同意,合同没有最终确定,没有签订合同,然后又提出了该条款。” -就在两天前,我认为谈判仍在进行中。

0

如果您将第三方与您提供的软件配合使用,则很可能您没有该第三方的源代码。您仍将使用第三方二进制文件将软件交付给公司。您开发为在所有项目中共享的框架的代码与第三方完全一样,即使您拥有该代码也是如此。在这种情况下,公司使用您的框架二进制文件所面临的风险与第三方完全相同。为什么要在这种情况下将公司的源代码提供给公司。您可以向她提供一份具有许可协议的良好API文档以及该文档。如果您的代码包含将彻底改变行业的下一个重大事件,那就另当别论了,但通常不是这样。

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.