2011-04-15 95 views
5

这是一个很好的做法,始终签署可执行文件(exe,dll,ocx等)。另一方面,对于一个开源项目,它可能会被视为无视所有其他开发人员对该项目的贡献。应开放源代码库进行数字签名

对于我来说,这是一个非常道德的困境,我希望能够从类似情况的人或者为开源项目做出贡献的人那里听到更多意见。

我想说明的是,这个问题是针对使用.NET 4编写的C#开源项目,因此当用户单击可执行文件时,系统会提示他或她会发出警告,指出该文件来自不受信任的发布者,如果它没有数字签名。

顺便说一句,这些程序集都已经具有强命名(签名),但它们尚未进行数字签名(即使用Verisign代码签名证书)。

+1

咦?运行它们时,.NET应用程序不会显示“不受信任的发布者”警告。我一直都在构建和运行.NET应用程序,并且从来没有从您的其中一个人那里得到警告。 – 2011-04-15 14:31:14

+2

是的,如果你从网上下载它,而不是你在本地编译的。 – 2011-04-15 15:06:25

+2

@Joe White:如果您使用安装程序或MSI分发某些内容,则必须对其进行代码签名,否则您将收到来自IE *和*讨厌UAC警告的警告。 [这是一个例子](http://www.autoitscript.com/autoit3/docs/intro/autoit_on_vista.htm)你看到的 - 最后一个屏幕是你从一个未签名的可执行文件中得到的。 – josh3736 2011-04-15 15:24:38

回答

4

.net是许多功能需求(尤其是库)需要文件使用强名称密钥签名的不同的野兽,但这些可以自签名而不需要最终产品的投诉(它使用的程序证书不是弹出您在原始问题中引用的消息框的库)。

然而,在一般情况下,我看到一个小组在使用私钥签署官方发行版时没有任何问题。如果您对源代码进行了某些操作,并在技术上重新编译“”,但我不信任您。只要未从特定发布者签署的可执行文件不会阻止其以预期的方式使用(GPL中的tivoization子句),我认为没有理由不签署可执行文件。

2

说这是“相当伦理的困境”,可能是吹捧它不成比例。你一定要code sign你的可执行文件,我真的没有看到你签署它的问题。例如,TortoiseSVN由“开源开发人员Stefan Kueng”签名。

也就是说,为您的项目组建一些法律实体可能是一个好主意,然后以项目实体的名义获得代码签名证书。这样,您的项目名称就不会出现在发布商身上,而不是您亲自签署可执行文件(因此“获得所有功劳”)。

如果您在美国,我会建议您组建一个LLC501(c)(3) organization,它可以免除所得税,并允许个人为该项目进行减税捐赠。 (Many开源项目组织为501(c)(3)个实体,其中包括WordPressjQuery)。我看到你在土耳其,因此你必须研究你当地的形成某种法律实体的要求;一旦形成,您就可以以项目实体的名义而不是您自己的名义从CA获得证书。