[framework] Why the framework uses ruby instead of perl?

zhangyudong zendy.zhang at alibaba-inc.com
Tue Oct 10 21:09:08 CDT 2006

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

More information about the framework mailing list