Ruby RVM Complexity

By Xah Lee. Date:

Undocumented Surprise Change

Am quite annoyed with ruby rvm. (if you don't know what it is, see: Ruby: What's RVM, Gem, Rake, Bundler, RDoc, ri, irb?)

rvm requirement used to print a list showing you what libs you need (at least as of in 2013 February). Now (), it start to install software without warning.

To be sure, i run rvm --help, and indeed it claims to list files only:

requirements  :: Shows additional OS specific dependencies/requirements for
                 building various rubies.

But now:

◆ rvm requirements
Installing requirements for ubuntu, might require sudo password.
[sudo] password for xah:

Google Search is getting stupid. After 10 min, i can't find no info.

Also, i can't find any sort of release notes about this. RVM homepage also is pretty bad. Huge number of files, extremely complex, badly written (same level as unix man pages)

Then, i went to ❮https://duckduckgo.com/❯ search. Searching for “rvm requirements change”, and indeed, first result is https://groups.google.com/group/rubyversionmanager/browse_thread/thread/051b3c85e544efc4. It's a rvm forum, and another guy made the same complaint about the undocumented change of “rvm requirements”.

I actually spend a hour or two on this.

For the record, am using rvm 1.20.12.

Non-standard Ways

The installation of rvm is also pretty weird.

ruby rvm homepage screenshot 2013-05-29
ruby rvm homepage screenshot

It installs by $ \curl -L https://get.rvm.io | bash

That means, it uses curl to fetch a script, then simply run bash on it.

That URL, actually redirect to ❮https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer❯, another weirdness.

Also, note the syntax \curl, which is a esoteric mechanism in bash that prevents it running a alias with the same name. All these is pretty weird. If user really have set alias to curl, then we assume he really do, maybe he's got some setup of curl or other reasons. And also, why curl and not wget? wget is by default installed, curl is not. And, why the redirect? Why not put the real path? And, it's strange to grab a script online and feed it directly to bash. It'd be simpler and normal to tell user to wget a url, then run that as installation script. Also, there's standard debian package.

Also, note the installation page, typical of unix man pages, exceedingly unnecessarily complex. It lists various things all together in one place. It'd be simpler, to tell user of separate steps. For example, one page on just installing rvm. Then, a separate page on how to use rvm to install ruby, rail, or other libs.

Complex Program

Now, if you do man rvm or rvm --help, you'll see it's very complex.

Just rvm itself, no ruby, has 199 dirs, 742 files. See: Ruby: RVM Directory Structure .

Odd Thank You Note

When you install rvm, you get a odd “thank you” note that address you by name. Here's example of install log:

xah@xah-p6813w◆ 2013-05-29 01:45 ◆ ~
◆ \curl -L https://get.rvm.io | bash
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   184  100   184    0     0    755      0 --:--:-- --:--:-- --:--:--  1304
100 13466  100 13466    0     0  30118      0 --:--:-- --:--:-- --:--:--  124k
Downloading RVM from wayneeseguin branch master
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   124  100   124    0     0    235      0 --:--:-- --:--:-- --:--:--   379
100 1067k  100 1067k    0     0   218k      0  0:00:04  0:00:04 --:--:--  272k

Installing RVM to /home/xah/.rvm/
    Adding rvm PATH line to /home/xah/.bashrc /home/xah/.zshrc.
    Adding rvm loading line to /home/xah/.bash_profile /home/xah/.zprofile.

  * WARNING: You're using ~/.profile, make sure you load it,
    add the following line to ~/.bash_profile if it exists
    otherwise add it to ~/.bash_login:

      source ~/.profile

# RVM:  Shell scripts enabling management of multiple ruby environments.
# RTFM: https://rvm.io/
# HELP: http://webchat.freenode.net/?channels=rvm (#rvm on irc.freenode.net)
# Cheatsheet: http://cheat.errtheblog.com/s/rvm
# Screencast: http://screencasts.org/episodes/how-to-use-rvm

# In case of any issues run 'rvm requirements' or read 'rvm notes'

Installation of RVM in /home/xah/.rvm/ is almost complete:

  * To start using RVM you need to run `source /home/xah/.rvm/scripts/rvm`
    in all your open shell windows, in rare cases you need to reopen all shell windows.

# Xah Lee,
#
#   Thank you for using RVM!
#   I sincerely hope that RVM helps to make your life easier and
#   more enjoyable!!!
#
# ~Wayne

Note the bottom.

I can't say there's anything wrong with it exactly, but everything about rvm is just a bit weird.


really dislike rvm. One HUGE, COMPLEX, set of bash scripts. Yes, bash shell scripts, in the year of our lord 2013.

The choice of bash couldn't possibly be ease/compatibilities/portability issue, because it does requires certain later version of Bash, and not Bourn Shell, and it uses advanced features of bash. Perl has been default install on Linuxes and Mac OS X for many many years. Default Perl would be much more powerful and flexible than bash. Or, they could've relied on a universal version of Ruby such as version 1.8 or earlier. After all, rvm is about Ruby.

Though, it seems rvm is nevertheless robust. Its authors know bash and unix system really well.

rvm is created by Wayne E Seguin and Michal Papis.

Also, although i find rvm distasteful, but one of its author, Michal Papis, has been very helpful. In 2013 February, i randomly bitched about rvm on twitter, and he helped me solve the problem.