Ruby Enterprise Edition (REE) is a branch of the official Ruby interpreter which is capable of reducing your Rails applications’ memory usage by 33% on average, as well as improving your applications’ performance. This is possible because REE includes copy-on-write enhancements for the garbage collector, as well as an improved memory allocator (tcmalloc). REE has been out for several months now and is already used by many high-profile websites and organizations, such as New York Times, Shopify and 37signals.

“We switched to enterprise ruby to get the full benefit of the [copy-on-write] memory characteristics and we can absolutely confirm the memory savings of 30% some others have reported. This is many thousand dollars of savings even at today’s hardware prices.” – Tobias Lütke (Shopify)

And just like Phusion Passenger, Ruby Enterprise Edition is 100% open source.

Recent developments

REE has just become better. We had been talking with DHH from 37signals about a possible sponsorship campaign for supporting REE development. The campaign has recently ended, and so we’re presenting the world with Ruby Enterprise Edition version 1.8.6-20081205.

The sponsored improvements are:

Integration with the RailsBench garbage collector patches These patches allow one to tweak various garbage collector settings. 37signals uses this to greatly improve server performance. The RailsBench GC patches did not work on REE in previous releases, but now we’ve properly integrated them into REE. Better Mac OS X support Previous versions sort-of support Mac OS X, but some people have reported problems. We’ve improved Mac OS X support as follows: Installation should now work out-of-the-box on Mac OS X.

The tcmalloc memory allocator has been properly integrated with Mac OS X. Tcmalloc is what makes REE faster than the standard Ruby interpreter. In previous versions, tcmalloc was disabled when installing on OS X because it didn’t work properly on OS X. This not only meant that there were no performance gains compared to standard Ruby, it also meant that the copy-on-write optimizations were a bit less effective than they could be. By properly integrating tcmalloc on OS X, which was a tough task, OS X users can now fully enjoy the improved performance and copy-on-write optimizations.

Various OS X-related crashes have been fixed. Special thanks to Stephen Heuer from Arux Software Inc. for providing access to an OS X testing environment. Better 64-bit support Even though previous versions support 64-bit platforms, many people experienced problems. We’ve spent some time making sure that installation works out-of-the-box on 64-bit platforms. We’ve tested against 64-bit FreeBSD 7 and 64-bit Ubuntu 8.10 Server. Better Solaris support We’ve made sure that installation works out-of-the-box.

Special thanks goes out to our friends at Sun for providing us with access to a Solaris testing environment.

In addition, this release also comes with various non-sponsored improvements and changes:

caller_for_all_threads Philippe Hanrigou’s caller_for_all_threads patches have been integrated into REE. This feature allows one to dump the stack trace of all running threads in a Ruby application. This feature is a must-have for debugging multithreaded web applications. Phusion Passenger’s development version has already been updated to take advantage of this feature, when available. It will be available starting from Phusion Passenger version 2.1.0 (which hasn’t been released yet at the moment of writing). RubyGems updated to version 1.3.1. The previous REE release ships with RubyGems 1.2. Version 1.3.1 is now included. FYI: Ruby on Rails 2.2 requires RubyGems 1.3.1. REE’s RubyGems no longer makes use of the existing gems One of the most often requested features is that REE’s RubyGems should be able to use the gems that are already installed (i.e. the gems that have been installed for the system’s Ruby interpreter). The previous REE release implemented this feature. However, it turns out that this can cause problems with native extensions, e.g. RMagick and the Ruby MySQL library. If one uses REE to load a native extension that was originally compiled for the system’s Ruby, then REE might crash. So this feature has been removed. You should install all gems that you need with REE’s RubyGems. ree-version An ‘ree-version’ command is now provided. This command prints out the REE version number. This makes it easier for people to track REE updates.

The sponsors

Many thanks to the following people and organizations for sponsoring this release (list sorted in alphabetical order):

Officially tested platforms

We’ve tested this release of Ruby Enterprise Edition on the following platforms:

Ubuntu Linux 8.04 Desktop (x86)

Ubuntu Linux 8.10 Server (x86_64)

Mac OS X 10.5.5 Server (x86)

FreeBSD 5.0 (x86)

FreeBSD 7.0 (x86_64)

Sun Solaris (Sparc)

Download & upgrade

To install Ruby Enterprise Edition, please visit the download page. To upgrade from a previous version, simply install into the same prefix that you installed to last time.