2017-02-05 12 views
0

Я видел, как множество проектов сворачивают свои собственные вещи вместо использования хорошо протестированных библиотек.Роллинг собственного кода вместо использования библиотек, избегая общего подхода

В некоторых других случаях я видел, как люди повторно применяли эллиптические кривые и генераторы случайных чисел, отказываясь использовать проверенные библиотеки, потому что их код «лучше».

Почему люди делают это, предпочитают тратить время на то, чтобы что-то реализовать, вместо того, чтобы использовать что-то, что уже было сделано, протестировано и развернуто во множестве систем?

Например, приложение для обмена сообщениями Android Signal Android имеет полную, полную копию OpenSSL, встроенную в нее для шифрования. Ref Почему бы не использовать BouncyCastle или java.security.*?

Это вещь эго? Это вещь доверия, т.е. они не доверяют библиотекам?

+0

Существует бесконечные причины, по которым человек может захотеть использовать свое собственное решение против существующего. –

ответ

0

Это может быть множество причин.

Построение или покупка (или использование по ссылке) должно сходите до тщательного анализа. Тем не менее, многие люди входят в программирование, потому что им нравится строить вещи. Иногда полезно создавать собственный код (даже если существует сторонняя библиотека).

То есть, я постараюсь перечислить некоторые причины, почему вы не можете использовать сторонние библиотеки:

  • Лицензирования: лицензирование ли библиотека третьей стороны конфликта или ограничить предполагаемое использование кода? Например, лицензионный код GPL не может быть лучшим выбором для коммерческого использования.
  • Безопасность: Был ли проанализирован сторонний код для любых уязвимостей безопасности? Если это публично, то были ли в прошлом эксплойты, нацеленные на этот код? Если да, то как быстро у участников были зафиксированные вещи (или они даже потрудились выпустить патч).
  • Простота использования: например, я могу не захотеть использовать C++-библиотеку в коде C#. Это возможно, но это менее просто, чем использование библиотеки C#.
  • Исправления ошибок. Продолжается ли разработка в третьей библиотеке? Если есть ошибка, то как легко вы можете ее исправить?
  • Доменное знание: Мы не можем специализироваться во всем. Используя ваш пример шифрования, я бы сильно препятствовал попытке создать библиотеку шифрования с нуля, если у вас нет фона для шифрования.
  • Простота: ваш прецедент может быть намного меньше, чем для сторонней библиотеки. Например, если вам нужно построить класс Point для представления точки X, Y, Z, вы можете обратиться к сторонней графической библиотеке. Но если вам не нужна возможность делать графические вычисления в 3D-пространстве, то ссылка на всю графическую библиотеку может быть излишней.

Все это говорит о том, что существует много раз, когда работает сторонняя библиотека (и это подходящий выбор). Используя ваш пример, я никогда бы не попытался реализовать стек шифрования сам по себе - нет оснований для этого с множеством доступных вариантов с открытым исходным кодом.

+1

О одной из причин, почему вы, возможно, захотите реализовать свой собственный компонент https, является то, что большинство современных версий (один хром использует) не поддерживают новейшую предлагаемую версию TLS. Использование вашего собственного, которое более близко относится к стандарту, может быть не плохо. Кроме того, на ранних стадиях SSL были известны уязвимости. Поскольку я прокомментировал этот вопрос, существует буквально бесконечный набор допустимых причин, по которым вы должны реализовать свое собственное решение. Это плохой вопрос, который в значительной степени основан на мнениях. –