ALT Linux Team development discussions
 help / color / mirror / Atom feed
From: Arseny Maslennikov <arseny@altlinux.org>
To: ALT Linux Team development discussions <devel@lists.altlinux.org>
Subject: Re: [devel] Расширение функциональности rpm-build-rust
Date: Sat, 19 Sep 2026 16:57:14 +0300
Message-ID: <aq6UqNrbPQILZ6vT@cello> (raw)
In-Reply-To: <20260916124847.61c08f93@legato>

[-- Attachment #1: Type: text/plain, Size: 15432 bytes --]

On Wed, Sep 16, 2026 at 12:48:47PM +0300, Paul Wolneykien wrote:
>   Короче говоря, я предлагаю завести и  сопровождать общую (shared)
> базу вендоринга, а в прикладных SRPM вендорить только экзотический
> минимум -- то есть то, что нужно только данной программе и никому
> больше не понадобится. То, что ещё называют compendium.

Как уже заметили другие уважаемые тимовцы, её можно представить:
— как склад всех крейтов всех актуальных версий (в гигапакете, на
сервере...)
— как семейство пакетов в отдельном компоненте, под усл. /usr/src
содержащих распакованные исходники крейтов.

Любая форма, которую может принять такая база вендоринга,
лежит где-то на этой шкале.

On Wed, Sep 16, 2026 at 12:48:47PM +0300, Paul Wolneykien wrote:
> > > On Wed, Sep 16, 2026 at 11:16:11AM +0300, Artem Semenov wrote:  
> > > > Предлагаю попробовать рассмотреть на будущее для раст механизмы, похожие на
> > > > xmvn и xgradle, чтобы не вендорить хотябы то, что уже есть в сизифе.  
>   Мне кажется, что дело не только в возможности использовать системные
> зависимости. Дело в учёте и контроле прежде всего. Вот мы можем как-то
> составить список всех зависимостей (проектов, фреймворков, библиотек,
> rust-пакетов или как они там называются),

"crate".
Бисер^W Ящик!

> которые завендорены среди
> SRPM в Сизифе? Имея такой список его можно дальше оптимизировать.
> Там же наверняка куча всего дублируется. А зачем?

Я тоже считаю, что низачем.
Чтобы подкрепить сей тезис, я тут предпринял попытку оценить количество
повторений для произвольного crate.

https://altlinux.space/arseny/cargo-sofa-analytics

Это (не очень эффективный) скрейпер
/gears и /srpms, его нужно запускать где-нибудь вблизи git.a.o;
например, на сервере team.a.o, аккаунт на котором полагается всем, у
кого есть доступ к gyle.

Для иллюстрации возьмём три сверхпопулярных ящика: 
aho-corasick, anyhow и thiserror.

Например, 6 наиболее популярных вариантов файла aho-corasick/Cargo.toml
на протяжении всех /gears и /srpms с действующей веткой sisyphus
оказались в том или ином vendor-каталоге 837 раз:
    cargo-analytics/. % (export LC_ALL=C; grep -Fr --no-filename aho-corasick/Cargo.toml out | awk '{ NF=3; $1=""; print }' | sort | uniq -c | sort -nr)
>       249  blob c4492a0170b0833a833226479a476d1d9239fb07
>       247  blob dbfa7a9cfdfa00164c4ffba94697672d8c07ae4a
>       152  blob 737f3ef96ccfe89253ee86e0a8442b1ab1435541
>        87  blob c9ad16d2aa5bec52a77f72393913418b6caf7992
>        51  blob 3219bb43cd2627df64eb29a7affc948e38b5b7d9
>        51  blob 1444ce3d1cd37d9133badb158a6ce789f613341a
>         9  blob 62b5f7e12909af6c9b502cae7f0aaf683bcb7a16
>         7  blob f2ebca9b9ba408bff9339acc66edf0560c65904e
>         7  blob 05e899cd4e44e68ff49a53d263220f6974060fdd
>         5  blob d148103d7468b847cfab58e300a51045f777e30c
>         5  blob adf819c504379cc5520f0a360c714ded168906f1
>         4  blob ee8e94e4c0d86a798a6a50b394fcf57ec5545d7e
>         4  blob 344f3e13c8516d78d965253b826fe6b6c7a39067
>         3  blob 412f9b0a70101416dc4b8de512e2bc6ff3cad802
>         2  blob f0abed5ae8152ff6000fcbb2b4cdf6c6a57d4f0e
>         2  blob ef2806914a860e101a73ace48bac41ea7950299c
>         2  blob a6e57b010b2637d5cc2a3cd4789265dbf7218489
>         2  blob a43e8720431ba98ca37b83212f3d5364266f667c
>         2  blob 42926108349d2be24c3ce5f4a5b35b0b75194243
>         2  blob 28d1f7b73cbc7300b7cafbe07c14e8a258b33e99
>         2  blob 0b8a5f5d0d3c85d18b1d24d5dbacac3450699d79
>         2  blob 08e8f3472a8a1a4c2c253a9d16c8525154d96f2a
>         1  blob a0c306a6f291b374e8af037b9b07fc5f52825fa5
>         1  blob 9b8995406bcff2606c1adb027f4f483445b2f5da
>         1  blob 93d5489c7559486e6084023fecb043f61d481b1d
>         1  blob 823a3035ba13e79a3181608395079eeaf388a70d
>         1  blob 6704e30237d042b07f42c9b13f577f8f4bf20220
>         1  blob 610bd4da5dc99f709fed6722c65b7181f1702140
>         1  blob 5c0f4e9bb855ffe5a4031ee2ad0d8cb163dedacb
>         1  blob 4ec45c00b357d8c51c15acaee789d11375a4e984
>         1  blob 38d89ae280bba638a32141c46f97233cf767c283
>         1  blob 06a91f1d0985982fe4c30abdc26a5cb4d39a971f
А варианты этого файла, указанные в git-деревьях 5 или менее раз,
вместе составили всего лишь 47 упоминаний.

Ну и, соотв., аналогичные данные для anyhow и thiserror.
Тот же thiserror, кстати, ещё и присутствует в исходниках другого
довольно популярного derive_more; вендоринг второго порядка.
(далее ещё две пасты и вывод в конце)

>   cargo-analytics/. % (export LC_ALL=C; grep -Fr --no-filename anyhow/Cargo.toml out | awk '{ NF=3; $1=""; print }' | sort | uniq -c | sort -nr)   
>       107  blob e4d2ca8fa51a7118bff269dc66b03f8fdf744e04
>       107  blob e1012e60f1bca7ee2178fcd008ea900e25bc359d
>        78  blob d0b23ccaf79c081a6258755e6cb9b33fdeb1bd8d
>        77  blob 37cdeb7934cc39a1c60e5a16cf2ff0cfa1dbcc8e
>        52  blob f3edfeebdbd2f608c5b9ed859d93cb23122d4ae3
>        51  blob eb949ef0e4344ee18dc01bdb2119233d929ad3b4
>        50  blob 202bc773a5ad96dbd124a7edbb7a2609b46e736d
>        48  blob 79a4ea455222d0d46cb45c96eecab597a7f19f08
>        27  blob 5c24c8ed4c00f586c2769694138e0f06d7e75bc9
>        17  blob 75d9a784a54122a183f2dc11fb3cc60c754d88cc
>        14  blob 85f63a3f6dea87326479a0bcf2beb9228dffb165
>        13  blob e3b9275c2a9448cac80586e95be6bb074a29c4db
>        12  blob 119adf4eec27f6e745ea070267a4e722b193f7fe
>        12  blob 0d6491c13c60ba72b11bd8f54d2d2b98dce8adb2
>        11  blob c06b4c73418251cdb2d4e1d51b0650d7efbf385a
>         7  blob f91b724ad44bdc9bedad1ba2e9144b95454d43c7
>         7  blob f84f27253cf70e579860949141033156dab120f4
>         7  blob ddf007aa86c49f77e31edd7f8adb3ecaaf111248
>         7  blob d42c4704c0292bd8e0f102ae5527bd08ba5040db
>         7  blob 95a8417434643e75431eef7009c6f4a7b254b42f
>         7  blob 83b7f3460913493912c6964c56a2f72d301f5f07
>         7  blob 78bb05953ba2fcc1ebcb67ca0decce4a2fd8bf26
>         6  blob c42ad25bde48e377664007eb79e2a68893911f08
>         6  blob b6d042b4bc18a0440659617e261f1049323edbce
>         6  blob 197d0dc2c30a5944bb72e1007ffdaa6d0aeb986e
>         5  blob b3945b00a0b5497994dd9014db5f3d14e26f9b6d
>         5  blob 9a96fe48b56dd12c8e446b5cb811427d0d0bfac2
>         4  blob 84fed478f68cd8c15f4cd1013d20ae124d62396b
>         3  blob b92e7a329706c3fe040493c2a9ef26e1cbc1ca51
>         3  blob 88be2c2790d6753c27482fc39c20b8c517f41305
>         3  blob 0a4eb7252b41cb6dbf064c3d0e7e363aca1ec976
>         2  blob f6b62357486e90f0d965b2eb24d38c93861bb550
>         2  blob e36ec0221cd0700ffc0d9b750fa677283456ca56
>         2  blob c38246ed7d46cfbdfd8730fb41d9d1e33f2d570b
>         2  blob 6c5516d4cea1f2aedcfdd7877af1684284452f1d
>         2  blob 5909456bbc0012a6b29da179d2f781b41b7544d4
>         2  blob 4b2c7cad14480ce40abf90ec74704a53616cb198
>         2  blob 3a5cce41240703efb29ba8cd0d5359190c4bf3a4
>         2  blob 2f5c8bceb7d2aa2cf12f4b3698987e9803d08f9e
>         2  blob 0cd83c5acb4e46b197c940f9be62fccce1975b19
>         2  blob 09c3dbf1e7ff845289124b21735c89b951fbfae1
>         1  blob fb1350f6932f26157835f7b6b6ecd9ac1fe14a2a
>         1  blob f3ea7c506b25353485763a21cbe1efcc45ce885f
>         1  blob e3f92ee297b72b3727fd69d7603bf851ffd55c1e
>         1  blob d8bb814e636ce4d1d21d274919d6091872423971
>         1  blob d1f3e3efcba3265d934e226c35a13d51ac07edd0
>         1  blob d161d08e23498500d8f730c412270f5b2925071f
>         1  blob c36e376d493230cafbaa34b1bfc8bdb351ad2505
>         1  blob bf9b18f92b03948490b84ac727fabccf0365653f
>         1  blob b16323b024eaba996211b6796709753f29662d81
>         1  blob 952219e8e419d7a55c9d4653e3244624a95a6cdd
>         1  blob 844c2bd3a3f4dce25185880071cc0311b76febf3
>         1  blob 83f27889c7aeab3527f8895712f6d5fdfcea94a5
>         1  blob 7e01b8ee8cd1b1ad1279f718a40258ae9ca5512d
>         1  blob 7959ef1adf49c8c8fd78400906a538fb82cf0977
>         1  blob 757bc1492912464c54fb57ad61afa4146ed64503
>         1  blob 6fca217806724e492ac21223b0f7695a75daee86
>         1  blob 6356b3869561a3e2ecd39bb29a8df569e01ab52f
>         1  blob 494c643618d1babf8433c8fa41092aa570854887
>         1  blob 300334dd5106d21b504c84621983995ad4d2b543
>         1  blob 1aa22dcaf88f2c0cf4e4a402746e557d1ddd399d
>         1  blob 13a1c51e21cd835fef8de73790a49be28f7e1583

>   cargo-analytics/. % (export LC_ALL=C; grep -Fr --no-filename thiserror/Cargo.toml out | awk '{ NF=3; $1=""; print }' | sort | uniq -c | sort -nr)   
>       173  blob 45b51a0c42540b00c836004dc3275f8615ad072a
>       172  blob 8321d4ab0045ec280e65197d8891db5e9f042acc
>        55  blob 59458a18778192aff0c7d4ff6c1faa1e8e3b0582
>        55  blob 28718d7f5b0d1d041915564ab07074d17c71e772
>        50  blob 7203507bfd834ffebd467255c0ed9b56de370ad7
>        50  blob 4e8bf68d70bfab9013d58dcc37a3b23480273863
>        45  blob 39504fe3db9533f923cb75cf3e46b157e7fd44b8
>        39  blob fd4952f91b68eef9f8129df1dc79b4c444622781
>        31  blob 455b950c37079a7c319349b167e777a4ada87179
>        26  blob 8e948da70d1f337c0d2e5526a3cc26b3ad3f583a
>        25  blob 485672ceeb199e9557c256781779ce4554a89475
>        22  blob 9fadb0a3af910edc77747bfd6460e35d266ff952
>        11  blob c921b994fa35299fd7d524aa096cefd0566fd2d9
>        11  blob 0280f356c05fc8f31c924481673286d478bd8665
>        10  blob 2d58539594bb24ea646826214833d75089056202
>        10  blob 0a3ec112778f215a497234fd17096ab585794c99
>         8  blob 052d9b882639ae15d1c7ee6370a7334cfd6fef46
>         6  blob 6d3021ae892bc1f04f8bdf38a9d7970827d79c00
>         5  blob efefc872cebcc3384749f963f2db4a5698b8358e
>         5  blob 6332c27a369df18b2ac7cfefdaefea280a1c35dc
>         5  blob 4c771f00ce7f9a13686828a5647c607c2291adb3
>         5  blob 2c1b4037a30504004cd0c510212bd4722adcc83c
>         4  blob 9cf91cb35311ac23d23aa31519274ae3eb9444bc
>         3  blob dd3403314c6b741cf800fee0ae9e68596cfb99da
>         3  blob db21f8f9dd4210331166fc660d57f652b2575d3a
>         3  blob c4850144a45609c7be1a0826c76c62cd2b719992
>         2  blob e235408d809bf9498da0eaa138f4eb2a5af58810
>         2  blob e1e1a6d7bfeb0e366c00c5f99f85f78b7a58c0f2
>         2  blob d7b215e9be760cbdc5b4f2159f340e0692449c5f
>         2  blob b22f808e28ec7683299718b49a949986a76ea3a2
>         2  blob 983368f8bf48e24d3e225c259cf8b78f5020f4d1
>         2  blob 91425c809990953d52087f52f6e0ce394fa59abd
>         2  blob 7255479278d3001c559c9a86fdcb0cc429f7faef
>         2  blob 71f10086a3e5653b747177c00185157d7141c4cc
>         2  blob 709f2d360ee6cdd2ab4c501241930bebb861b368
>         2  blob 644769f26880f506e1322fe8b91e6737fb9cae79
>         2  blob 608d904d22bb9a33e13b065c9d337d32c61ca221
>         1  blob fed8f7ac2dc57603eddeef9bacb5a5cf3d57a766
>         1  blob fd6cf03e34481e47956756f2b7c6f6c365c94146
>         1  blob fd2d13d14c517a7825b80ac7b87a4735630e9157
>         1  blob edacd09c27854ebeec152677ba7271aeb29fa147
>         1  blob eaab23fe4111a0808a392372a91eda280cebe7dc
>         1  blob da14270cbd2a8c5b8a9136556032f1b45470569e
>         1  blob d3697541967ebee26b6f160cae5693a1f1d87771
>         1  blob c5a699c67766ed749659974b1bd8fcbdc628bc35
>         1  blob c473dce604c3d6b66a9a62a8f1eee5ed163c976c
>         1  blob c0da22ccf98a1fc129bbeda103b653ac60a44a60
>         1  blob bb7315063cc2e69bf7c5f71debe60fddef3253e3
>         1  blob a231faffe706c17e2935e047d88a4636d997ca63
>         1  blob 9666512dade7583fc3a4bd768587fbdc607a027d
>         1  blob 86e24299927ca9d5a27e357cdd0b29d5c8657602
>         1  blob 82a8d666a8de22a7aadef981ebdcbd0ea4ff6fbf
>         1  blob 7d47c7c2f992c762237ab0cb8c4ae51b8ea781f0
>         1  blob 78c99d623b056024e26eb88495a00d2354293360
>         1  blob 78717612420576c4db6077da18e5bf707459871d
>         1  blob 71cf1def1bc57bfec55e6bff0daf3bc46b9d35ec
>         1  blob 5bb5b01d204e230793f513d28c2df38e5bd7925d
>         1  blob 53b073d7661b517f71a8359c71e3250e539ef391
>         1  blob 4ed217390c4320fb798fa96cb8fb1150393b70c3
>         1  blob 4d3905b713a2c7cc2d4e5dea6fa8d432bb51877c
>         1  blob 3064706bc251abfef1befec7453c56e4d3df6538
>         1  blob 2f5e9781ae321eaafbde93b4f1a4e77629748e30
>         1  blob 2f060d6d8f4a8cb7717c5efe0d81bbb40cbfd4b9
>         1  blob 1e1d0cdde9297bb7986e2dd6202c254cc5cae2b5
>         1  blob 093c851e63d91c3231335bf7cdb3d2b64195d1c1
>         1  blob 011dab7e1871ebe33bbf95023f264ae6bffafc47

Я б ещё сделал допущение, что часть внекластерных единиц среди этих
результатов — false positive: незначащие изменения файла привели к
изменению git blob id.
Чтобы дать точную оценку, надо открывать blob в нужном конкретном
репозитории (видимо, по конкретному пути) и его анализировать.

Теперь выводы.
* Инфраструктурный девендоринг в репозитории точно полезен: есть что
  дедуплицировать. Мы однозначно выиграем, если затащим 837 ахокорасиков
  в 6 пакетов (или, может быть, в один пакет со всеми версиями, CAS и
  сжатием).
* Количество версий (V) одного и того же крейта, нужных хотя бы одному
  потребителю, обыкновенно растёт много медленнее, чем кол-во
  потребителей (U) всех версий этого крейта; мы не
  получим U пакетов на крейт, даже если наивно будем класть каждую
  версию в свой пакет.

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

  parent reply	other threads:[~2026-09-19 13:57 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-15 13:39 ` Anton Farygin
2026-09-16  9:27     ` Ivan A. Melnikov
2026-09-16  8:16 ` Artem Semenov
2026-09-16  8:31   ` Ivan A. Melnikov
2026-09-16  8:54     ` Anton Zhukharev
2026-09-16  9:48       ` Paul Wolneykien
2026-09-16 11:16         ` Rx
2026-09-16 11:51             ` Anton Zhukharev
2026-09-16 11:58               ` Anton Zhukharev
2026-09-16 13:16               ` Paul Wolneykien
2026-09-19 13:57         ` Arseny Maslennikov [this message]
2026-09-16  9:36     ` Rx
2026-09-16  9:28   ` Rx
2026-09-16 18:17     ` Anton Zhukharev
2026-09-17 11:19   ` Paul Wolneykien

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=aq6UqNrbPQILZ6vT@cello \
    --to=arseny@altlinux.org \
    --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