ALT Linux Team development discussions
 help / color / mirror / Atom feed
From: Alexey Gladkov <legion@altlinux.ru>
To: ALT Linux Team development discussions <devel@lists.altlinux.org>
Subject: Re: [devel] [#219699] DONE (try 2) del=golang-tools
Date: Wed, 20 Feb 2019 22:17:03 +0100
Message-ID: <20190220211703.GD2364@MacBook-PC.fortress> (raw)
In-Reply-To: <20190220101221.GA28897@amox.t-linux.by>

On Wed, Feb 20, 2019 at 01:12:21PM +0300, Denis Pynkin wrote:
> > Гораздо правильнее будет завендорить их, а эти пакеты удалить.
> 
> Так у нас появилось уже внятное полиси про пакетирование Golang?

Раньше не было никакого vendor и go.mod. Было только дерево исходников и
уверение апстрима, что этого всего будет достаточно и они знают секрет как
это всё поддерживать в рабочем состоянии без версионирования.

Их секретное кунг-фу было поддержка обратной совместимости в master до
самой первой версии и если что-то ломаешь, то делать новый модуль.

Но спустя несколько лет к апстриму пришло осознание, что поддерживать
обратную совместимость и переименовывать модули не работает даже внутри
гугла. Разработчик может даже удалить модуль с github.com и тем самым
сломать других. Поэтому им пришлось ввести vendor директории, где можно
сохранить копию кода зависимостей. Но гугл не был бы гуглом если бы не
пошёл своим путём. Они не сделали сохранения ни какой информации о том,
что лежит в vendor. Там просто код. Поэтому появилось множество сторонних
проектов, которые сохраняли инфу о версиях и обновляли копию кода (godep,
glide, gpm, dep, vndr и т.д.).

Учитывая всё сказанное выше в тот момент, когда я начал паковать golang
было вроде логично сделать скрипты и макросы, чтобы упростить упаковку
исходников в общее дерево и обновлять их и проверять по зависимостям rpm
кто от модуля зависит.

Оглядываясь назад я считаю, что это было ошибкой.

Сейчас в golang осознали, что версии всё-таки нужны. В golang 1.11
создадут модули с semver, но с своими особенностями. Будет поддержка
vendor директории. Для интересующихся:

https://github.com/golang/go/wiki/Modules

После работы с довольно большими проектами на golang я сейчас считаю, что 
класть зависимости в vendor директорию единственный способ как
поддерживать проекты на golang. Если не просто класть код руками туда, а
использовать go.mod или godep, то понять кто с чем собран становится
достаточно просто.

Модули в пакетах всё равно не дают выигрыша так как после обновления
модуля нужно пересобрать всех конечных потребителей (цепочка зависимостей
может быть длинной).

> Лично я бы с удовольствием выкинул бы те 30+ пакетов-зависимостей,
> которые пришлось вливать ради LXD.
> 
> Можно ли глянуть на какой-нибудь пакет, где используется вендоринг?

http://git.altlinux.org/gears/m/md2man.git

или вот апстримные проекты:

https://github.com/docker/distribution
https://github.com/kubernetes/kubernetes
https://github.com/etcd-io/etcd

-- 
Rgrds, legion



  reply	other threads:[~2019-02-20 21:17 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-01-22 10:54 ` Dmitry V. Levin
2019-01-22 11:08   ` Alexey Gladkov
2019-01-22 11:12     ` Alexey Gladkov
2019-01-22 11:16       ` Dmitry V. Levin
2019-01-22 14:55         ` Igor Vlasenko
2019-02-05 17:49           ` Dmitry V. Levin
2019-02-05 20:58             ` Igor Vlasenko
2019-02-06  0:17               ` Dmitry V. Levin
2019-02-06  5:52                 ` Vladimir Didenko
2019-02-19 17:03                   ` Dmitry V. Levin
2019-02-19 17:08                     ` Alexey Gladkov
2019-02-19 17:21                       ` Vladimir Didenko
2019-02-20 10:12                       ` Denis Pynkin
2019-02-20 21:17                         ` Alexey Gladkov [this message]
2019-03-14 20:42                         ` Dmitry V. Levin
2019-02-19 22:14                     ` Igor Vlasenko
2019-02-19 22:48                       ` Dmitry V. Levin
2019-02-19 23:14                         ` Denis Pynkin
2019-02-19 23:27                         ` Alexey Gladkov
2019-02-19 23:32                           ` Dmitry V. Levin
2019-02-19 23:46                             ` Alexey Gladkov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190220211703.GD2364@MacBook-PC.fortress \
    --to=legion@altlinux.ru \
    --cc=devel@lists.altlinux.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

ALT Linux Team development discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/devel/0 devel/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 devel devel/ http://lore.altlinux.org/devel \
		devel@altlinux.org devel@altlinux.ru devel@lists.altlinux.org devel@lists.altlinux.ru devel@linux.iplabs.ru mandrake-russian@linuxteam.iplabs.ru sisyphus@linuxteam.iplabs.ru
	public-inbox-index devel

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://lore.altlinux.org/org.altlinux.lists.devel


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git