C++ 共享项目,但隐藏代码的核心

c++ share project but hide the core of the code

本文关键字:代码 核心 隐藏 共享 项目 C++      更新时间:2023-10-16

我想与某人共享我的部分代码,以便他可以为其添加一些功能但我想对代码的核心保密。

我的代码结构如下(箭头表示#include "header.hpp"):

 ________      ___________ 
|        |    |           |--->|OtherPrivate1.hpp|
|        |--->|Private.hpp|--->|      ...        |
|        |    |___________|--->|OtherPrivateN.hpp| 
|main.cpp|                                          x-->|SomeOtherPrivate.hpp|
|        |     __________                          /
|        |    |          |---->|OtherShared1.hpp| /
|        |--->|Shared.hpp|---->|      ...       |/
|________|    |__________|---->|OtherSharedM.hpp|

Private.hpp仅包含一个名为 Private 的模板类。这 Shared.hpp 包含一个定义所在的普通类 Shared.cpp .所有其他文件可以包含一个模板类或一个普通类。在包含模式的某个点,两个部分都包含一些私有文件。

从未创建过库,但据我所知,没有必要为模板类创建库。另外,因为我的目标是隐藏一切这是私有的,有一个库和一个包含定义没有用。

所以我认为使用库不是我想要的,除非有办法隐藏模板文件的定义。

有没有办法只共享我代码的一部分,以便其他贡献者可以编译,测试和运行代码,但无法访问其他部分?

编辑

我想这样做的原因是因为我一直在开发一个代码两年了,现在一个实习生要加入我,但我不确定他会不会留下来,我不想给他一切。

重新编辑

答案是朝着法律、许可证、保密协议和类似的东西......我是很高兴我学到了一些关于这些东西的知识,但这不是我最初的问题。我真的没有安全问题,但更多的可读性和简化性。我不想花 3 个月的时间向我的实习生解释我的整个代码,如果他不是住。。。

我相信

你不应该这样做。要么共享完整的源代码,要么定义和记录一个 API,并提供一个二进制共享库来实现该记录的 API。如果您希望其他人为您的代码做出贡献,请授予他们访问所有源代码的权限。

顺便说一句,template -s 真的无法隐藏。

如果您希望其他人为您的代码做出贡献,您应该授予对您的源代码的访问权限。

如果你真的想隐藏东西(恕我直言,这是一件坏事,肯定会废除潜在的贡献者),你可能有一些插件基础设施。

获得外部贡献总是一件困难的事情。我的观点是,如今让你的图书馆自由软件是吸引外部贡献者的唯一方法。请记住,有能力的开发人员是一个可怕的资源,为什么他们会为你隐藏的东西做出贡献,而他们有很多潜在的自由软件项目欢迎外部贡献?

最后,看到或访问您的源代码的人不一定有权为它做出贡献或运行您的代码(特别是,版权法将读取代码的能力与在计算机上编译和运行代码的法律许可分开)。如果你害怕你的实习生,这是一个法律或社会或关系或个人问题,而不是技术问题。(您可能应该联系律师了解法律方面和/或治疗师了解关系/社会/个人方面,而不是在这里询问)

我的观点是,如果你想要外部贡献,你应该用自由软件许可证发布你的软件,如果你只是想让一个实习生(或合作者)在你的代码库上工作,你应该让他访问整个源代码(你可以要求律师签订一份关于相互义务的书面合同,比如保密协议, 但这在这里是题外话)。让某人处理你的代码而不显示所有代码是疯狂的、低效的和侮辱性的。你很可能会因为对你的实习生有这样的行为而毁了你的声誉。如果我是你的实习生,我会生气的,不会好好谈论你!信任甚至比贡献更重要(但这是先决条件)。

看过您的源代码的人对它没有任何权利,除非法律、许可证(例如自由软件许可证)或合同规定的权利。

当然,详细信息特定于与您的案件相关的法律制度(因此此处偏离主题)。问你的律师!

你可能会混淆"抽象"(一种非常有用的软件设计方式)和"信息隐藏"或"秘密";两者并不相同。关键是错误出现在接口或抽象的交叉点,通常是整个程序(例如内存泄漏,未定义的行为等)。阅读有关泄漏抽象的更多信息。这就是为什么开发人员应该访问您的所有源代码,而不是其中的一部分。另一种方法是拥有一个非常明确且文档完善的 API,这很难获得。

我猜这是一个一个人,两年的项目,所以可能不到15万行源代码。你可能不应该花3个月的时间解释它们(如果你这样做了,这意味着你的软件设计不足,需要强大的重构,如果你解释并展示你的所有源代码,你的实习生会帮助你做到这一点)。

如果你有模板类,你几乎无法使这些代码保密。这是因为允许您在编译时创建类型/方法/函数的特定模板。当涉及到其他文件时。我认为您必须使用工厂软件设计模式或类似模式。

如果您所在国家/地区的法律允许,您可以要求您的实习生签署一份合同,禁止他披露或使用他在使用您的代码期间做过或看到的任何内容。如果他没有保守秘密,那么他将需要补偿由此造成的每一个损失。这不会花费你任何费用,当你的实习生看到整件事时,他可能会做得更好。