As Ruby is an interpreter most executables just have &quot;#!&#x2F;usr&#x2F;bin&#x2F;env ruby&quot; at the top of the file. If you have multiple versions of Ruby, this may or may not pick up the correct version you have installed. Historically the interpreter has made quite a few breaking changes, didn&#x27;t follow semantic versioning and didn&#x27;t care about backwards compatibility. What these tools do is alter the environment so that you can &#x27;lock&#x27; specific versions of the interpreter.<p>The same problem also occurs with libraries, which may also have their own executables, so these tools have tried to solve both problems - which is slightly more complicated than a three line shell script. Bundler has become the standard way of managing libraries, so now something like chruby[0] can be used to do pretty much what you said for the interpreter alone. Of course the other tools (that do a lot more) still have their historical followers...<p>If you are wondering why you need to support multiple versions, these tools are mainly for use in development environments where you will probably have to support legacy software that is no longer actively maintained.<p>[0] <a href="https:&#x2F;&#x2F;github.com&#x2F;postmodern&#x2F;chruby&#x2F;blob&#x2F;master&#x2F;share&#x2F;chruby&#x2F;chruby.sh" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;postmodern&#x2F;chruby&#x2F;blob&#x2F;master&#x2F;share&#x2F;chrub...</a>