# SOTER

SOTER is an extensible static analysis and transformation tool that facilitates safe yet efficient message passing in actor programs. SOTER automatically infers ownership transfer of a message content, insuring that it can be safely passed by reference. SOTER serves as a message passing optimizer for actor model implementations with pass-by-value default semantics (e.g. ActorFoundry) and as a message passing safety checker for actor model implementations with pass-by-reference default semantics (e.g. Scala actors).

To infer ownership transfer, SOTER performs a conservative and sound static analysis using IBM's WALA analysis toolkit. SOTER handles Java bytecode, and thus can be easily extended to support any actor language or framework that compiles to Java bytecode. The current implementation supports the ActorFoundry actor framework and Scala actor library.

## Documentation

### Building

SOTER is provided as an Eclipse workspace, which can be built in Eclipse IDE. Also, SOTER is part of the special ActorFoundry distribution mentioned above, where it comes as a pre-built library file soter.jar.

### Running

SOTER can run in a batch mode as well as analyze a single actor program. As part of the special ActorFoundry distribution mentioned above, SOTER is executed in a batch mode as a build step, and thus is applied to every compiled actor program. Please refer to build.xml file in the root folder of this distribution, where you can see how SOTER is invoked by the message_optimize Ant target, and in particular, different options that configure SOTER's execution.

SOTER can analyze individual actor program(s) both for ActorFoundry and Scala. In the SOTER's distribution you can find three launch configurations: for ActorFoundry actor programs, for Scala unannotated actor programs, and for Scala annotated actor programs. From these launch configurations you can notice that by default SOTER looks in the test_ActorFoundry folder for the analyzed ActorFoundry programs and in the test_Scala folder for the analyzed Scala programs. You need to copy the compiled code (Java bytecode) of the analyzed actor program in one of these folders, choose the appropriate launch configuration, and execute SOTER.

Note that for this individual analysis you need to compile ActorFoundry actor programs without applying the batch SOTER optimization and Kilim weaving (i.e. do not execute message_optimize and weave Ant tasks from the build.xml of the ActorFoundry distribution).

You can compile the unannotated Scala examples directly from the Scala-2.7.7.final archive. It contains the test/ folder with the Scala unannotated examples and several .bat files to simplify their compilation and execution.

To compile the annotated Scala examples, please check out the special Scala distribution that supports annotations. The launch configuration for these examples expects to see this special Scala distribution in the Scala workspace, located in the same parent folder with the SOTER workspace.

The SOTER software is NOT in the public domain. However, it is freely available without fee for education, research, and non-profit purposes. Read the complete SOTER license.

The licenses for the third-party software are referenced in README file in the SOTER distribution's root folder.

## Acknowledgments

We would like to thank the following project groups of the Fall 2009 senior-level Software Engineering course (CS427) at the University of Illinois:

• Clownfish
• Rainbow_Fish (Alexander Loeb and others)
• Swordfish (David Paola, Stoyan Gaydarov and others)
• Threadfin (Jurand Nogiec, Jeffrey Dennhardt and others)