d4s: (Default)
d4s ([personal profile] d4s) wrote2012-08-06 07:51 pm

исходники: иметь или не иметь?

С некоторыми сотоварищами развернулась интересная дискуссия. Как известно для того, чтобы собрать и задеплоить свой продукт на жабе требуется N-ное количество сторонних пакетиков в виде JAR-файлов.
Так вот, я доказываю, что для коммерческого продукта необходимо иметь полный и замкнутый цикл разработки, который включает в себя полное дерево исходников и пересборку 3rd-party jar-файлов, любое обращение к сети во время сборки должно быть запрещено.
Противоположная точка зрения -- все выкачивается из интернета в виде бинарных jar-файликов (в идеале при каждой сборке, как вариант -- кашируется 1 раз для локального использования).

Как по вашему -- кто прав и почему? ;-)

[identity profile] shaman237.livejournal.com 2012-08-06 04:55 pm (UTC)(link)
На мой взгляд, имеют право на жизнь оба варианта и ничего плохого в использовании уже собранных jar'ок я не вижу

[identity profile] d4s.livejournal.com 2012-08-06 05:18 pm (UTC)(link)
коммерческий продукт. по которому ты оказываешь поддержку. внезапно собранная кем-то jar-ка не собираются в идентичный вид из сырцов. клиент рвет и мечет -- у него фэйлится твой продукт, а не мифическая сторонняя библиотека ;-) ну и всякие параноидальные теории не стоит исключать ;-)

[identity profile] wildman.livejournal.com 2012-08-06 05:28 pm (UTC)(link)
всё выкачивается в виде *.jar и поставляется вместе со своим продуктом. работоспособность продукта гарантируется на срезе всего набора 3rd-party.

[identity profile] d4s.livejournal.com 2012-08-06 05:37 pm (UTC)(link)
угу. действия в случае глюков в 3rd-party jar?
исходники были на паре серверов и в бэкапе, но злобный хакер украл ключ и все удалил / жаба заставила закрыть исходники. Исходники можно скачать из каких-нибудь рапидшар (если повезет) -- Вася Пупкин делал копии и выкладывал, но... те ли это исходники? ;-)

[identity profile] wildman.livejournal.com 2012-08-06 05:40 pm (UTC)(link)
ты собираешься саппортить не свой софт?
ради бога. играйся сырцами
обычно в договорах прописана ответственность за подобные форсмажоры

соответственно:
>> действия в случае глюков в 3rd-party jar
ищется другая jar или пинаются разработчики текущей.

[identity profile] d4s.livejournal.com 2012-08-06 05:49 pm (UTC)(link)
продукт -- железка.
пнуть разработчика -- не всегда получится ;-)

[identity profile] wildman.livejournal.com 2012-08-06 05:29 pm (UTC)(link)
точнее зависимости у клиента при сборке забираются из прибитого гвоздями репозитория. подконтрольного разработчику

[identity profile] shaman237.livejournal.com 2012-08-06 06:35 pm (UTC)(link)
Тут тебе надо решиться, сапортишь ты это дело и если сапортишь, то на каких условиях. Мое мнение: если какие-то части функционала сделаны не тобой, а реализован лишь вызов сторонних объектов, то это обязательно надо сообщить заказчику и обговорить взаимодействие в будущем.
Ps. уже удалось покушать внедрение одной системы, в которой ключевая часть была OS решением, там ЕСЕСНО есть баг, который сообщество не может/не хочет исправить, а поставщик вроде как и готов исправить, но тогда теряется возможность в будущем апгрейда этих кусков кода

[identity profile] fas-tm.livejournal.com 2012-08-06 05:07 pm (UTC)(link)
для кровавого ынтырпрайза лучше держать все дерево у себя.
Уже сколько раз обжигались:
- автор библиотеки сошел сума/вши захватили датцентр/молния ударила прямо в сервер.
И мы потеряли линк на библиотеку. Да, их будет еще много, форки там итд. Но это не вариант.
- у кастомера на объекте может не быть доступа к интернету(Служба Безопасности выдает интернет по талонам в большие православные праздники)
Кто работал с кровавыми энтерпрайзами знают как это бывает.
- C вероятностью 99.9% сторонние либы надо будет патчить. И лучше держать у себя их вместе со своими накатанными патчами.
Edited 2012-08-06 17:19 (UTC)

[identity profile] max-posedon.livejournal.com 2012-08-06 05:33 pm (UTC)(link)
>молния ударила прямо в сервер
В случае python-а, и pypi.python.org это случается так часто, что если увидите человека который обновляет production с его - сразу задумайтесь о его квалификации.

[identity profile] d4s.livejournal.com 2012-08-06 05:40 pm (UTC)(link)
Вот! А люди говорят, что и так все OK -- вроде и с ними можно согласиться, но червие в голове кричит, что для критических для бизнеса вещей -- нельзя.

[identity profile] fas-tm.livejournal.com 2012-08-06 06:51 pm (UTC)(link)
люди говорят так если:
- жизненный цикл софта мал
- софт имеет минимум зависимостей
- это классический опенсорс, в котором нет денежного/анального наказания за простой.

Вот выше Максим привел абсолютно простой пример с питоном.
Мы тоже получали шишки.

[identity profile] max-posedon.livejournal.com 2012-08-06 05:31 pm (UTC)(link)
Ответ тут имхо, не зависит от технологий, но факт в том:

[ С точки зрения разовачивания в production ]
1. *всё* включая 3rd party, должно ставится с сервера контролируемого теми, кто производит deployment. И это *обязаны* быть *те же файлы* (md5, а не версия/размер), что и использовались при разработке и тестирвоании.
2. сама по себе пересборка 3rd-party не обязательна, если проводился аудит другими средствами

[ С точки зрения разработки ]
1. Иметь сырцы 3rd-party желательно
2. Пересобирать их, перед выкладыванием на сервер компании - желательно

Хороший Project Manager в общем должен тянуть всё, внутрь, для снижения рисков. И посылать на курсы повышения квалификации разработчиков, если они утверждают, что это сложно/мешает/и т.д.

[identity profile] d4s.livejournal.com 2012-08-06 06:08 pm (UTC)(link)
[ С точки зрения разовачивания в production ]
1. это как бы очевидно. вопрос не в этом, а в п.2, точнее -- что делать, если баги есть, а апстрима, как такового уже нет.

[ С точки зрения разработки ]
1. Сырцы тоже требуют jar-ки для сборки, набор которых не обязательно пересекается с изначальным ;-)
2. Без этого ты даже не будешь уверен, что ты сможешь пересобрать эту jar ;-)
Можно еще компилятор и окружение припомнить, которые апдейтятся на сборочной системе, пока в какой-то момент не оказывается, что в текущем окружении просто скомпилировать то же самое, что было в прошлом году, не получается (правда с jar тут я не уверен -- долговременного опыта по поддержке нет). Или обратная ситуация, что продукт оказывается завязан на специфическое окружение, включая аппаратуру, на которое все молятся, т.к. восстановить в случае чего будет тяжело (это уже из практики пример).

[identity profile] avr-forever.livejournal.com 2012-08-06 06:18 pm (UTC)(link)
Очень прикольно, но у меня случалась ситуация 2.2 совсем даже не с жабой, а с банальным C, когда проект, написанный полгода назад при обращении заказчика надо было поправить и пересобрать, а с тех пор компилятор и библиотеки обновились (чтобы была поддержка железки, используемой в другом проекте), в результате чего старый проект потребовал ручного вмешательства.

[identity profile] altmind.livejournal.com 2012-08-06 05:38 pm (UTC)(link)
мне больше импонирует первый вариант. он требует меньше возни для пользователей продукта и предоставляет гарантии того, что все все в один момент не сломается. увы, похоже, что такой подход популярен только в мире коробочного ПО и дорогого enterprise.

[identity profile] avr-forever.livejournal.com 2012-08-06 06:19 pm (UTC)(link)
А как же дистрибутивы Linux, в которых постоянно пересобирается весь мир? :)

[identity profile] altmind.livejournal.com 2012-08-06 07:27 pm (UTC)(link)
мне это довольно сильно надоело. я всерьез собираюсь поменять debian на nixos, где все пакеты собраны статически и любой пакет можно обновить в отдельности от остальной системы.

[identity profile] vp.livejournal.com 2012-08-06 07:52 pm (UTC)(link)
+1
прекратите каждый раз делать молотки, займитесь своей прикладной работой наконец.

[identity profile] avr-forever.livejournal.com 2012-08-06 08:05 pm (UTC)(link)
Ребе, вы не в теме. Debian как раз для тех, кому нужно работой заниматься, а не у себя на телефоне пересобирать вселенную.

[identity profile] dizel-by.livejournal.com 2012-08-06 08:21 pm (UTC)(link)
Плюсую

[identity profile] altmind.livejournal.com 2012-08-06 08:43 pm (UTC)(link)
вы дебианом то-пользовались? даже простейшие конфигурации пакетного менеджера вызывают большие проблемы. а когда система сшита частью из sid, частью из testing, правилом становится муторная ходьба по версиям пакетов в aptitude, ручное разрешение зависимостей и установка большой части пакетов через force.

[identity profile] avr-forever.livejournal.com 2012-08-06 08:55 pm (UTC)(link)
Я пользуюсь Debian с достаточно незапамятных времён, майнтейню приличное количество пакетов, а скоро, если всё будет хорошо, надеюсь стать DD. Проблемы иногда бывают, куда уж без этого, но в большинстве случаев всё просто работает, чего не скажешь о других дистрибутивах. Зависимости "ручками" нужно подсказывать только в том случае, если у Вас было подключено 100500 разных репозиториев и пакеты стоят вперемешку, потому как и apt-get, и aptitude стараются всё ставить из одного репозитория, а если версия, которая там есть, будет несовместима с другими пакетами по зависимостям, оно по умолчанию ставить не будет (что разрешается либо временной сменой преференций ключом -t, либо указанием версий через package/unstable, либо через package=0.5.6-1).

Ну и да, используйте apt-get, а не aptitude. Он чуть более тупой, но зато он быстрее, и как правило предлагает самое простое работающее решение, в отличие от aptitude, который придумывает их 100500 хитроумных, но 100400 из них включают в себя шаги в духе "вынести linux-image-2.6-686 и libc6".

[identity profile] altmind.livejournal.com 2012-08-06 09:15 pm (UTC)(link)
спасибо за развернутый комментарий, возьму на заметку.

[identity profile] vp.livejournal.com 2012-08-07 06:49 am (UTC)(link)
Не, у меня к дебиану-убунту-минту минимум претензий как раз таки :)

[identity profile] avr-forever.livejournal.com 2012-08-06 08:04 pm (UTC)(link)
Сшенно напрасно. Статическая сборка --- зло.

[identity profile] dizel-by.livejournal.com 2012-08-06 08:21 pm (UTC)(link)
Вообще статически? libc тоже? =))

[identity profile] metaclass.livejournal.com 2012-08-06 06:14 pm (UTC)(link)
Я предпочитаю первое - полный замкнутый цикл.
Но в случае конкретно жабы и мавена или clojure и leiningen - jar с фиксированными версиями можно считать эквивалентом окружения, таким же как компилятор и ос.
И смена версий производится так же как переползание на новую версию среды разработки.

Почему для жабы приемлем второй вариант: потому что этим пользуется столько людей и столько раз я это сам делал, что есть уверенность в способности починить, если что-то сломается, а оно ломается нечасто (во всяком случае, пока не начинаются конфликты версий зависимостей, и то примерно понятно как чинить).

[identity profile] d4s.livejournal.com 2012-08-06 06:43 pm (UTC)(link)
Т.е. все на полном доверии к автору, сборщику, промежуточным линиям связи? Там же, насколько я понимаю, даже подписывание далеко не везде?

я уже предложил одному человеку подключиться на общий свитч и всунуть ему в сборку какую-нить пакость :-)

[identity profile] metaclass.livejournal.com 2012-08-06 06:53 pm (UTC)(link)
А компилятору ты доверяшь? А драйверам файловой системы?:)

[identity profile] fas-tm.livejournal.com 2012-08-06 07:00 pm (UTC)(link)
Ребе, не перегибайте.
У меня до сих пор виртуалка с VS6.0(+ правленые заголовки) + DDK(древней версии). Терять это нельзя ибо вариантов собрать софт больше нет.

[identity profile] metaclass.livejournal.com 2012-08-06 07:10 pm (UTC)(link)
Я обычно такое стараюсь чинить до текущих версий.

Вообще говоря, я насмотрелся на линуксятину и стараюсь делать все как можно более стандартными средствами. Если принято мавен и репы - значит мавен и репы.
Если при этом что-то ломается - чиню у себя и иду трахать в мозг апстрим.

Клиентам, впрочем, стараюсь поставлять самозамкнутые продукты.

[identity profile] d4s.livejournal.com 2012-08-06 07:43 pm (UTC)(link)
Да :)
Оно, как минимум, собрано людьми, которых я знаю и которым я доверяю :)
Ну и ставлю подписанный или самосборный софт. Очень переживаю по поводу скайпа и все никак не возьмусь засунуть его в контейнер.
А вообще могу напомнить про сертификации разные на отсутствие недекларируемых возможностей в бинарных пакетах.

[identity profile] dizel-by.livejournal.com 2012-08-06 06:37 pm (UTC)(link)
Конечно же, все исходники. Но, по хорошему, за жяво надо ввести уголовную ответственность.

[identity profile] vp.livejournal.com 2012-08-06 07:53 pm (UTC)(link)
а билдите ли вы про сборке проекта сперва сам билдер, если у вас есть от него исходники? :)
Фрактал, ребе.
Главное, не забыть на фоне всего этого начать работать.

[identity profile] dizel-by.livejournal.com 2012-08-06 08:20 pm (UTC)(link)
Ребе, билдер считается кошерным, т.к. был установлен из кошерного зеркала кошерного дистрибутива. Это гарантирует как минимум то, что я смогу скачать тот же билдер в том же месте хотя бы ещё лет 5. А сторонние библиотеки обычно качаются с говносайтов на народ.ру, которые на следующий день перестают работать. Или вместо jar по ссылке качается детское порно, да

[identity profile] d4s.livejournal.com 2012-08-07 07:49 am (UTC)(link)
Недавний вылет белорусского зеркала много чего поставил раком некоторые кошерные схемы обновления.

[identity profile] dizel-by.livejournal.com 2012-08-07 07:55 am (UTC)(link)
Я даже не заметил :) у меня там балансер прописан

[identity profile] vp.livejournal.com 2012-08-06 07:50 pm (UTC)(link)
Я с большего согласен с max_posedon

Если сторонние библиотеки поставляются с исходниками, "иметь их". Каждый раз их собирать, если вы их уже собрали и оттестиировали, не обязательно. Можно включить бинарные. Главное, чтобы результат был проверенным и предсказуемым. Цель - минимизация рисков, но не работа ради работы и не исходники ради исходников.

Пример. У меня в билд включается pdf. Ее тестирует и собирает специальный человек. Нужно ли мне ее заново собирать (такая возможность есть) из исходников, если человек ее собрал, закомитил ее и исходники от нее? Считаю, что необязатально.

[identity profile] aliaksei.livejournal.com 2012-08-06 08:01 pm (UTC)(link)
Нахуй интернет. В один день за пять минут до сборки пятничного релиза внезапно окажется, что интернета нет или червь повелел на том конце переименовать файлы.

[identity profile] captain-hell.livejournal.com 2012-08-07 04:01 am (UTC)(link)
Это в итоге генту получится некое. Т.к. надо все уж собирать из исходников, чтоб наверняка...

[identity profile] pestilentia.livejournal.com 2012-08-07 06:31 am (UTC)(link)
нахуй 3rdparty deps вообще. чтоб не оказалось, что твое приложение "фонарик" помогает зимбабвийским князькам отмывать бабло внезапно.