Vendoring собственного инструмента, сохраняя при этом максимальную мобильность

манифест Twelve Factor App говорит, что для веб-приложений "... иметь чистый контракт с базовой операционной системой, предлагая максимальную переносимость между средами исполнения" [выделено мной мной]

Но затем он говорит:

Двенадцатифакторные приложения также не полагаются на неявное существование каких-либо системные инструменты. Примеры включают обрезку до ImageMagick или curl. Хотя эти инструменты могут существовать во многих или даже большинстве систем, нет что они будут существовать во всех системах, где приложение может работать в в будущем, или будет ли найденная версия в будущей системе совместимый с приложением. Если приложение необходимо выложить в систему инструмент, этот инструмент должен быть представлен в приложении.

и они ранее определили "vendored in app" как:

помещается в каталог, содержащий приложение (известное как "vendoring" или "Пакетирование" ).

Как это сделать, когда (по крайней мере, по Linux) собственные 64-разрядные исполняемые файлы не запускаются в 32-разрядных средах, например, не говоря уже о других операционных системах? Или есть лучший способ справиться с этой проблемой переносимости?

3
задан Robin Green 04 июня '12 в 19:59
источник поделиться
2 ответов

По-моему, это не должно выполняться вообще. Это происходит потому, что:

  • Если родные исполняемые файлы динамически связаны, есть вероятность, что они не смогут работать только в будущих выпусках ОС, не говоря уже о будущих или предыдущих архитектурах процессоров.
  • Насколько я понимаю, невозможно полностью гарантировать будущий исполняемый файл, статически связав его. У вас все еще могут быть проблемы. Solaris даже не поддерживает статическое связывание системных библиотек!
  • Зависимости библиотек - это не единственные виды зависимостей, которые могут иметь собственные инструменты. Могут быть и другие проблемы.
  • Старый ImageMagick - или даже curl - может содержать ошибки безопасности, которые могут позволить вашему приложению скомпрометировать. (Это немного спорный момент - его достоверность зависит от того, кому вы доверяете больше, чтобы следить за обновлениями безопасности и применять их - людей, которые поддерживают и обновляют серверы, или разработчиков? Конечно, они могут быть теми же людьми - на данный момент. Но мое рабочее предположение заключается в том, что серверы будут иметь в конечном итоге обновления, что в свою очередь защитит ваше приложение от дыр в безопасности в системных исполняемых файлах, которые были исправлены в обновлениях.)

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

3
ответ дан Robin Green 04 июня '12 в 20:17
источник поделиться

Это просто означает, что у вас должна быть декларативная зависимость и чистый контракт между вашими поставщиками ресурсов.

Если ваше приложение зависит от конкретной версии программного обеспечения, вам необходимо заключить с ним чистый контракт, чтобы вы могли выполнять макет/заглушку для разработки. Кроме того, создание части управления зависимостями вашего приложения невозможно даже в Windows (хотя вы можете захотеть, чтобы это произошло в вашем установщике, а не в самом приложении).

Если ваш продукт так сильно зависит от другого программного обеспечения, которое он не может функционировать без него даже в тестовой среде, тогда он должен быть в комплекте, и вам придется разработать EULA или, действительно, у вас нет продукт.

0
ответ дан willoller 21 янв. '14 в 23:38
источник поделиться

Другие вопросы по меткам или Задайте вопрос