Phusion, the company behind Phusion Passenger, announced that their Ruby Enterprise Edition (REE) is nearing its end-of-life. REE is based on MRI Ruby 1.8.7, which is also being phased out (1.8.7 will receive regular maintenance until June 2012, and security fixes until June 2013).
REE contains patches that address the following shortcomings of Ruby 1.8.7 to make it perform better under typical server-oriented usage scenarios:
- A copy-on-write friendly garbage collector to reduce memory usage in Rails applications.
- The tcmalloc memory allocator, to lower memory usage.
- A tunable garbage collector.
- Brent Roman's MBARI patch set.
- More analysis and debugging features.
Even though being phased out, Phusion is still releasing new versions. The latest release, 1.8.7-2012.02, upgrades the underlying Ruby to 1.8.7-p358, RubyGems to 1.8.15, contains the latest MBARI patches, and is now compatible with Xcode >= 4 and OS X Lion.
Phusion recommends to start migrating to Ruby 1.9, and they are looking for new maintainers to take over further maintenance:
We plan on providing minor fixes and updates for the time being, but users are recommended to slowly migrate to Ruby 1.9. Phusion Passenger <= 3.1 users can use reverse proxy setups to run multiple Ruby versions on the same server. Starting from Phusion Passenger 3.2 it will support multiple Ruby versions natively without the need for reverse proxy setups.
We believe that Ruby Enterprise Edition has served its purpose. That said, we understand that many people still rely on Ruby 1.8 for the time being because of compatibility issues. Therefore we would like to ask for volunteers who want to take over maintenance of Ruby Enterprise Edition. Please contact us if you are interested!
InfoQ talked to Phusion's Hongli Lai to learn why there won't be a REE 1.9:
Most patches in REE are not necessary in 1.9, but some have no REE equivalent. For example, the MBARI patch set is highly 1.8-specific; some of the MBARI patches have already been merged into upstream MRI 1.8, while some others solve problems that don't exist in 1.9. Another example: the caller_for_all_threads patch is obsolete in 1.9 because 1.9 has its own official API for similar functionality. Ruby 1.9 does not have any GC tuning options, but it has a better overall GC so the benefit of being able to tune the GC is greatly diminished.
InfoQ: Phusion Passenger 3.2 will support multiple Ruby versions, can you tell us a bit more about what you have planned for Passenger's future?
We have many exciting things planned. I can't tell you everything yet but one of the things we're working on is switching Phusion Passenger to an evented I/O architecture, away from the current multithreaded I/O architecture. This allows us to handle I/O in a much more robust manner and gives us virtually unlimited I/O concurrency, paving a way to allowing us to properly support things like streaming and WebSockets in the future.
The latest REE is available for downloading. Have you already switched to Ruby 1.9? If not, what is keeping you back?