Charles Oliver Nutter
headius.bsky.social
Charles Oliver Nutter
@headius.bsky.social
JRuby co-lead, Java champion, Ruby hero, JavaOne Rockstar, international traveler and speaker. Book me for your next event! I depend on your donations and sponsorships! https://github.com/sponsors/headius
Combined with compact objects in JDK 25+ this could be a huge breakthrough in scaling JRuby apps. What if your JRuby app's working set could be half as big on the heap, with improved throughput due to smaller objects and less allocator overhead?
A first shot at drastically reducing object size in JRuby, in this case by using more compact wrappers for small Integers: buff.ly/KxZEKBh

Other fixes will reduce the size of "immediate" types (numerics, etc) by up to 16 bytes and the size of ALL objects by 5-6 bytes. 🤯
Specialize Fixnum by headius · Pull Request #9085 · jruby/jruby
This adds specialized RubyFixnum subtypes for byte, short, int, and long, making RubyFixnum abstract. All allocations of a Fixnum are boxed using the most compact size. This drastically reduces the...
buff.ly
November 21, 2025 at 9:57 AM
A first shot at drastically reducing object size in JRuby, in this case by using more compact wrappers for small Integers: buff.ly/KxZEKBh

Other fixes will reduce the size of "immediate" types (numerics, etc) by up to 16 bytes and the size of ALL objects by 5-6 bytes. 🤯
Specialize Fixnum by headius · Pull Request #9085 · jruby/jruby
This adds specialized RubyFixnum subtypes for byte, short, int, and long, making RubyFixnum abstract. All allocations of a Fixnum are boxed using the most compact size. This drastically reduces the...
buff.ly
November 21, 2025 at 9:29 AM
Am I "old" for wanting to discuss a bug and its potential fixes *before* opening a pull request? I'm frequently chided for talking about the issue first rather than just making a PR right away (i.e. "wasting our time"). Personally I tend to reject nontrivial PRs that had no discussion.
November 20, 2025 at 11:06 PM
Asked ChatGPT to find the best way to choose the smallest Number box for a long value. Several options were discussed with JMH benchmarks. Code looked good, but unfortunately most options introduced tricky negative boundary bugs, despite my requirements. How can I ever trust it to write code?
November 20, 2025 at 8:27 PM
TFW AI generates *completely wrong* code that almost looks correct. Pretty hard to have any confidence in LLMs for code generation when they creates nonsense like this.

buff.ly/kMsOHX0
November 20, 2025 at 12:56 AM
This new AI world continues to frustrate the hell out of me. I'm seeing pull requests that clearly don't solve the problem, conversations that are automated nonsense, and fake engagement across all social media. No wonder people have no excitement about OSS work lately. ☹️
November 19, 2025 at 6:51 PM
I get asked about this a lot, so... Would anybody be interested enough in a native-compiled Ruby implementation to fund a fork of JRuby that can be compiled with GraalVM Native Image? It's totally doable, but the work involved is nontrivial and incompatible with the JVM version.
November 13, 2025 at 10:31 PM
Good progress discussing a Ruby "deep_freeze" feature at this month's ruby-core dev meeting! matz is not opposed to adding the feature, but we need to formalize the protocol and decide how much control user-defined objects should have over the process. We'll make it happen!
November 13, 2025 at 4:05 PM
Java could do a lot to eliminate its "bloated" reputation by providing space-efficient collections out of the box. HashMap is enormous compared to a direct-addressing implementation and there's no Set impl that doesn't just wrap a Map instance. So frustrating.
November 12, 2025 at 9:56 PM
Aurora borealis over my home in Minnesota last night. Quite a light show!
November 12, 2025 at 2:06 PM
Fun fact: JRuby is the only alternative Ruby implementation to attempt Windows support since Microsoft killed IronRuby, and the only one ever to run Rails.

We test generating and running a full stack Rails app on Windows before each release.

Windows is a PITA to support. 🤬
November 10, 2025 at 10:09 PM
The apparent decline in Ruby use in recent years has more to do with the fact that people aren't building as much new stuff than anything about Ruby itself. A malaise has fallen on software dev: few exciting projects, skilled devs out of work. Good time to start something?
November 6, 2025 at 11:11 PM
Looks like there will be no Free Java room at FOSDEM this year (first time in almost 20 years!) so it seems my late January to early February travel schedule has opened up. Anyone have an event they'd like to see me at, talking JVM features and internals or Ruby optimization?
November 6, 2025 at 10:39 PM
Reposted by Charles Oliver Nutter
🚨 Time Sensitive 🚨

#Java peers...the 2026 #JavaOne call for papers closes soon. Get your proposals in by the Nov 11 deadline ➡️
social.ora.cl/6017A7UwL
November 6, 2025 at 7:47 PM
It appears there’s momentum behind a non-forking Solid Queue option in the PR below, but we need help pushing it over the finish line! Even on CRuby, a threaded version can be useful when forked processes are just too heavy.

github.com/rails/solid_...
November 5, 2025 at 9:04 PM
The Solid Queue database-based backend for ActiveJob currently requires `fork` to work, solely because that's the only way to make sure it runs in parallel on CRuby. I want it to work on JRuby, which doesn't support fork, but can run threads in parallel very easily. Help?

buff.ly/18ZW69U
Non-forking implementation · Issue #679 · rails/solid_queue
Hello! I would like to offer my help making modifications to Solid Queue to support executing in-process using threads rather than out-of-process as a fork. There's many issues with using fork: Imp...
github.com
November 4, 2025 at 9:47 PM
What do you call it when you don't ever feel like you really get "in the zone" while coding until you've been at it for 8 hours? It's like I can't really focus until that point. My best days (like today) are the ones where I put in 12-14 hours in a single stretch.
November 4, 2025 at 5:32 AM
I'm making another attempt to get a `deep_freeze` method added to Ruby. Core folks have rejected proposals for years, until Ractor came along and we got basically the same feature in `make_shareable`. But deep freezing should be its own feature.

bugs.ruby-lang.org/issues/21665
Feature #21665: Revisit Object#deep_freeze to support non-Ractor use cases - Ruby - Ruby Issue Tracking System
Redmine
bugs.ruby-lang.org
November 4, 2025 at 12:18 AM
I figured out why I don't like Ruby's new Ractor concept: it forces users to work around CRuby deficiencies. To parallelize code with Ractor, users must make all passed object graphs "shareable" even if those objects would otherwise be safe to parallelize with Threads. It feels un-Ruby to me.
November 3, 2025 at 6:57 PM
It turns out the real Ractors were the Threads we made along the way
Announcing ractor-shim, a new gem that reimplements Ractor on top of Thread & Queue: github.com/eregon/racto...

This gem provides the full Ruby 3.5 Ractor API (Ractor::Port, Ractor#{join,value,monitor}, etc) on TruffleRuby, JRuby, and CRuby 2.7 to 3.4.
GitHub - eregon/ractor-shim: A shim to define Ractor by using Thread, if not already defined
A shim to define Ractor by using Thread, if not already defined - eregon/ractor-shim
github.com
October 30, 2025 at 9:18 PM
Here's one for someone who wants to contribute to JRuby: reimplement UNIXSocket using the JDK support for UNIX sockets:

github.com/jruby/jruby/...

We currently use jnr-unixsocket, part of our native FFI backend, but it has never worked perfectly.
Reimplement UNIXSocket using JDK UNIX socket support · Issue #9040 · jruby/jruby
As of JDK 16, UNIX sockets are natively supported on the JDK. We should migrate our existing UNIXSocket implementation from jnr-unixsocket to the JDK versions. This will provide more complete suppo...
github.com
October 24, 2025 at 9:05 PM
I'm pleasantly surprised at how easy it has been for my kids to funnel allowance into investments using GreenLight. Interesting educational conversations about stocks and funds and what makes a good investment.

Here's some code that gets you $30 back:

share.greenlight.com/91792639
Charles is giving you $30
Teens and parents can earn cash rewards with Greenlight’s referral program when friends sign up and pay their first month’s fee. Save, earn and invest together.
greenlight.com
October 23, 2025 at 9:54 PM
I expected at least a few patches to get JRuby 9.4 green on Java 25, but I was wrong. JRuby 9.4 officially supports Java 25 already, I guess!

github.com/jruby/jruby/...
Official JDK 25 support for JRuby 9.4 by headius · Pull Request #9030 · jruby/jruby
CI reconfig and tweaks as necessary to pass tests on Java 25.
github.com
October 23, 2025 at 9:04 PM
New post: Warbled Sidekiq: Zero-install Executable for JVM

In my previous post, I showed how to use Warbler to package a simple tool as an executable jar. This post will demonstrate how to “warble” a larger project: the Sidekiq background job server!

buff.ly/ZEasNiu
Warbled Sidekiq: Zero-install Executable for JVM
In my previous post, I showed how to use Warbler to package a simple image-processing tool as an executable jar. This post will demonstrate how to “warble” a larger project: the Sidekiq background…
blog.headius.com
October 23, 2025 at 5:01 PM
I just used JRuby and Warbler to package up a well-known Ruby-based background job server as an executable jar and it "just works". Single-file deployment on any platform with a JVM and scaling far better than you can get with regular CRuby. JRuby is the future of enterprise Ruby.
October 22, 2025 at 8:48 PM