我想与某人共享部分代码,以便为其添加一些功能 但我想保守代码的核心秘密。
我的代码结构如下(箭头表示#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
。所有其他文件可以包含一个模板类或一个
正常班级。在包含模式的某些点上,两个部分都包括一些
私有文件。
我从未创建过库,但据我所知,没有必要 为模板类创建一个库。另外,我的目标是隐藏一切 这是私有的,有一个库和一个包含该文件的头文件 定义没用。
所以我认为使用库不是我想要的,除非有办法 隐藏模板文件的定义。
有没有办法只分享我的代码的某些部分,以便其他贡献者 可以编译,测试和运行代码,但无权访问其他部分?
我之所以这样做,是因为我一直在开发代码 两年,现在实习生加入我,但我不确定他会去 留下来,我不想给他一切。
答案正朝着法律,执照,NDA等方向发展......我是 我很了解这些东西,但这不是我最初的问题。一世 没有真正的安全问题,但更多的可读性和简化。一世 如果他不是,我不想花3个月的时间向我的实习生解释我的全部代码 停留...
答案 0 :(得分:2)
我相信你不应该这样做。共享完整的源代码,或者定义和记录API,并提供实现该文档化API的二进制共享库。如果您希望其他人为您的代码做出贡献,请授予他们访问所有源代码的权限。
BTW,template
- s无法真正被隐藏。
如果您希望其他人为您的代码做出贡献,您应该可以访问您的源代码。
如果你真的想隐瞒事情(恕我直言,这是一件坏事,当然会废除潜在的贡献者)你可能有一些plugin基础设施。
获得外部贡献总是一件难事。我的观点是,现在制作你的图书馆free software是吸引外部贡献者的唯一方法。请记住,有能力的开发人员是一个恐慌的资源,为什么他们会为你隐藏的东西做出贡献,而他们有很多潜在的自由软件项目欢迎外部贡献?
最后,看到或有权访问您的源代码的人不一定有权对其进行贡献或运行您的代码(特别是,版权法将读取代码的能力与编译的法律许可分开。在计算机上运行它。如果您害怕实习生,则是法律或社会或关系或个人问题,而非技术问题。 (您可能应该联系律师了解法律方面和/或关系/社交/个人方面的治疗师,而不是在这里询问)
我的意见是,如果您想要外部贡献,您应该使用免费软件许可证发布您的软件,如果您只想让实习生(或合作者)使用您的代码库,您应该让他访问整个源代码代码(您可以要求律师就NDA这样的共同义务签订书面合同,但这不是主题。有人在处理你的代码而没有显示所有代码是疯狂的,低效的和侮辱性的。您可能会通过与实习生一样的方式破坏您的声誉。如果我是你的实习生,我会生气,不会对你说好话!信任甚至比贡献更重要(但是先决条件)。
看过您的源代码的人对此没有任何权利,但法律规定,许可证(例如自由软件许可证)或合同除外。
详细信息当然特定于与您的案件相关的法律制度(因此在这里是偏离主题的)。问你的律师!
你可能会混淆“抽象”(一种非常有用的软件设计方式)和“信息隐藏”或“秘密”;有不一样的。关键是错误出现在接口或抽象的交集处,通常是整个程序(例如内存泄漏,未定义的行为等)。详细了解leaky abstractions。这就是开发人员应该访问所有源代码而不是其中一些源代码的原因。另一种方法是拥有一个非常明确且完美记录的API,这很难获得。
我猜这是一个人,两年的项目,所以可能不到15万行的源代码。您可能不应该花3个月时间解释它们(如果这样做,则意味着您的软件设计不足并需要强大的重构,如果您解释并显示所有,您的实习生将帮助您你的来源)。
答案 1 :(得分:1)
如果您有模板类,那么您几乎无法将这些代码保密。这是因为模板的特定性允许您在编译时创建类型/方法/函数。说到其他文件。我认为你必须使用工厂软件设计模式或类似工具。
答案 2 :(得分:1)
如果您所在国家/地区的法律允许,您可以要求您的实习生签署一份合同,禁止他披露或使用他在您的代码工作期间所做过或已经看过的任何事情。如果他没有保密,那么他将需要弥补所造成的一切损失。 这样你就不花钱了,当他看到整件事时,你的实习生可能会做得更好。