_With Melange having elements of issue-tracker, content-management-software, wiki and social-networking-software, a natural question is: "Why not leverage existing open source software and adapt it to the Melange role?"._

## Restrictions

There are several restrictions and requirements that have resulted in things being the way they are, with little opportunity to change them. We hope that by documenting these restrictions the design decisions that were (and will be) made will make more sense.

### Melange must run on Google Infrastructure

GSoC and GHOP are Google programs and need to run on Google infrastructure. Google engineers, particularly security engineers, can then step in to sort out problems if they arise. It is not sensible/practical/part-of-the-google-culture to run on, say, an arbitrary LAMP stack of non standard configuration. In short, running on Google infrastructure is a hard requirement that cannot be removed.

### Google AppEngine supported only Python

When the development of Melange started (mid-2008) the only language supported on Google AppEngine was Python. It now does support a number of other languages that run on the JVM, but it would be counter-productive to re-re-implement the GSoC framework.

### AppEngine is not quite designed for Melange

The kind of applications that AppEngine is designed to host do not quite include Melange. Most pages in Melange need to present the user with a lot of data, while the philosophy behind AppEngine is that if you need to show more than 10 results at a time you're doing something wrong (viz. the Google search results). Since we really do need to show users (and in particular the Program Administrators from the Google site) we are regularly pushing AppEngine's limits, which results in slightly awkward user interfaces, slow page load times, and similar issues.

## Frameworks

### JQuery

[jQuery](http://jquery.com/) is a client side javascript library running in the client's browser.  The jQuery library (and several plugins) have been added to Melange to gain its benefits.  jQuery is used for various things in Melange, some of which _require_ it (such as the lists).

### Django

MediaWiki and Drupal, both of which could otherwise be used as a basis for Melange are written in Php, which ruled them out at the time frameworks were chosen. [Django](http://www.djangoproject.com/) is a server side page formatting library written in Python that runs on GAE.  Version 1.1 is being used in Melange.  Django had 'native' support on AppEngine from the beginning, with its major aspects having been already ported by the AppEngine team.