滚动自己的代码而不是使用库,避免通用方法
Rolling own code instead of using libraries, avoiding the common approach
我见过太多的项目使用他们自己的东西而不是使用经过良好测试的库。
在其他一些情况下,我看到人们重新实现椭圆曲线和随机数生成器,拒绝使用经过测试的库,因为他们的代码是 "better"。
为什么人们这样做,选择花时间实现一些东西,而不是使用已经在大量系统中完成、测试和部署的东西?
例如,Signal Android 信使应用程序本身嵌入了完整的 OpenSSL 副本以进行加密。 Ref
为什么不使用 BouncyCastle 或 java.security.*
?
这是自负的事吗?这是一个信任的事情,即。他们不信任图书馆?
可能有很多不同的原因。
构建与购买(或参考使用)应该 归结为彻底的分析。也就是说,许多人开始编程是因为他们喜欢构建东西。有时构建自己的代码是有益的(即使存在第三方库)。
也就是说,我将尝试列出您可能不想使用第三方库的一些原因:
- 许可:第三方库许可是否与您对代码的预期用途有冲突或限制?例如,GPL-licensed 代码可能不是商业用途的最佳选择。
- 安全性:第三方代码是否针对任何安全漏洞进行了彻底分析?如果是 public-facing,那么过去是否有针对此代码的漏洞利用?如果是这样,那么贡献者修复问题的速度有多快(或者他们甚至懒得发布补丁)。
- 易用性:例如,我可能不想尝试在 C# 代码中使用 C++ 库。这是可能的,但它不如使用 C# 库简单。
- 错误修复:第三方库是否正在进行开发?如果有错误,那么修复它有多容易?
- 领域知识:我们不能专攻所有领域。使用您的加密示例,我 强烈地 不鼓励尝试从头开始构建加密库,除非您有加密背景。
- 简单:您的用例可能比第三方库要提供的用例小得多。例如,如果您需要构建一个
Point
class 来表示 X、Y、Z 点,那么您可以引用第三方图形库。但是,如果您不需要在 3D 上进行图形计算的能力 space,那么引用整个图形库可能就太过分了。
综上所述,有很多次使用第三方库作品(并且是合适的选择)。使用您的示例,我永远不会尝试自己实现加密堆栈 - 没有理由在过多的 open-source 选项可用的情况下这样做。
我见过太多的项目使用他们自己的东西而不是使用经过良好测试的库。
在其他一些情况下,我看到人们重新实现椭圆曲线和随机数生成器,拒绝使用经过测试的库,因为他们的代码是 "better"。
为什么人们这样做,选择花时间实现一些东西,而不是使用已经在大量系统中完成、测试和部署的东西?
例如,Signal Android 信使应用程序本身嵌入了完整的 OpenSSL 副本以进行加密。 Ref
为什么不使用 BouncyCastle 或 java.security.*
?
这是自负的事吗?这是一个信任的事情,即。他们不信任图书馆?
可能有很多不同的原因。
构建与购买(或参考使用)应该 归结为彻底的分析。也就是说,许多人开始编程是因为他们喜欢构建东西。有时构建自己的代码是有益的(即使存在第三方库)。
也就是说,我将尝试列出您可能不想使用第三方库的一些原因:
- 许可:第三方库许可是否与您对代码的预期用途有冲突或限制?例如,GPL-licensed 代码可能不是商业用途的最佳选择。
- 安全性:第三方代码是否针对任何安全漏洞进行了彻底分析?如果是 public-facing,那么过去是否有针对此代码的漏洞利用?如果是这样,那么贡献者修复问题的速度有多快(或者他们甚至懒得发布补丁)。
- 易用性:例如,我可能不想尝试在 C# 代码中使用 C++ 库。这是可能的,但它不如使用 C# 库简单。
- 错误修复:第三方库是否正在进行开发?如果有错误,那么修复它有多容易?
- 领域知识:我们不能专攻所有领域。使用您的加密示例,我 强烈地 不鼓励尝试从头开始构建加密库,除非您有加密背景。
- 简单:您的用例可能比第三方库要提供的用例小得多。例如,如果您需要构建一个
Point
class 来表示 X、Y、Z 点,那么您可以引用第三方图形库。但是,如果您不需要在 3D 上进行图形计算的能力 space,那么引用整个图形库可能就太过分了。
综上所述,有很多次使用第三方库作品(并且是合适的选择)。使用您的示例,我永远不会尝试自己实现加密堆栈 - 没有理由在过多的 open-source 选项可用的情况下这样做。