python / python/cpython

Move vendored modules into a `vendor` directory

Đang mở
#129,222 32 bình luận 5 reaction 0 người được giao Xem trên GitHub

Chưa có ai nhận issue này.

build type-feature
Ngôn ngữ chính
Python
Star
77.2k
Fork
35.9k
Chỉ số merge pull request
Chỉ số pull request đang chờ

Mô tả

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.

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Hướng nghiên cứu

Bắt đầu bằng việc xem xét cách các module vendored bị ảnh hưởng—libmpdec, expat và _hacl—được tổ chức và tham chiếu trong CPython, sau đó đánh giá các mối quan ngại của các downstream redistributor được nêu ra trong cuộc thảo luận. Công việc được coi là hoàn tất khi đã thống nhất về bố cục thư mục và kế hoạch di chuyển có tính đến người dùng build, các distributor và những module có thể vẫn là vendored.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Đánh giá

Công nghệ
python
Lĩnh vực
build-system
Loại issue
Tính năng
Độ khó
5/5
Thời gian dự kiến
Hơn một tuần
Mức độ hoạt động
Đình trệ
Độ rõ ràng
Cần làm rõ
Mức phù hợp với người mới
25/100

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.