我有一个客户希望我提供带有开发的应用程序二进制文件的源代码。他们最初对源代码什么也没说,但是最近他们说他们需要它。合同尚未最终确定。他们同意这项工作,没有签字,然后又提出了这一条款。
问题是:我拥有多年来创建的代码库,并用作我编写的大多数应用程序的模板。它远远超出了项目范围。
我也打算将其用于产品,所以我真的不希望为相对较小的项目提供它。
我猜这不是这个行业第一次发生这种情况。规避此问题的最佳方法是什么?我猜想共享库之类的东西可能会有所帮助。
我有一个客户希望我提供带有开发的应用程序二进制文件的源代码。他们最初对源代码什么也没说,但是最近他们说他们需要它。合同尚未最终确定。他们同意这项工作,没有签字,然后又提出了这一条款。
问题是:我拥有多年来创建的代码库,并用作我编写的大多数应用程序的模板。它远远超出了项目范围。
我也打算将其用于产品,所以我真的不希望为相对较小的项目提供它。
我猜这不是这个行业第一次发生这种情况。规避此问题的最佳方法是什么?我猜想共享库之类的东西可能会有所帮助。
Answers:
首先要记住的是,源代码的价值与二进制文件不同。拒绝签订需要交付源代码的合同,或者坚持为交付源代码支付额外费用是完全合理的。合同是双向文件。不要让另一部分仅仅因为它们是“大公司”并“一直做这件事”而决定需要什么。首先,决定什么你愿意提供,以及如何你想进行补偿。然后将他们的合同交给律师,并确定需要更改的内容。然后,您进行谈判。
当年轻人开始承包合同时,不要做很多年轻人要做的事情。不要仅仅因为他们似乎有很多经验而签字,而您却没有。这是摆脱困境的好方法。
调查他们为什么想要来源。他们可能想要这样做,因此以后可以选择使用其他开发人员。或者他们可能只是因为害怕您会被公共汽车撞倒而突然想要留下无法改进的二进制文件,所以才想要这样做。如果是第二种情况,请查看软件代码托管服务。这些服务保存源代码,以防您破产或无法维护该软件。这样既可以满足您保留自己的代码专有权以服务于其他客户的需求,又可以满足他们的愿望,即在发生某些不良情况时不要让他们手持不可维护的二进制文件。
请记住,任何源代码都需要许可证。如果您移交源代码,则公司可以使用源代码来执行许可证允许的任何操作,以及超出版权限制的任何操作。因此,如果您移交源代码,那么您将拥有一份合同,该合同绝对清楚地表明您保留源代码的专有版权,并且确切地允许使用源代码。当然,源代码和许可证不是免费提供的。
一家大公司不太可能侵犯您的版权,因为被捕会给他们的声誉造成重大损失,除了财务损失。另一方面,在不保证将来可以解决任何问题的情况下为软件付款是客户不可接受的。
之前,我通常将MIT许可下的源代码(库和所有)提供给客户端。如果您的库组织良好,则只为该特定客户端提供所需的文件/资源,仅此而已。我认为这对我和客户都是公平的。但是,总有一个问题,那就是以前不属于库的一部分,根据合同为该特定客户编写了新代码。因此,在开始项目之前,我开始与客户讨论此问题。有些客户想要该代码的所有权,有些则不需要(我总是给予负面奖励,例如对那些这样做的人收取更高的价格)。但是,实际上,对于某些客户而言,讨论非常混乱,有时我为了让项目获得批准而为3或5个不同的人(包括他们的律师)进行了交谈。
因此,现在我所有的库都是我一直用于开发的自定义框架的一部分,并向客户解释了我将使用此框架,但是该框架是具有不同许可证的其他产品。(有时我在解释时会使用“软件组件”,因为“框架”可能对他们来说是未知的)。我总是在MIT许可下提供使用过的文件的代码,并且(因为所有代码都组织得很好)低级代码(甚至是新代码)仍保留在框架中(供我和他们重用),但相关的代码对他们的应用程序来说,仅仅是让他们遵守自己的条款(对于我来说,该代码很可能在其他项目中重用)。当然,所有这些都正确地写在合同中。我认为这也是公平的。
关键是:“这些组件是不同的产品”,并且所有组件都必须在开始之前写在合同中。
因此,是的,关于使用共享库的想法可能是正确的。但是,我问你,为什么不根据允许他们降低风险的许可,不向他们提供您使用的源代码?我认为那将是公平的。
解决这个问题的方法是谈判。
如果他们想要源代码,那么他们应该准备为此付出代价,这取决于您自己决定要付多少钱。
另一方面...如果他们不准备支付您想要的价格,他们可能会决定“将业务转移到其他地方”。
欢迎来到商业世界:-)
而且,当您将来与潜在客户交流时,请务必尽早提起此问题...以避免浪费大家的时间。
还值得注意的是,您正在做的事情对开源开发人员以及正在寻找开源解决方案的(受过教育的)客户来说都是一场恶战。
对于您来说可能为时已晚,因为您可能已经在合同上同意执行此操作,并且您可能已经同意与其他客户使用互不兼容的条款。
您可以通过两种方式为客户提供源代码。版权和许可的所有权。
一些客户将希望拥有源代码。这意味着,在流程结束时,他们将向您付款,而您作为交换给您,您将为他们创建的代码提供版权。原因之一是他们是否在源代码中看到了巨大的知识产权潜力,并且可能希望在其公司资产负债表上对其进行估值。在这种情况下,您无权继续将该源代码用于其他项目,除非您还从客户那里获得了授予该许可证的许可证。
如果您的客户自己购买了“现成的”产品,则他们希望获得使用该软件的许可,而不是源代码的所有权。他们应该期望您正在向其他许多组织出售相同(或相似)的软件,并且他们希望从更广泛的客户群中受益于较低的购买成本。
但是,这个问题的情况是两者的融合。
这就是我想要做的。我会向您的客户授予使用(和修改)您的共享代码的许可证。如果客户询问,我将指出这是您已在多个项目中使用的共享代码,并且根据您继续使用这项工作的需要,为将来的工作制定了当前的出价。指出,这为您的客户减少了在该项目上的时间,因此他们付出了更低的价格。像该项目使用的其他共享代码库一样,它们具有使用该代码的许可,并允许其他开发团队开发此代码以及基于此库的其他项目。但是,如果他们愿意拥有所有代码,则您愿意创建一个替换,但这将是额外的费用。
根据您已经致力于的工作,您可能不得不免费编写替换功能,或者放弃您的源代码。
请记住,有不同类型的库。C ++中的标准模板库是一个很好的例子,该库包含在源代码级别并被编译成项目可执行文件,该文件与您使用通用代码的方式非常相似。