13

保护公司知识产权免受其开发人员侵害的最明显方式似乎是 NDA - 保密协议。这种方法的有效性可能会有所不同,具体取决于许多因素,有时或在某些地方它可能无法按预期工作。

除了这种纯粹合法的方法之外,还有哪些其他方法可以保护软件代码免受开发者的侵害?它们存在吗?在实践中有意义吗?

也许,例如,Visual Studio 的团队版已经包含一些与此问题相关的功能(例如,对部分代码的访问级别,取决于开发团队中的角色或类似的东西)?

题目参考:

正如统计数据所说,平均而言,程序员倾向于每三到四年更换一次工作。

4

12 回答 12

34

尝试建立一个可以信任的团队。

于 2010-02-09T20:25:38.793 回答
34

第一种方法是强制程序员只知道其他组件的接口,这样每个人只能窃取整个软件的一小部分。这种方法可以从鞋类生产中借鉴。一家跨国公司为了防止员工偷窃,安排了工厂,让每个工厂只生产左鞋或右鞋。你可以对你的代码做同样的事情:一些程序员只写奇数行,而另一些程序员写偶数行;前提是他们看不到对方的作品!这有时被称为“结对编程”。

一些组织强迫员工签署竞业禁止协议。这是一种阻止程序员为竞争对手工作的协议。这种技术最好与“寻找具有 5 年类似领域经验的高级程序员”之类的职位发布相结合。

为了防止你的程序员偷窃,你可以在他们完成软件后立即对他们造成伤害。该方法被证明是最有效的,并且已经使用了几个世纪。例如,俄罗斯沙皇伊凡雷帝在红场设计了一座美丽的教堂的建筑师灼伤了眼睛,因此设计的那座仍然是有史以来最美丽的。你可以对你的建筑师做这样的事情。我听说,最新的 Visual Studio 包含一些功能......

然而,如今,更人性化的做法是雇用已经失明和已经愚蠢的失手的人,这样他们就不能看你的代码来记住它,不能告诉任何人你的代码,也不能再打字。好处是这将帮助您与您所在国家/地区的劳工机构打交道,该机构会注意您的员工不受歧视的平衡。

是的,这篇文章是一个讽刺的笑话,它批评了任何代码窃取预防措施的想法。抱歉,忍不住发了。

于 2010-02-09T20:40:48.227 回答
17

您如何保护发电厂免受员工破坏?如何防止拳击手打架?您如何防止妓院分发掌声?

您的担忧虽然有效,但只能通过团队内部的个人责任和问责制来妥善解决。您用来保护代码免遭盗窃的任何选项都可能弊大于利。如果您觉得团队成员不值得信赖,请摆脱他们。

于 2010-02-09T20:42:50.140 回答
6

如果确实需要,您可以将应用程序拆分为子应用程序。每个团队都在一个应用程序中工作,并将所有其他团队视为“黑匣子”。也许 SOA 在这里有所帮助。

于 2010-02-09T20:28:58.863 回答
6

您的代码不太可能是真正的知识产权——即贵公司的业务知识和流程。

于 2010-02-09T20:32:39.570 回答
5

SVN 能够将不同的用户限制在不同的文件夹中,因此您可以将代码拆分为单独的库,并只允许某些人进行读/写访问。

这个文件在 conf\authz 下面是一个示例

[aliases]
# joe = /C=XZ/ST=Dessert/L=Snake City/O=Snake Oil, Ltd./OU=Research Institute/CN=Joe Average

[groups]
# harry_and_sally = harry,sally
# harry_sally_and_joe = harry,sally,&joe

[/
# [/foo/bar]
# harry = rw
# &joe = r
# * =

# [repository:/baz/fuz]
# @harry_and_sally = rw
# * = r

一些文档可以在这里找到

在“每个目录访问控制”下

于 2010-02-09T20:54:37.150 回答
4

要么建立一个您可以信任的开发人员团队,要么完全锁定他们的系统,使他们无法访问 USB 端口、CD 驱动器或 Web 邮件客户端。他们唯一能做的就是处理代码并可能浏览网页。也只能让他们访问他们负责的代码。

但是通过所有这些安全措施,您的开发人员可能会讨厌与您合作并辞掉工作

于 2010-02-09T20:32:52.940 回答
2

如果您的代码在同一个项目中(即您希望允许访问代码的某些部分而不是其他部分),则没有直接的方法可以做到这一点。但是,如果您有需要不同安全级别的单独项目,则可以允许开发人员仅对某些项目具有代码访问权限,然后从通用构建服务器拉取构建。

请记住,反编译适用于 .NET 等 IL 的框架相对简单,因此阻止对代码文件的访问不一定是保护 IP 的灵丹妙药。

于 2010-02-09T20:37:02.007 回答
1

我知道你说的除了纯粹的法律之外,但我想补充一点,除了你提到的法律之外,还有非竞争。基本上说一旦你离开你的工作,你将无法以任何方式与你的前雇主竞争。如果您在一两年内无法使用它,那么窃取代码就没有那么吸引人了。

于 2010-02-09T20:24:22.127 回答
1

您可以让他们开发一个与应用程序的其余部分分开的模块。如果您有一个插件/模块类型系统,这将非常适合。您可以发布 API 供开发人员进行开发,并让它们与您的 DLL 而不是源代码集成。

人们似乎对此持批评态度,但这样做是有正当理由的,即与潜在的竞争对手合作,如果你向他们提供你所有的资源,你会在自己的脚下开枪。

于 2010-02-09T20:50:48.637 回答
1

在您想要遵循的商业模式上花费一些脑细胞活动可能是值得的。如果核心价值体现在代码中,就可以通过窃取代码来窃取核心价值。但是,如果您的业务的核心价值体现在一群员工中,其中一些是工程师,另一些是销售人员,还有一些是客户支持人员,并且当软件只是让这些人的业务继续进行的网络时,那么就有了窃取您的业务价值并非易事。如果软件确实被盗,窃贼将无法充分利用它。

所以,除了cherouvim所说的,建立一个你不能只是信任的团队,而是一个团队,这是你业务的核心价值。

于 2010-02-09T21:01:07.683 回答
1

以模块的形式开发您的软件。

拥有一个公共模块,其中包含来回传递的对象,以及作用于这些对象的实用程序类。

让每个小组在此基础上构建模块,而无需了解其他模块。

让一个值得信赖的开发人员团队规划每个模块中的内容,并让该团队还将所有模块集成到整体中。

还要非常信任运行您的版本控制服务器的人。虽然它很稳定,但没有一个开发人员可以造成这么大的伤害。例如,他们无法删除所有内容,您将确切知道他们做了什么以及何时会成为问题。

于 2010-02-09T21:15:56.020 回答