Metasploit mailing list archives

Why the framework uses ruby instead of perl?


From: zendy.zhang at alibaba-inc.com (zhangyudong)
Date: Wed, 11 Oct 2006 10:09:08 +0800

Thank you for so much detail you have tell me.

I think C/C++ is not the proper languages for the framework, and perl's 
multi-thread module is not very stable and reasonable. I am not very 
familiar with python and ruby, but I think i will like ruby in the future.


Rob wrote:
From the manual:

During the development of the framework, the one recurring question 
that the
Metasploit staff was continually asked was why Ruby was selected as
the programming language. To avoid having to answer this question on
an individual
basis, the authors have opted for explaining their reasons in this 
document.
The Ruby programming language was selected over other choices, such as 
python,
perl, and C++ for quite a few reasons. The first (and primary) reason 
that Ruby
was selected was because it was a language that the Metasploit staff 
enjoyed
writing in. After spending time analyzing other languages and 
factoring in past
experiences, the Ruby programming language was found to offer both a 
simple
and powerful approach to an interpreted language. The degree of 
introspection
and the object-oriented aspects provided by Ruby were something that 
fit very
nicely with some of the requirements of the framework. The framework's 
need
for automated class construction for code re-use was a key factor in
the decision
making process, and it was one of the things that perl was not very 
well suited
to offer. On top of this, the syntax is incredibly simplistic and 
provides the
same level of language features that other more accepted languages 
have, like
perl.

The second reason Ruby was selected was because of its platform 
independent
support for threading. While a number of limitations have been 
encountered
during the development of the framework under this model, the Metasploit
staff has observed a marked performance and usability improvement over 
the
2.x branch. Future versions of Ruby (the 1.9 series) will back the 
existing
threading API with native threads for the operating system the 
interpreter is
compiled against which will solve a number of existing issues with the 
current
implementation (such as permitting the use of blocking operations). In 
the
meantime, the existing threading model has been found to be far 
superior when
compared to a conventional forking model, especially on platforms that 
lack a
native fork implementation like Windows.
Another reason that Ruby was selected was because of the supported 
existence
of a native interpreter for the Windows platform. While perl has a cygwin
version and an ActiveState version, both are plagued by usability 
problems.
The fact that the Ruby interpreter can be compiled and executed 
natively on
Windows drastically improves performance. Furthermore, the interpreter 
is also
very small and can be easily modified in the event that there is a bug.
The Python programming language was also a language candidate. The reason
the Metasploit staff opted for Ruby instead of python was for a few 
different
reasons. The primary reason is a general distaste for some of the 
syntactical
annoyances forced by python, such as block-indention. While many would 
argue
the benefits of such an approach, some members of the Metasploit staff
find it to
be an unnecessary restriction. Other issues with Python center around
limitations
in parent class method calling and backward compatibility of 
interpreters.
The C/C++ programming languages were also very seriously considered, 
but in
the end it was obvious that attempting to deploy a portable and usable 
framework
in a non-interpreted language was something that would not be feasible.

Furthermore, the development time-line for this language selection 
would most
likely be much longer.
Even though the 2.x branch of the framework has been quite successful, 
the
Metasploit staff encountered a number of limitations and annoyances 
with perl's
object-oriented programming model, or lack thereof. The fact that the 
perl
interpreter is part of the default install on many distributions is
not something
that the Metasploit staff felt was worth detouring the language
selection. In the
end, it all came down to selecting a language that was enjoyed by the 
people
who contribute the most to the framework, and that language ended up 
being
Ruby.

On 10/10/06, zhangyudong <zendy.zhang at alibaba-inc.com> wrote:
I think perl is enough for this job, what is the reason that make the
devel team to use ruby to rewrite the entire program?

thx.

mallory






Current thread: