C# 命令行程序作为“调用”;“奴隶”;是否考虑动态链接?

C# 命令行程序作为“调用”;“奴隶”;是否考虑动态链接?,c#,c++,dll,cmd,exe,C#,C++,Dll,Cmd,Exe,我试图澄清动态链接的确切含义。我知道如果我的程序链接到一个单独的.dll,并在运行时进行函数调用,这是动态链接的。但是假设我的程序通过命令行调用一个单独的.exe。exe可以通过在命令行中传递“-slave”和它与之通信的我的应用程序中的窗口句柄来充当从属。然后,我的程序向它发送命令,例如:-dothis或-dothat,并将输出发送到程序的窗口。这被认为是动态链接的吗 我这样问是因为我通过命令行使用的.exe是一个开源GPL程序,而我的程序不是。我的理解是,如果我没有实际链接到任何GPL库,我

我试图澄清动态链接的确切含义。我知道如果我的程序链接到一个单独的.dll,并在运行时进行函数调用,这是动态链接的。但是假设我的程序通过命令行调用一个单独的.exe。exe可以通过在命令行中传递“-slave”和它与之通信的我的应用程序中的窗口句柄来充当从属。然后,我的程序向它发送命令,例如:-dothis或-dothat,并将输出发送到程序的窗口。这被认为是动态链接的吗

我这样问是因为我通过命令行使用的.exe是一个开源GPL程序,而我的程序不是。我的理解是,如果我没有实际链接到任何GPL库,我就没有违反许可证

谢谢

这被认为是动态链接的吗

不可以。只有当您将另一个程序的代码加载到自己进程的地址空间中时,您才能动态链接到该程序


您建议的解决方案是将GPLed程序作为一个单独的进程运行,然后使用标准IPC设施与之通信,这正是该领域解决此问题的方法。

我的理解是,如果我没有实际链接到任何GPL库,我没有违反许可证。
请告诉我,在GPLv2或GPLv3中,它在哪里提到过“链接”。许可证中的关键词更为抽象,涉及“衍生作品”或“基于作品形成作品”等。另一方面,LGPL确实定义了涉及链接的许可条款,但LGPL是一个单独的许可证,因此如果您使用的作品是GPL许可的,那么这是一个经过验证的无意义的点,一个是GPLv2,另一个是LGPLv2.1。在我的程序中,我没有静态或动态地链接到任何一个,我只是通过命令行调用它们。我没有修改它们,甚至没有重新编译它们。我只是使用免费提供的版本。对于LGPLv2.1程序,我通过它的命令行界面向它发送IPC消息。我的理解是这很好。想法?手头的问题应该只是你对GPL程序的使用。对于GPL程序,如果您使用该程序构成基于GPL程序的衍生作品(如版权法所定义),则GPL要求您同时发布程序的源代码。在这种情况下,什么是衍生作品取决于。例如,一个调用GPL程序来执行编译的商业IDE可能会声称IDE不是GPL程序的派生作品,因为IDE在没有GPL程序的情况下仍然可以运行。是否可以在没有开源程序的情况下使用我的程序?对事实上,我的程序已经做了他们允许我做的事情,但是他们做得更快,更灵活,所以我更愿意使用他们。我在讨论是否允许用户选择使用它们,然后决定不这样做……取而代之的是,我默认使用它们。为了安全起见,我可能会重新考虑这一点。我看到的被指控违反GPL的程序大多不会告诉用户,也不会明确说明他们正在使用GPL软件。将其设置为默认设置,但如果用户希望在您的程序中使用其他程序,请通过某种方式将其设置为可选择。明确说明许可证中的条款,并按照(L)GPL许可证的要求提供GPL组件的源代码。如果它是商业产品的一部分,那么显然你应该咨询专业的法律意见,因为你不会在公共留言板上看到。