Introducing the Metapass FrameworkFirst of all whilst development on 3Surf has been scrapped (and ESR too), our anti-censorship efforts continue with the Metapass Framework (MPF). The rename is due to the changing nature of the product (a framework as opposed to an application) and the past confusion between the name of our software (3Surf) and the name of our organization (3Surf Software) particularly as we started work on different projects.
Technically, the design of 3Surf has long been a problem for us. We have found it very difficult write the plugin system in combination with the main application. Python was perhaps a little too flexible leading to a very badly defined plugin API (although that was mainly our fault...), and also had a major problems on Windows (the most importance being running as a service). But at the heart of the matter, and not just the actual language, has been the actual structure of 3Surf. The server structure with various plugins for bypasses and communication have overcomplicated matters. Combining server code with plugin code has been very difficult, and so instead we have decided to get rid of the server structure altogether, and replace it with a much more general framework. Later, when the framework is more stable, we can again create a server application (and other applications to, like command line tools and GUI's based on the actual framework).
Some of you might have seen the close connection between the Metasploit Framework and our new Metapass Framework. If so, good spot. We have been heavily influenced by Metasploit - the design and extensibility of that software is just amazing, and we see its success is mainly due to its extensibility. We want to do the same thing with Metapass - turn it into a Metasploit for bypasses and anti-censorship.
We are not, however, using Ruby as the core of the framework, or even Python, but instead C++. Why C++? The choice of language has been a difficult question for us. C++ is undoubtedly a slower and less efficient language to code in and has many cross-platform/cross-compileer issues, however we see the gains of its type system as outweighing these considerations since we will be using the cross platform POCO C++ library and the flexibility of Python was one reason why 3Surf descended into a horrible mess of spaghetti code. We think that the stricter approach of C++ will be beneficial to this specific project where its extensible nature means that the definitions between the core and plugins have to be strong.
C++ allows a larger set of bindings to be written for MPF. Since this is a framework, we want this to be leveraged from as many different languages as possible and will include SWIG interface files in releases of the framework. Writing the framework in Python or Ruby for example, we felt would restrict the end use of the framework.
However we only intend to write the core of the framework in C++, and allow the framework to be extended through scripting languages - notably Python. We are attempting to design the framework to be as abstract as possible, so modules and plugins in different languages can easily be used. It is likely that nearly every module MPF uses will be written in a scripting language.
Stay tuned for more updates soon, about the structure of the actual framework.