这是比较有争议的内容,为什么我推荐开源项目的库应该采用开源的 CI 公开进行发布。本文主要来聊安全的问题,本文的观点没法完全让小伙伴信服,只能说是我自己的看法

安全的问题说的是什么问题?假定我在网上找到了一个库,这个库有一个二进制的发布,如 NuGet 包。此时尽管有代码,请问我是否可以信任这个二进制的发布的库

这里涉及到的一个问题是,我无法了解到这个二进制的库是否真的从这个开源仓库里面构建出来。我无法了解到这个二进制的库是否没有添加了后门才发布

而如果此时我可以看到这个库的这个版本是通过公开的自动构建的方式构建的,那么我会更信任这个二进制发布的库

而我也可以通过相同的方式自行构建自己的一份二进制文件

一个开源的项目的代码是有很多小伙伴去 review 的,因此我可以相对信任这个开源的项目里面应该是很少会存在有意添加的后门。或者我可以认为网络上充满正义而技术强大的小伙伴会给出警告

因此相对于闭源的项目,开源项目的安全性都会更高

而对于二进制的库,假定无法了解他的制作来源,那么对此的信任度将会比较低。例如这是一个官方作者没有发布的库,而是由第三方开发者发布的库。或者这个库里面的实际代码和开源项目不匹配,或者在发布的时候被添加了后门等

或者我期望自行发布,而没有自动构建的存在,我需要用更多的精力才能让发布自己的二进制版本

但是否仅有二进制的库就不能保证安全?其实不然,因为可以通过反编译的方法,依然可以阅读到相应的代码。但是相对于开源的代码来说,阅读反编译的逻辑将会缺少交流。你阅读过这份代码,但是我没有。你发现了问题不采用,而我不知道

而采用公开的自动构建发布是否能保证安全?依然不能,因为有强大的程序员是可以无意给你挖一个深坑,即使开源代码,你也不知道其实埋了后门。或者没有精力去阅读

因此有公开的自动构建的发布的逻辑的优势在于:

  • 其他开发者可以了解到发布的二进制包的制作过程
  • 其他开发者可以方便在此基础上做二次发布,自己发布的相对放心

本文会经常更新,请阅读原文: https://dotnet-campus.github.io//post/%E9%80%9A%E8%BF%87%E5%85%AC%E5%BC%80%E7%9A%84%E8%87%AA%E5%8A%A8%E6%9E%84%E5%BB%BA%E5%8F%91%E5%B8%83%E5%BC%80%E6%BA%90%E9%A1%B9%E7%9B%AE%E7%9A%84%E5%BA%93%E7%9A%84%E5%AE%89%E5%85%A8%E6%84%8F%E4%B9%89.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

知识共享许可协议 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名 lindexi (包含链接: https://dotnet-campus.github.io/ ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系