The Apache Airavata sandbox area is for experimental code which are not yet ready to be included in the airavata trunk svn. The status of  of sandbox projects should be discussed in the dev mailing list first. Each sub-project within the sandbox may be discrete and not integrated well.  