Wiki: https://fedoraproject.org/wiki/Changes/SplitRubyBuild
Discussion Thread: https://discussion.fedoraproject.org/t/177635
**This is a proposed Change for Fedora Linux.**
This document represents a proposed Change. As part of the Changes process, proposals are publicly announced in order to receive community feedback. This proposal will only be implemented if approved by the Fedora Engineering Steering Committee.
== Summary ==
The `ruby-build` package will be split into a main package and several subpackages (`ruby-build-jruby`, `ruby-build-truffleruby`, ...). This allows users to install only the build dependencies required for their specific Ruby implementation, significantly reducing the default installation size and dependency footprint.
== Owner ==
* Name: [[User:mikelo2| Mikel Olasagasti]]
* Email: mikel@olasagasti.info
== Detailed Description ==
=== Motivation ===
Currently, the `ruby-build` spec file utilizes a comprehensive list of `Recommends` to ensure all possible Ruby implementations can be built. This monolithic approach forces the package manager to pull in a massive dependency chain by default.
For example, a default installation of `ruby-build` (which is a 323 KiB package) currently results in a transaction of 146 packages, requiring 404 MiB of downloads and occupying 2 GiB of disk space.
<pre>
# dnf install ruby-build
Updating and loading repositories:
Repositories loaded.
Package Arch Version Repository Size
Installing:
ruby-build x86_64 0:20251023-1.fc44 rawhide 323.4 KiB
Installing dependencies:
alsa-lib x86_64 0:1.2.15-4.fc44 rawhide 1.5 MiB
avahi-libs x86_64 0:0.9~rc2-6.fc43 rawhide 171.6 KiB
binutils x86_64 0:2.45.50-9.fc44 rawhide 27.0 MiB
clang-libs x86_64 0:21.1.7-1.fc44 rawhide 114.9 MiB
clang-resource-filesystem x86_64 0:21.1.7-1.fc44 rawhide 15.3 KiB
cmake-filesystem x86_64 0:3.31.10-3.fc44 rawhide 0.0 B
cpp x86_64 0:15.2.1-5.fc44 rawhide 38.0 MiB
cups-filesystem noarch 1:2.4.16-4.fc44 rawhide 0.0 B
cups-libs x86_64 1:2.4.16-4.fc44 rawhide 618.4 KiB
dbus-libs x86_64 1:1.16.0-4.fc43 rawhide 345.5 KiB
ed x86_64 0:1.22.3-1.fc44 rawhide 148.9 KiB
elfutils-debuginfod-client x86_64 0:0.194-2.fc44 rawhide 84.0 KiB
expat x86_64 0:2.7.3-1.fc44 rawhide 301.1 KiB
gcc x86_64 0:15.2.1-5.fc44 rawhide 111.9 MiB
gcc-c++ x86_64 0:15.2.1-5.fc44 rawhide 41.4 MiB
glibc-devel x86_64 0:2.42.9000-16.fc44 rawhide 2.3 MiB
groff-base x86_64 0:1.23.0-11.fc44 rawhide 3.8 MiB
info x86_64 0:7.2-7.fc44 rawhide 357.9 KiB
jansson x86_64 0:2.14-3.fc43 rawhide 89.1 KiB
javapackages-filesystem noarch 0:6.4.1-4.fc44 rawhide 2.0 KiB
kernel-headers x86_64 0:6.19.0-0.rc1.15.fc44 rawhide 6.9 MiB
libedit x86_64 0:3.1-57.20251016cvs.fc44 rawhide 240.2 KiB
libedit-devel x86_64 0:3.1-57.20251016cvs.fc44 rawhide 59.4 KiB
libmpc x86_64 0:1.3.1-8.fc43 rawhide 160.6 KiB
libpkgconf x86_64 0:2.3.0-3.fc43 rawhide 78.1 KiB
libstdc++-devel x86_64 0:15.2.1-5.fc44 rawhide 37.2 MiB
libxcrypt-devel x86_64 0:4.5.2-2.fc44 rawhide 31.0 KiB
libzstd-devel x86_64 0:1.5.7-3.fc44 rawhide 217.6 KiB
lksctp-tools x86_64 0:1.0.21-2.fc44 rawhide 251.0 KiB
llvm x86_64 0:21.1.7-1.fc44 rawhide 89.3 MiB
llvm-filesystem x86_64 0:21.1.7-1.fc44 rawhide 0.0 B
llvm-googletest x86_64 0:21.1.7-1.fc44 rawhide 2.4 MiB
llvm-libs x86_64 0:21.1.7-1.fc44 rawhide 138.6 MiB
llvm-static x86_64 0:21.1.7-1.fc44 rawhide 377.5 MiB
llvm-test x86_64 0:21.1.7-1.fc44 rawhide 2.3 MiB
make x86_64 1:4.4.1-11.fc43 rawhide 1.8 MiB
mpdecimal x86_64 0:4.0.1-2.fc43 rawhide 217.2 KiB
ncurses x86_64 0:6.5-8.20250614.fc44 rawhide 609.8 KiB
ncurses-c++-libs x86_64 0:6.5-8.20250614.fc44 rawhide 153.6 KiB
nspr x86_64 0:4.38.2-1.fc44 rawhide 315.5 KiB
nss x86_64 0:3.119.0-1.fc44 rawhide 1.9 MiB
nss-softokn x86_64 0:3.119.0-1.fc44 rawhide 2.0 MiB
nss-softokn-freebl x86_64 0:3.119.0-1.fc44 rawhide 990.8 KiB
nss-sysinit x86_64 0:3.119.0-1.fc44 rawhide 18.1 KiB
nss-util x86_64 0:3.119.0-1.fc44 rawhide 204.8 KiB
perl-AutoLoader noarch 0:5.74-520.fc43 rawhide 20.6 KiB
perl-B x86_64 0:1.89-520.fc43 rawhide 501.3 KiB
perl-Carp noarch 0:1.54-520.fc43 rawhide 46.6 KiB
perl-Class-Struct noarch 0:0.68-520.fc43 rawhide 25.4 KiB
perl-Data-Dumper x86_64 0:2.191-521.fc43 rawhide 115.6 KiB
perl-Digest noarch 0:1.20-520.fc43 rawhide 35.3 KiB
perl-Digest-MD5 x86_64 0:2.59-520.fc43 rawhide 59.7 KiB
perl-DynaLoader x86_64 0:1.57-520.fc43 rawhide 32.1 KiB
perl-Encode x86_64 4:3.21-520.fc43 rawhide 4.7 MiB
perl-Errno x86_64 0:1.38-520.fc43 rawhide 8.4 KiB
perl-Exporter noarch 0:5.79-520.fc43 rawhide 54.3 KiB
perl-Fcntl x86_64 0:1.20-520.fc43 rawhide 48.8 KiB
perl-File-Basename noarch 0:2.86-520.fc43 rawhide 14.0 KiB
perl-File-Path noarch 0:2.18-521.fc44 rawhide 63.5 KiB
perl-File-Temp noarch 1:0.231.200-1.fc44 rawhide 163.7 KiB
perl-File-stat noarch 0:1.14-520.fc43 rawhide 12.5 KiB
perl-FileHandle noarch 0:2.05-520.fc43 rawhide 9.4 KiB
perl-Getopt-Long noarch 1:2.58-520.fc43 rawhide 144.5 KiB
perl-Getopt-Std noarch 0:1.14-520.fc43 rawhide 11.2 KiB
perl-HTTP-Tiny noarch 0:0.090-521.fc43 rawhide 154.4 KiB
perl-IO x86_64 0:1.55-520.fc43 rawhide 147.4 KiB
perl-IO-Socket-IP noarch 0:0.43-521.fc43 rawhide 100.3 KiB
perl-IO-Socket-SSL noarch 0:2.095-2.fc43 rawhide 714.5 KiB
perl-IPC-Open3 noarch 0:1.24-520.fc43 rawhide 27.7 KiB
perl-MIME-Base32 noarch 0:1.303-24.fc43 rawhide 30.7 KiB
perl-MIME-Base64 x86_64 0:3.16-520.fc43 rawhide 42.0 KiB
perl-Net-SSLeay x86_64 0:1.94-11.fc43 rawhide 1.3 MiB
perl-POSIX x86_64 0:2.23-520.fc43 rawhide 231.4 KiB
perl-PathTools x86_64 0:3.94-520.fc43 rawhide 180.0 KiB
perl-Pod-Escapes noarch 1:1.07-520.fc43 rawhide 24.9 KiB
perl-Pod-Perldoc noarch 0:3.28.01-521.fc43 rawhide 163.7 KiB
perl-Pod-Simple noarch 1:3.47-3.fc43 rawhide 565.3 KiB
perl-Pod-Usage noarch 4:2.05-520.fc43 rawhide 86.3 KiB
perl-Scalar-List-Utils x86_64 5:1.70-1.fc43 rawhide 144.9 KiB
perl-SelectSaver noarch 0:1.02-520.fc43 rawhide 2.2 KiB
perl-Socket x86_64 4:2.040-2.fc43 rawhide 120.3 KiB
perl-Storable x86_64 1:3.37-521.fc43 rawhide 231.2 KiB
perl-Symbol noarch 0:1.09-520.fc43 rawhide 6.8 KiB
perl-Term-ANSIColor noarch 0:5.01-521.fc43 rawhide 97.5 KiB
perl-Term-Cap noarch 0:1.18-520.fc43 rawhide 29.3 KiB
perl-Text-ParseWords noarch 0:3.31-520.fc43 rawhide 13.6 KiB
perl-Text-Tabs+Wrap noarch 0:2024.001-520.fc43 rawhide 22.6 KiB
perl-Time-Local noarch 2:1.350-520.fc43 rawhide 69.0 KiB
perl-URI noarch 0:5.34-2.fc44 rawhide 268.0 KiB
perl-base noarch 0:2.27-520.fc43 rawhide 12.6 KiB
perl-constant noarch 0:1.33-521.fc43 rawhide 26.2 KiB
perl-if noarch 0:0.61.000-520.fc43 rawhide 5.8 KiB
perl-interpreter x86_64 4:5.42.0-520.fc43 rawhide 118.6 KiB
perl-libnet noarch 0:3.15-521.fc43 rawhide 289.4 KiB
perl-libs x86_64 4:5.42.0-520.fc43 rawhide 11.5 MiB
perl-locale noarch 0:1.13-520.fc43 rawhide 6.1 KiB
perl-mro x86_64 0:1.29-520.fc43 rawhide 41.6 KiB
perl-overload noarch 0:1.40-520.fc43 rawhide 71.6 KiB
perl-overloading noarch 0:0.02-520.fc43 rawhide 4.9 KiB
perl-parent noarch 1:0.244-520.fc43 rawhide 10.3 KiB
perl-podlators noarch 1:6.0.2-520.fc43 rawhide 317.5 KiB
perl-vars noarch 0:1.05-520.fc43 rawhide 3.9 KiB
pkgconf x86_64 0:2.3.0-3.fc43 rawhide 88.5 KiB
pkgconf-m4 noarch 0:2.3.0-3.fc43 rawhide 14.4 KiB
pkgconf-pkg-config x86_64 0:2.3.0-3.fc43 rawhide 989.0 B
python-pip-wheel noarch 0:25.3-1.fc44 rawhide 1.2 MiB
python3 x86_64 0:3.14.2-1.fc44 rawhide 28.9 KiB
python3-libs x86_64 0:3.14.2-1.fc44 rawhide 43.1 MiB
ruby-default-gems noarch 0:3.4.7-28.fc44 rawhide 66.1 KiB
ruby-libs x86_64 0:3.4.7-28.fc44 rawhide 15.1 MiB
rubygem-io-console x86_64 0:0.8.1-28.fc44 rawhide 33.2 KiB
rubygem-irb noarch 0:1.14.3-28.fc44 rawhide 290.3 KiB
rubygem-json x86_64 0:2.15.1-1.fc44 rawhide 222.3 KiB
rubygem-psych x86_64 0:5.2.2-28.fc44 rawhide 132.6 KiB
rubygem-rbs x86_64 0:3.8.0-28.fc44 rawhide 5.0 MiB
rubygem-rdoc noarch 0:6.14.2-201.fc44 rawhide 1.9 MiB
rubygems noarch 0:3.6.9-28.fc44 rawhide 1.4 MiB
rubypick noarch 0:1.1.1-23.fc43 rawhide 4.4 KiB
rust-std-static x86_64 0:1.92.0-1.fc44 rawhide 165.6 MiB
tzdata-java noarch 0:2025c-1.fc44 rawhide 100.2 KiB
Installing weak dependencies:
clang x86_64 0:21.1.7-1.fc44 rawhide 65.5 MiB
compiler-rt x86_64 0:21.1.7-1.fc44 rawhide 41.0 MiB
gdbm-devel x86_64 1:1.23-10.fc43 rawhide 82.0 KiB
java-25-openjdk-headless x86_64 1:25.0.1.0.8-1.fc44 rawhide 236.3 MiB
libatomic x86_64 0:15.2.1-5.fc44 rawhide 36.7 KiB
libffi-devel x86_64 0:3.5.2-1.fc44 rawhide 33.9 KiB
libomp x86_64 0:21.1.7-1.fc44 rawhide 2.8 MiB
libomp-devel x86_64 0:21.1.7-1.fc44 rawhide 1.5 MiB
libyaml-devel x86_64 0:0.2.5-17.fc43 rawhide 1.1 MiB
llvm-devel x86_64 0:21.1.7-1.fc44 rawhide 33.5 MiB
ncurses-devel x86_64 0:6.5-8.20250614.fc44 rawhide 893.4 KiB
openssl-devel x86_64 1:3.5.4-1.fc44 rawhide 4.6 MiB
patch x86_64 0:2.8-3.fc44 rawhide 226.6 KiB
perl-File-Compare noarch 0:1.100.800-520.fc43 rawhide 5.6 KiB
perl-FindBin noarch 0:1.54-520.fc43 rawhide 6.8 KiB
perl-NDBM_File x86_64 0:1.18-520.fc43 rawhide 28.5 KiB
python-unversioned-command noarch 0:3.14.2-1.fc44 rawhide 23.0 B
readline-devel x86_64 0:8.3-2.fc43 rawhide 595.8 KiB
ruby x86_64 0:3.4.7-28.fc44 rawhide 85.5 KiB
ruby-bundled-gems x86_64 0:3.4.7-28.fc44 rawhide 2.2 MiB
rubygem-bigdecimal x86_64 0:3.1.8-28.fc44 rawhide 134.7 KiB
rubygem-bundler noarch 0:2.6.9-28.fc44 rawhide 1.5 MiB
rubygem-rake noarch 0:13.3.0-101.fc43 rawhide 134.1 KiB
rust x86_64 0:1.92.0-1.fc44 rawhide 93.5 MiB
zlib-ng-compat-devel x86_64 0:2.3.2-2.fc44 rawhide 107.0 KiB
Transaction Summary:
Installing: 146 packages
Total size of inbound packages is 404 MiB. Need to download 404 MiB.
After this operation, 2 GiB extra will be used (install 2 GiB, remove 0 B).
</pre>
This includes heavy dependencies like `java-headless`, `rust`, `llvm`, and `clang`, even if the user only intends to build a standard MRI Ruby version.
This is the content of the spec that pulls all those dependencies:
<pre>
# ruby-build can build various ruby interpreters from source, which in turn can
# require additional dependencies
Recommends: bzip2
Recommends: clang
Recommends: gdbm-devel
Recommends: java-headless
Recommends: libffi-devel
Recommends: libyaml-devel
Recommends: llvm-devel
Recommends: make
Recommends: ncurses-devel
Recommends: openssl-devel
Recommends: patch
Recommends: perl-File-Compare
Recommends: perl-FindBin
Recommends: readline-devel
Recommends: ruby
Recommends: rubygem-rake
Recommends: rust
Recommends: zlib-devel
</pre>
=== Proposed Solution ===
The `ruby-build` package works by providing a collection of build definition files (simple text files) located in `/usr/share/ruby-build`. Each file defines how to download and compile a specific version of a Ruby interpreter like `3.2.2`, `jruby-9.4.0.0` or `truffleruby-22.3`.
This proposal changes the packaging structure to split `ruby-build` into modular subpackages based on these definition types. Each subpackage will provide the necessary build dependencies for a specific subset of definition files, matched by naming patterns. This ensures that if a user only intends to build standard MRI Ruby, they are not forced to install the build chain for JRuby or TruffleRuby.
The new package structure will be as follows:
* **ruby-build (Main Package)**
** Would be a meta-package requiring `ruby-build-core` and recommending `ruby-build-ruby`.
* **ruby-build-core**
** Contains the core binary (`/usr/bin/ruby-build`) and the man page.
** All target subpackages require this package and not `ruby-build` meta-package to avoid pulling `ruby-build-ruby` and its dependencies as recommended package.
* **ruby-build-ruby**
** Targets standard MRI/CRuby versions (definitions matching `^[0-9]*`).
** Requires: `gcc`, `perl-interpreter`, `perl(FindBin)`, `perl(lib)`, `perl(IPC::Cmd)`, `perl(File::Compare)`, `perl(File::Copy)`, `zlib-ng-compat-devel`, `libffi-devel`, `libyaml-devel`.
* **ruby-build-jruby**
** Targets JRuby versions (definitions matching `^jruby`).
** Requires: `java-latest-openjdk-headless`, `make`, `gcc-c++`.
* **ruby-build-mruby**
** Targets mruby versions (definitions matching `^mruby`).
** Requires: `ruby`, `rubygem-rake`.
* **ruby-build-picoruby**
** Targets PicoRuby versions (definitions matching `^pico`).
** Requires: `ruby`, `rubygem-rake`, `gcc`, `git-core`.
* **ruby-build-truffleruby**
** Targets TruffleRuby versions (definitions matching `^truffle`).
** Requires: `gcc`, `libyaml-devel`.
* **ruby-build-others**
** Targets less common implementations available via `rbenv install -L` (such as rbx, ree, etc.).
** Keeps the main dependency set clean.
* **ruby-build-all**
** Metapackage to install all subpackages
* **ruby-build-rbenv**
** Already exists
** Contains the ruby-build plugin for rbenv
The dependency lists are optimized for modern releases of these Ruby implementations.
== Feedback ==
== Benefit to Fedora ==
* Bloat Reduction: A default installation of `ruby-build` will drop from ~2 GiB to a few megabytes, respecting user resources.
* Modularity: Users and CI/CD systems can install exactly what they need without pulling in the entire Java ecosystem or Rust toolchain unnecessarily.
* Security: Reduces the attack surface on systems that do not need the JVM or legacy build tools.
== Scope ==
* Proposal owners: Change the spec to create the subpackages.
* Other developers: Nothing
* Release engineering: Nothing
* Policies and guidelines: N/A (not needed for this Change)
* Trademark approval: N/A (not needed for this Change)
* Alignment with the Fedora Strategy:
== Upgrade/compatibility impact ==
* The new package `ruby-build-ruby` would be installed and multiple dependencies could be removed from the system automatically as nothing else may depend on them.
* For users wanting to build a Ruby implementation other than CRuby would need to install the required subpackage to get the definitions.
== Early Testing (Optional) ==
Test package available in Copr at https://copr.fedorainfracloud.org/coprs/mikelo2/split-ruby-build/ and code at https://src.fedoraproject.org/fork/mikelo2/rpms/ruby-build/commits/split-rubybuild
== How To Test ==
1. Install the package:
`dnf copr enable mikelo2/split-ruby-build`
`dnf install ruby-build`
*Verify that it does NOT pull in `java-headless` or `rust` by default.*
2. Test Standard Ruby:
`dnf install rbenv`
`rbenv install 3.4.8`
*This should work out of the box (via `ruby-build-ruby`).*
3. Test JRuby (Optional):
`rbenv install jruby-9.4.0.0`
*This should fail initially.*
`dnf install ruby-build-jruby`
`rbenv install jruby-9.4.0.0`
*This should now succeed.*
== User Experience ==
- Users will notice a significantly faster and smaller installation process for `ruby-build`.
- Advanced users may need to manually install specific subpackages (like `ruby-build-truffleruby`) if they are working with non-standard Ruby implementations, but the vast majority of users (MRI Ruby) will see no change in workflow, only in disk savings.
== Dependencies ==
N/A
== Contingency Plan ==
* Contingency mechanism: Revert the changes to the spec file to the monolithic dependency list
* Contingency deadline: Beta Freeze
* Blocks release? No
== Documentation ==
N/A (not a System Wide Change)
== Release Notes ==
\n
Discussion Thread: https://discussion.fedoraproject.org/t/177635
**This is a proposed Change for Fedora Linux.**
This document represents a proposed Change. As part of the Changes process, proposals are publicly announced in order to receive community feedback. This proposal will only be implemented if approved by the Fedora Engineering Steering Committee.
== Summary ==
The `ruby-build` package will be split into a main package and several subpackages (`ruby-build-jruby`, `ruby-build-truffleruby`, ...). This allows users to install only the build dependencies required for their specific Ruby implementation, significantly reducing the default installation size and dependency footprint.
== Owner ==
* Name: [[User:mikelo2| Mikel Olasagasti]]
* Email: mikel@olasagasti.info
== Detailed Description ==
=== Motivation ===
Currently, the `ruby-build` spec file utilizes a comprehensive list of `Recommends` to ensure all possible Ruby implementations can be built. This monolithic approach forces the package manager to pull in a massive dependency chain by default.
For example, a default installation of `ruby-build` (which is a 323 KiB package) currently results in a transaction of 146 packages, requiring 404 MiB of downloads and occupying 2 GiB of disk space.
<pre>
# dnf install ruby-build
Updating and loading repositories:
Repositories loaded.
Package Arch Version Repository Size
Installing:
ruby-build x86_64 0:20251023-1.fc44 rawhide 323.4 KiB
Installing dependencies:
alsa-lib x86_64 0:1.2.15-4.fc44 rawhide 1.5 MiB
avahi-libs x86_64 0:0.9~rc2-6.fc43 rawhide 171.6 KiB
binutils x86_64 0:2.45.50-9.fc44 rawhide 27.0 MiB
clang-libs x86_64 0:21.1.7-1.fc44 rawhide 114.9 MiB
clang-resource-filesystem x86_64 0:21.1.7-1.fc44 rawhide 15.3 KiB
cmake-filesystem x86_64 0:3.31.10-3.fc44 rawhide 0.0 B
cpp x86_64 0:15.2.1-5.fc44 rawhide 38.0 MiB
cups-filesystem noarch 1:2.4.16-4.fc44 rawhide 0.0 B
cups-libs x86_64 1:2.4.16-4.fc44 rawhide 618.4 KiB
dbus-libs x86_64 1:1.16.0-4.fc43 rawhide 345.5 KiB
ed x86_64 0:1.22.3-1.fc44 rawhide 148.9 KiB
elfutils-debuginfod-client x86_64 0:0.194-2.fc44 rawhide 84.0 KiB
expat x86_64 0:2.7.3-1.fc44 rawhide 301.1 KiB
gcc x86_64 0:15.2.1-5.fc44 rawhide 111.9 MiB
gcc-c++ x86_64 0:15.2.1-5.fc44 rawhide 41.4 MiB
glibc-devel x86_64 0:2.42.9000-16.fc44 rawhide 2.3 MiB
groff-base x86_64 0:1.23.0-11.fc44 rawhide 3.8 MiB
info x86_64 0:7.2-7.fc44 rawhide 357.9 KiB
jansson x86_64 0:2.14-3.fc43 rawhide 89.1 KiB
javapackages-filesystem noarch 0:6.4.1-4.fc44 rawhide 2.0 KiB
kernel-headers x86_64 0:6.19.0-0.rc1.15.fc44 rawhide 6.9 MiB
libedit x86_64 0:3.1-57.20251016cvs.fc44 rawhide 240.2 KiB
libedit-devel x86_64 0:3.1-57.20251016cvs.fc44 rawhide 59.4 KiB
libmpc x86_64 0:1.3.1-8.fc43 rawhide 160.6 KiB
libpkgconf x86_64 0:2.3.0-3.fc43 rawhide 78.1 KiB
libstdc++-devel x86_64 0:15.2.1-5.fc44 rawhide 37.2 MiB
libxcrypt-devel x86_64 0:4.5.2-2.fc44 rawhide 31.0 KiB
libzstd-devel x86_64 0:1.5.7-3.fc44 rawhide 217.6 KiB
lksctp-tools x86_64 0:1.0.21-2.fc44 rawhide 251.0 KiB
llvm x86_64 0:21.1.7-1.fc44 rawhide 89.3 MiB
llvm-filesystem x86_64 0:21.1.7-1.fc44 rawhide 0.0 B
llvm-googletest x86_64 0:21.1.7-1.fc44 rawhide 2.4 MiB
llvm-libs x86_64 0:21.1.7-1.fc44 rawhide 138.6 MiB
llvm-static x86_64 0:21.1.7-1.fc44 rawhide 377.5 MiB
llvm-test x86_64 0:21.1.7-1.fc44 rawhide 2.3 MiB
make x86_64 1:4.4.1-11.fc43 rawhide 1.8 MiB
mpdecimal x86_64 0:4.0.1-2.fc43 rawhide 217.2 KiB
ncurses x86_64 0:6.5-8.20250614.fc44 rawhide 609.8 KiB
ncurses-c++-libs x86_64 0:6.5-8.20250614.fc44 rawhide 153.6 KiB
nspr x86_64 0:4.38.2-1.fc44 rawhide 315.5 KiB
nss x86_64 0:3.119.0-1.fc44 rawhide 1.9 MiB
nss-softokn x86_64 0:3.119.0-1.fc44 rawhide 2.0 MiB
nss-softokn-freebl x86_64 0:3.119.0-1.fc44 rawhide 990.8 KiB
nss-sysinit x86_64 0:3.119.0-1.fc44 rawhide 18.1 KiB
nss-util x86_64 0:3.119.0-1.fc44 rawhide 204.8 KiB
perl-AutoLoader noarch 0:5.74-520.fc43 rawhide 20.6 KiB
perl-B x86_64 0:1.89-520.fc43 rawhide 501.3 KiB
perl-Carp noarch 0:1.54-520.fc43 rawhide 46.6 KiB
perl-Class-Struct noarch 0:0.68-520.fc43 rawhide 25.4 KiB
perl-Data-Dumper x86_64 0:2.191-521.fc43 rawhide 115.6 KiB
perl-Digest noarch 0:1.20-520.fc43 rawhide 35.3 KiB
perl-Digest-MD5 x86_64 0:2.59-520.fc43 rawhide 59.7 KiB
perl-DynaLoader x86_64 0:1.57-520.fc43 rawhide 32.1 KiB
perl-Encode x86_64 4:3.21-520.fc43 rawhide 4.7 MiB
perl-Errno x86_64 0:1.38-520.fc43 rawhide 8.4 KiB
perl-Exporter noarch 0:5.79-520.fc43 rawhide 54.3 KiB
perl-Fcntl x86_64 0:1.20-520.fc43 rawhide 48.8 KiB
perl-File-Basename noarch 0:2.86-520.fc43 rawhide 14.0 KiB
perl-File-Path noarch 0:2.18-521.fc44 rawhide 63.5 KiB
perl-File-Temp noarch 1:0.231.200-1.fc44 rawhide 163.7 KiB
perl-File-stat noarch 0:1.14-520.fc43 rawhide 12.5 KiB
perl-FileHandle noarch 0:2.05-520.fc43 rawhide 9.4 KiB
perl-Getopt-Long noarch 1:2.58-520.fc43 rawhide 144.5 KiB
perl-Getopt-Std noarch 0:1.14-520.fc43 rawhide 11.2 KiB
perl-HTTP-Tiny noarch 0:0.090-521.fc43 rawhide 154.4 KiB
perl-IO x86_64 0:1.55-520.fc43 rawhide 147.4 KiB
perl-IO-Socket-IP noarch 0:0.43-521.fc43 rawhide 100.3 KiB
perl-IO-Socket-SSL noarch 0:2.095-2.fc43 rawhide 714.5 KiB
perl-IPC-Open3 noarch 0:1.24-520.fc43 rawhide 27.7 KiB
perl-MIME-Base32 noarch 0:1.303-24.fc43 rawhide 30.7 KiB
perl-MIME-Base64 x86_64 0:3.16-520.fc43 rawhide 42.0 KiB
perl-Net-SSLeay x86_64 0:1.94-11.fc43 rawhide 1.3 MiB
perl-POSIX x86_64 0:2.23-520.fc43 rawhide 231.4 KiB
perl-PathTools x86_64 0:3.94-520.fc43 rawhide 180.0 KiB
perl-Pod-Escapes noarch 1:1.07-520.fc43 rawhide 24.9 KiB
perl-Pod-Perldoc noarch 0:3.28.01-521.fc43 rawhide 163.7 KiB
perl-Pod-Simple noarch 1:3.47-3.fc43 rawhide 565.3 KiB
perl-Pod-Usage noarch 4:2.05-520.fc43 rawhide 86.3 KiB
perl-Scalar-List-Utils x86_64 5:1.70-1.fc43 rawhide 144.9 KiB
perl-SelectSaver noarch 0:1.02-520.fc43 rawhide 2.2 KiB
perl-Socket x86_64 4:2.040-2.fc43 rawhide 120.3 KiB
perl-Storable x86_64 1:3.37-521.fc43 rawhide 231.2 KiB
perl-Symbol noarch 0:1.09-520.fc43 rawhide 6.8 KiB
perl-Term-ANSIColor noarch 0:5.01-521.fc43 rawhide 97.5 KiB
perl-Term-Cap noarch 0:1.18-520.fc43 rawhide 29.3 KiB
perl-Text-ParseWords noarch 0:3.31-520.fc43 rawhide 13.6 KiB
perl-Text-Tabs+Wrap noarch 0:2024.001-520.fc43 rawhide 22.6 KiB
perl-Time-Local noarch 2:1.350-520.fc43 rawhide 69.0 KiB
perl-URI noarch 0:5.34-2.fc44 rawhide 268.0 KiB
perl-base noarch 0:2.27-520.fc43 rawhide 12.6 KiB
perl-constant noarch 0:1.33-521.fc43 rawhide 26.2 KiB
perl-if noarch 0:0.61.000-520.fc43 rawhide 5.8 KiB
perl-interpreter x86_64 4:5.42.0-520.fc43 rawhide 118.6 KiB
perl-libnet noarch 0:3.15-521.fc43 rawhide 289.4 KiB
perl-libs x86_64 4:5.42.0-520.fc43 rawhide 11.5 MiB
perl-locale noarch 0:1.13-520.fc43 rawhide 6.1 KiB
perl-mro x86_64 0:1.29-520.fc43 rawhide 41.6 KiB
perl-overload noarch 0:1.40-520.fc43 rawhide 71.6 KiB
perl-overloading noarch 0:0.02-520.fc43 rawhide 4.9 KiB
perl-parent noarch 1:0.244-520.fc43 rawhide 10.3 KiB
perl-podlators noarch 1:6.0.2-520.fc43 rawhide 317.5 KiB
perl-vars noarch 0:1.05-520.fc43 rawhide 3.9 KiB
pkgconf x86_64 0:2.3.0-3.fc43 rawhide 88.5 KiB
pkgconf-m4 noarch 0:2.3.0-3.fc43 rawhide 14.4 KiB
pkgconf-pkg-config x86_64 0:2.3.0-3.fc43 rawhide 989.0 B
python-pip-wheel noarch 0:25.3-1.fc44 rawhide 1.2 MiB
python3 x86_64 0:3.14.2-1.fc44 rawhide 28.9 KiB
python3-libs x86_64 0:3.14.2-1.fc44 rawhide 43.1 MiB
ruby-default-gems noarch 0:3.4.7-28.fc44 rawhide 66.1 KiB
ruby-libs x86_64 0:3.4.7-28.fc44 rawhide 15.1 MiB
rubygem-io-console x86_64 0:0.8.1-28.fc44 rawhide 33.2 KiB
rubygem-irb noarch 0:1.14.3-28.fc44 rawhide 290.3 KiB
rubygem-json x86_64 0:2.15.1-1.fc44 rawhide 222.3 KiB
rubygem-psych x86_64 0:5.2.2-28.fc44 rawhide 132.6 KiB
rubygem-rbs x86_64 0:3.8.0-28.fc44 rawhide 5.0 MiB
rubygem-rdoc noarch 0:6.14.2-201.fc44 rawhide 1.9 MiB
rubygems noarch 0:3.6.9-28.fc44 rawhide 1.4 MiB
rubypick noarch 0:1.1.1-23.fc43 rawhide 4.4 KiB
rust-std-static x86_64 0:1.92.0-1.fc44 rawhide 165.6 MiB
tzdata-java noarch 0:2025c-1.fc44 rawhide 100.2 KiB
Installing weak dependencies:
clang x86_64 0:21.1.7-1.fc44 rawhide 65.5 MiB
compiler-rt x86_64 0:21.1.7-1.fc44 rawhide 41.0 MiB
gdbm-devel x86_64 1:1.23-10.fc43 rawhide 82.0 KiB
java-25-openjdk-headless x86_64 1:25.0.1.0.8-1.fc44 rawhide 236.3 MiB
libatomic x86_64 0:15.2.1-5.fc44 rawhide 36.7 KiB
libffi-devel x86_64 0:3.5.2-1.fc44 rawhide 33.9 KiB
libomp x86_64 0:21.1.7-1.fc44 rawhide 2.8 MiB
libomp-devel x86_64 0:21.1.7-1.fc44 rawhide 1.5 MiB
libyaml-devel x86_64 0:0.2.5-17.fc43 rawhide 1.1 MiB
llvm-devel x86_64 0:21.1.7-1.fc44 rawhide 33.5 MiB
ncurses-devel x86_64 0:6.5-8.20250614.fc44 rawhide 893.4 KiB
openssl-devel x86_64 1:3.5.4-1.fc44 rawhide 4.6 MiB
patch x86_64 0:2.8-3.fc44 rawhide 226.6 KiB
perl-File-Compare noarch 0:1.100.800-520.fc43 rawhide 5.6 KiB
perl-FindBin noarch 0:1.54-520.fc43 rawhide 6.8 KiB
perl-NDBM_File x86_64 0:1.18-520.fc43 rawhide 28.5 KiB
python-unversioned-command noarch 0:3.14.2-1.fc44 rawhide 23.0 B
readline-devel x86_64 0:8.3-2.fc43 rawhide 595.8 KiB
ruby x86_64 0:3.4.7-28.fc44 rawhide 85.5 KiB
ruby-bundled-gems x86_64 0:3.4.7-28.fc44 rawhide 2.2 MiB
rubygem-bigdecimal x86_64 0:3.1.8-28.fc44 rawhide 134.7 KiB
rubygem-bundler noarch 0:2.6.9-28.fc44 rawhide 1.5 MiB
rubygem-rake noarch 0:13.3.0-101.fc43 rawhide 134.1 KiB
rust x86_64 0:1.92.0-1.fc44 rawhide 93.5 MiB
zlib-ng-compat-devel x86_64 0:2.3.2-2.fc44 rawhide 107.0 KiB
Transaction Summary:
Installing: 146 packages
Total size of inbound packages is 404 MiB. Need to download 404 MiB.
After this operation, 2 GiB extra will be used (install 2 GiB, remove 0 B).
</pre>
This includes heavy dependencies like `java-headless`, `rust`, `llvm`, and `clang`, even if the user only intends to build a standard MRI Ruby version.
This is the content of the spec that pulls all those dependencies:
<pre>
# ruby-build can build various ruby interpreters from source, which in turn can
# require additional dependencies
Recommends: bzip2
Recommends: clang
Recommends: gdbm-devel
Recommends: java-headless
Recommends: libffi-devel
Recommends: libyaml-devel
Recommends: llvm-devel
Recommends: make
Recommends: ncurses-devel
Recommends: openssl-devel
Recommends: patch
Recommends: perl-File-Compare
Recommends: perl-FindBin
Recommends: readline-devel
Recommends: ruby
Recommends: rubygem-rake
Recommends: rust
Recommends: zlib-devel
</pre>
=== Proposed Solution ===
The `ruby-build` package works by providing a collection of build definition files (simple text files) located in `/usr/share/ruby-build`. Each file defines how to download and compile a specific version of a Ruby interpreter like `3.2.2`, `jruby-9.4.0.0` or `truffleruby-22.3`.
This proposal changes the packaging structure to split `ruby-build` into modular subpackages based on these definition types. Each subpackage will provide the necessary build dependencies for a specific subset of definition files, matched by naming patterns. This ensures that if a user only intends to build standard MRI Ruby, they are not forced to install the build chain for JRuby or TruffleRuby.
The new package structure will be as follows:
* **ruby-build (Main Package)**
** Would be a meta-package requiring `ruby-build-core` and recommending `ruby-build-ruby`.
* **ruby-build-core**
** Contains the core binary (`/usr/bin/ruby-build`) and the man page.
** All target subpackages require this package and not `ruby-build` meta-package to avoid pulling `ruby-build-ruby` and its dependencies as recommended package.
* **ruby-build-ruby**
** Targets standard MRI/CRuby versions (definitions matching `^[0-9]*`).
** Requires: `gcc`, `perl-interpreter`, `perl(FindBin)`, `perl(lib)`, `perl(IPC::Cmd)`, `perl(File::Compare)`, `perl(File::Copy)`, `zlib-ng-compat-devel`, `libffi-devel`, `libyaml-devel`.
* **ruby-build-jruby**
** Targets JRuby versions (definitions matching `^jruby`).
** Requires: `java-latest-openjdk-headless`, `make`, `gcc-c++`.
* **ruby-build-mruby**
** Targets mruby versions (definitions matching `^mruby`).
** Requires: `ruby`, `rubygem-rake`.
* **ruby-build-picoruby**
** Targets PicoRuby versions (definitions matching `^pico`).
** Requires: `ruby`, `rubygem-rake`, `gcc`, `git-core`.
* **ruby-build-truffleruby**
** Targets TruffleRuby versions (definitions matching `^truffle`).
** Requires: `gcc`, `libyaml-devel`.
* **ruby-build-others**
** Targets less common implementations available via `rbenv install -L` (such as rbx, ree, etc.).
** Keeps the main dependency set clean.
* **ruby-build-all**
** Metapackage to install all subpackages
* **ruby-build-rbenv**
** Already exists
** Contains the ruby-build plugin for rbenv
The dependency lists are optimized for modern releases of these Ruby implementations.
== Feedback ==
== Benefit to Fedora ==
* Bloat Reduction: A default installation of `ruby-build` will drop from ~2 GiB to a few megabytes, respecting user resources.
* Modularity: Users and CI/CD systems can install exactly what they need without pulling in the entire Java ecosystem or Rust toolchain unnecessarily.
* Security: Reduces the attack surface on systems that do not need the JVM or legacy build tools.
== Scope ==
* Proposal owners: Change the spec to create the subpackages.
* Other developers: Nothing
* Release engineering: Nothing
* Policies and guidelines: N/A (not needed for this Change)
* Trademark approval: N/A (not needed for this Change)
* Alignment with the Fedora Strategy:
== Upgrade/compatibility impact ==
* The new package `ruby-build-ruby` would be installed and multiple dependencies could be removed from the system automatically as nothing else may depend on them.
* For users wanting to build a Ruby implementation other than CRuby would need to install the required subpackage to get the definitions.
== Early Testing (Optional) ==
Test package available in Copr at https://copr.fedorainfracloud.org/coprs/mikelo2/split-ruby-build/ and code at https://src.fedoraproject.org/fork/mikelo2/rpms/ruby-build/commits/split-rubybuild
== How To Test ==
1. Install the package:
`dnf copr enable mikelo2/split-ruby-build`
`dnf install ruby-build`
*Verify that it does NOT pull in `java-headless` or `rust` by default.*
2. Test Standard Ruby:
`dnf install rbenv`
`rbenv install 3.4.8`
*This should work out of the box (via `ruby-build-ruby`).*
3. Test JRuby (Optional):
`rbenv install jruby-9.4.0.0`
*This should fail initially.*
`dnf install ruby-build-jruby`
`rbenv install jruby-9.4.0.0`
*This should now succeed.*
== User Experience ==
- Users will notice a significantly faster and smaller installation process for `ruby-build`.
- Advanced users may need to manually install specific subpackages (like `ruby-build-truffleruby`) if they are working with non-standard Ruby implementations, but the vast majority of users (MRI Ruby) will see no change in workflow, only in disk savings.
== Dependencies ==
N/A
== Contingency Plan ==
* Contingency mechanism: Revert the changes to the spec file to the monolithic dependency list
* Contingency deadline: Beta Freeze
* Blocks release? No
== Documentation ==
N/A (not a System Wide Change)
== Release Notes ==
\n
No comments:
Post a Comment