python / python/cpython

Move vendored modules into a `vendor` directory

オープン
#129,222 コメント 32 件 リアクション 5 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

build type-feature
主要言語
Python
スター
77.2k
フォーク
36k
PR マージ指標
PR 指標を取得中

説明

Feature or enhancement

Proposal:

In CPython, we have some vendored libraries namely libmpdec, hacl, and expat. Those libraries are meant to be clone of their upstream (think of them as git submodules) and many times have I been exluding them from code search as they usually have non-CPython code involved.

We have a plan to remove vendored libmpdec (#115119) and we're almost here. In the long term, we could also try to unvendor expat (probably not hacl as it's used to implement hash functions fallbacks when OpenSSL is not present).

Affected modules:

  • libmpdec
  • expat
  • _hacl

Some advantages:

  • Easy exclusion of vendored modules from code search.
  • Easy addition and deletion of vendored modules.
  • We don't expect redistributors to edit vendored code (especially not hacl).
  • Hopefully less work than the Python/Programs split
  • Could be using git submodules (though this requires an internet connection, so maybe not)

Some inconvenients:

  • Quite painful refactoring since it would affect existing PRs.
  • Quite painful refactoring since it would affect distributors editing those files.

We can start with some modules that should be kept untouched such as HACL* sources and progressively move the others to reduce the work and conflicts. It doesn't need to happen in one go (for instance, we may well ignore the libmpdec case if we manage to make it unvendored before). I don't think we have much open PRs with expat (by the way, we could have a refresh script for expat to ease maintenance like https://github.com/python/cpython/issues/126623).

Now, the question is how this could affect downstream redistributors. I'm asking first on Github since I don't know whether they are active on Discourse or not. If everyone tells "it's fine", then I'll ask on Discourse to see if there are more redistributors that could be concerned.

cc

  • @zooba (Windows)
  • @mhsmith (Android) ✅
  • @doko42 / @stefanor (Ubuntu/Debian)
  • @mitya57 (Debian)
  • @hroncok / @vstinner (Fedora/RHEL) ✅
  • @mgorny (Gentoo) ✅
  • @danigm / @mcepl (openSUSE) ✅
  • @freakboy3742 / @ned-deily (macOS / iOS) ✅
  • @zanieb (relocatable builds)
  • @hugovk / @erlend-aasland (CPython)
  • @mweinelt (NixOS) ✅
  • @gpshead / @ncoghlan / @brettcannon / @zware (involved through Discord messages or reactions)

I don't know how moving mimalloc related stuff would affect the free-threaded build in particular, so I'm also going to ask @kumaraditya303 and @colesbury about it. EDIT: Turns out it's a no go for mimalloc as there is some CPython dedicated stuff, so we can put it out of the list (see https://github.com/python/cpython/issues/129222#issuecomment-2610160032).

For the hacl includes, I can take care of it.

コントリビューションガイド

コントリビューションガイドを開く

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

調査の方向性

まず、影響を受ける vendored modules—libmpdec、expat、_hacl—が CPython でどのように構成され、参照されているかを確認し、次に議論で提起された downstream redistributor の懸念を評価します。完了条件は、ビルドユーザー、ディストリビューター、および vendored のままになる可能性のあるモジュールを考慮したディレクトリレイアウトと移行計画について合意することです。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
python
領域
build-system
issue の種類
機能追加
難易度
5/5
見積もり時間
1週間以上
活発さ
停滞
明瞭さ
説明が足りない
初心者へのやさしさ
25/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。