Summary
Currently, Linux Python wheels are built without the RCSB feature due to OpenSSL cross-compilation issues in manylinux containers. This means Linux users cannot use download_structure() and rcsb_search() functions.
Current Behavior
| Platform |
RCSB Feature |
| macOS |
✅ Available |
| Windows |
✅ Available |
| Linux |
❌ Not available |
Root Cause
The reqwest crate uses native-tls by default, which requires OpenSSL. Cross-compiling OpenSSL for Linux aarch64 in manylinux containers fails because:
before-script-linux in maturin-action runs on the host, not inside the container for cross-compilation
native-tls-vendored requires Perl modules (IPC::Cmd, FindBin) not available in manylinux containers
rustls-tls alternative fails because ring crate doesn't support aarch64 cross-compilation
Potential Solutions to Investigate
1. Use rustls-tls with aws-lc-rs backend
ring is being replaced by aws-lc-rs in many projects
- May have better cross-compilation support
- Requires
reqwest feature configuration change
2. Custom manylinux Docker image
- Pre-install OpenSSL development headers
- Pre-install required Perl modules
- Use as custom container in CI
3. Use zig for cross-compilation
cargo-zigbuild handles cross-compilation better
- May resolve OpenSSL linking issues
4. Separate RCSB into optional runtime dependency
- Ship Linux wheels without RCSB compiled in
- Provide separate
pdbrust-rcsb package that users can install if needed
- Would require Python-side HTTP implementation
5. Wait for maturin/manylinux improvements
- Track upstream issues for better OpenSSL support
- manylinux_2_28 might have better tooling
References
Acceptance Criteria
Summary
Currently, Linux Python wheels are built without the RCSB feature due to OpenSSL cross-compilation issues in manylinux containers. This means Linux users cannot use
download_structure()andrcsb_search()functions.Current Behavior
Root Cause
The
reqwestcrate usesnative-tlsby default, which requires OpenSSL. Cross-compiling OpenSSL for Linux aarch64 in manylinux containers fails because:before-script-linuxin maturin-action runs on the host, not inside the container for cross-compilationnative-tls-vendoredrequires Perl modules (IPC::Cmd, FindBin) not available in manylinux containersrustls-tlsalternative fails becauseringcrate doesn't support aarch64 cross-compilationPotential Solutions to Investigate
1. Use
rustls-tlswithaws-lc-rsbackendringis being replaced byaws-lc-rsin many projectsreqwestfeature configuration change2. Custom manylinux Docker image
3. Use zig for cross-compilation
cargo-zigbuildhandles cross-compilation better4. Separate RCSB into optional runtime dependency
pdbrust-rcsbpackage that users can install if needed5. Wait for maturin/manylinux improvements
References
Acceptance Criteria