|
| 1 | +--- |
| 2 | +title: March 2025 RubyGems Updates |
| 3 | +layout: post |
| 4 | +author: Gift Egwuenu |
| 5 | +author_email: laurandidi21@gmail.com |
| 6 | +--- |
| 7 | + |
| 8 | +Welcome to the RubyGems monthly update! As part of our efforts at Ruby Central, we publish a recap of the work that we’ve done the previous month. Read on to find out what updates were made to RubyGems and RubyGems.org in March. |
| 9 | + |
| 10 | +## RubyGems News |
| 11 | + |
| 12 | +In March, we released RubyGems [**3.6.6**](https://github.com/rubygems/rubygems/blob/master/CHANGELOG.md#366--2025-03-13) and Bundler [**2.6.6**](https://github.com/rubygems/rubygems/blob/master/bundler/CHANGELOG.md#266-march-13-2025). These releases bring a series of enhancements and bug fixes designed to improve the overall developer experience with RubyGems. Notable improvements include fixing an [`ENAMETOOLONG` error when creating the compact index cache](https://github.com/rubygems/rubygems/pull/5578), showing clearer errors when writing a [lockfile on a read-only filesystem](https://github.com/rubygems/rubygems/pull/5920), ****and updating [`bundle doctor` to not report issues about unwritable files](https://github.com/rubygems/rubygems/pull/8520). |
| 13 | + |
| 14 | +Some other important accomplishments from the team this month include: |
| 15 | + |
| 16 | +**Improving reproducible gem builds** |
| 17 | + |
| 18 | +- The RubyGems team implemented changes to make gem builds more reproducible based on recommendations from [Giacomo Benedetti](https://github.com/giacomobenedetti) and [William Enck](https://github.com/enck). |
| 19 | +- Their suggestions included [setting a default `SOURCE_DATE_EPOCH` value of `315619200`](https://github.com/rubygems/rubygems/pull/8568) and [sorting metadata values in gemspecs](https://github.com/rubygems/rubygems/pull/8569). These updates improve compatibility with tools like Debian’s *reprotest*, making it easier to verify that gem builds are consistent across environments. |
| 20 | +- This work was inspired by the paper [*An Empirical Study on Reproducible Packaging in Open-Source Ecosystems*](https://www.cs.cmu.edu/~ckaestne/pdf/icse25_rb.pdf?utm_source=chatgpt.com), which will be presented at the [2025 International Conference on Software Engineering.](https://conf.researchr.org/home/icse-2025) |
| 21 | + |
| 22 | + |
| 23 | + |
| 24 | +*Building RubyGems itself is trivially reproducible now without needing to specify SOURCE_DATE_EPOCH* |
| 25 | + |
| 26 | +**Resolver performance improvements** |
| 27 | + |
| 28 | +- We've made significant performance improvements to Bundler's dependency resolution, thanks to recent contributions from [Hartley McGuire](https://github.com/skipkayhil). |
| 29 | +- Initial changes focused on [reducing object allocations in methods like `Gem::Version#<=>` and `Bundler::Candidate#<=>`](https://github.com/rubygems/rubygems/pull/8559). Further optimizations targeted the resolution algorithm itself, including improvements to the [**`pub_grub`** resolver](https://github.com/jhawthorn/pub_grub/pull/37). |
| 30 | +- As a result, Hartley reported a 60% speedup in `bundle update` time in his app after applying all patches. Huge thanks to Hartley for his contributions, and to [John Hawthorn](https://github.com/jhawthorn) for maintaining `pub_grub` and helping refine its API to support these enhancements. |
| 31 | + |
| 32 | +**Wheels for RubyGems** |
| 33 | + |
| 34 | +- Progress continues on bringing a prototype for precompiled binary packages**,** or "wheels" to RubyGems. [Samuel Giddins](https://github.com/segiddins) has defined a naming scheme for package files and finalized the set of identifying tags needed to support this across the Ruby ecosystem. |
| 35 | +- Next steps include advocating within the Ruby community to help shift perceptions around precompiled binaries, and helping Rubyists understand that precompiled packages are actually **more secure** (no code execution at install time) and **more ergonomic** for users (no build tools or compilation delays). An RFC is also forthcoming. |
| 36 | + |
| 37 | +**Compact index cache now handles long path names** |
| 38 | + |
| 39 | +- Bundler now better handles long path names in the ****compact index cache, addressing an issue that could raise [**“Filename too long”** errors](https://github.com/rubygems/rubygems/pull/5578)—especially when using private servers like *JFrog Artifactory*. |
| 40 | +- The fix was long delayed due to persistent CI failures, which were eventually traced to a [**Ruby on Windows bug**](https://bugs.ruby-lang.org/issues/21177) that has since been resolved. |
| 41 | +- As part of the debugging process, we also improved our test reliability by removing the use of `FileUtils.rm_rf` in Bundler specs, as it silently fails on cleanup errors and made diagnosing the issue harder. This change will help prevent similar issues in the future. |
| 42 | + |
| 43 | +## [RubyGems.org](http://rubygems.org/) News |
| 44 | + |
| 45 | +The updates made this month to [RubyGems.org](http://rubygems.org/) reflect a strong commitment to improving user experience, enhancing security, and modernizing the platform. Sponsored hosting for [RubyGems.org](http://rubygems.org/) in February was provided by [AWS](https://aws.amazon.com/?ref=rubycentral.org), [Fastly](https://www.fastly.com/?ref=rubycentral.org) and [Datadog](https://www.datadoghq.com/?ref=rubycentral.org). |
| 46 | + |
| 47 | +The following are highlights of what the team worked on this month: |
| 48 | + |
| 49 | +**Ecosystem data for Clickgems** |
| 50 | + |
| 51 | +- [Marty](https://github.com/mghaught) collaborated with the [**ClickHouse**](https://clickhouse.com/) team to finalize details for our partnership on *Clickgems*, the Ruby equivalent of the popular [ClickPy](https://clickpy.clickhouse.com/) site, [which officially launched last week!](https://clickhouse.com/blog/announcing-ruby-gem-analytics-powered-by-clickhouse) |
| 52 | +- [Samuel Giddins](https://github.com/segiddins) led the effort to push RubyGems ecosystem data into ClickHouse, which now includes daily download totals and the latest public database dumps from RubyGems.org. Work is underway to roll out granular download data, made possible by retooling the [Kirby](https://github.com/rubytogether/kirby) log parser to stream data directly from the RubyGems.org CDN. |
| 53 | +- This new level of insight will help the Ruby community better understand package usage trends and support maintainers in making more informed decisions, especially around platform support. |
| 54 | + |
| 55 | +[**Database performance investigation after brief DoS**](https://github.com/rubygems/rubygems.org/pull/5595) |
| 56 | + |
| 57 | +- A brief Denial of Service (DoS) incident targeting RubyGems.org prompted an investigation into web pages with heavy database queries. |
| 58 | +- While no specific culprit was found, the incident served as a reminder of the need for strong visibility into database performance when operating a web system at scale. |
| 59 | + |
| 60 | +## Thank you |
| 61 | + |
| 62 | +A huge thank you to all the contributors to RubyGems and [RubyGems.org](http://rubygems.org/) this month! We deeply appreciate your support and dedication. |
| 63 | + |
| 64 | +### Contributors to RubyGems: |
| 65 | + |
| 66 | +- [@segiddins](https://github.com/segiddins) Samuel Giddins |
| 67 | +- [@simi](https://github.com/simi) Josef Šimánek |
| 68 | +- [@martinemde](https://github.com/martinemde) Martin Emde |
| 69 | +- [@deivid-rodriguez](https://github.com/deivid-rodriguez) David Rodríguez |
| 70 | +- [@hsbt](https://github.com/hsbt) Hiroshi Shibata |
| 71 | +- [@duckinator](https://github.com/duckinator) Ellen Marie Dash |
| 72 | +- [@devsheva](https://github.com/devsheva) Mateo Sheshi |
| 73 | +- [@nobu](https://github.com/nobu) Nobuyoshi Nakada |
| 74 | +- [@saraid](https://github.com/saraid) Michael Chui |
| 75 | +- [@cllns](https://github.com/cllns) Sean Collins |
| 76 | +- [@taralbass](https://github.com/taralbass) Tara Bass |
| 77 | +- [@mbclu](https://github.com/mbclu) Mitch Clutter |
| 78 | +- [@jacobat](https://github.com/jacobat) Jacob Atzen |
| 79 | +- [@skipkayhil](https://github.com/skipkayhil) Hartley McGuire |
| 80 | +- [@rwstauner](https://github.com/rwstauner) Randy Stauner |
| 81 | +- [@ioquatix](https://github.com/ioquatix) Samuel Williams |
| 82 | +- [@giacomobenedetti](https://github.com/giacomobenedetti) Giacomo Benedetti |
| 83 | +- [@olleolleolle](https://github.com/olleolleolle) Olle Jonsson |
| 84 | + |
| 85 | +### Contributors to [RubyGems.org](http://rubygems.org/): |
| 86 | + |
| 87 | +- [@simi](https://github.com/simi) Josef Šimánek |
| 88 | +- [@segiddins](https://github.com/segiddins) Samuel Giddins |
| 89 | +- [@hsbt](https://github.com/hsbt) Hiroshi Shibata |
| 90 | +- [@wooly](https://github.com/wooly) Steve Bell |
| 91 | +- [@mghaught](https://github.com/mghaught) Marty Haught |
| 92 | +- [@colby-swandale](https://github.com/colby-swandale) Colby Swandale |
| 93 | + |
| 94 | +*If we missed you, please let us know so we can include you in our shout out!* |
| 95 | + |
| 96 | +--- |
| 97 | +Learn more about contributing to RubyGems by visiting the RubyGems Contributing Guide. We welcome all kinds of contributions, including bug fixes, feature implementation, writing and updating documentation, and bug triage. |
0 commit comments